replicate designs: intrasubject variability [Power / Sample Size]
❝ How can I calculate the intrasubject variability (CV) after my study was done ?
❝ Using MSE or (POE, U, L) ?
❝
❝ I tried to compare them for Partially replicated study:
❝ CV for Cmax by MSE = 51.59%
❝ CV for Cmax by (POE, U, L) = 43.27%
❝ So, which one is the correct ?
It depends on what you want and what for. From the ANOVA of replicate designs (partial and full) you get the with-subject \(\small{CV_\textrm{w}}\) by $$\small{CV_\textrm{w}=\sqrt{\exp(MSE)-1}}\tag{1}$$ To get the pooled \(\small{CV_\textrm{w}}\) from \(\small{CV_\textrm{wT}}\) and \(\small{CV_\textrm{wR}}\) you have to convert them to their associated variances $$\small{\begin{matrix}\tag{2}
s_\textrm{wT}^2=\log_{e}(CV_\textrm{wT}^2+1)\\
s_\textrm{wR}^2=\log_{e}(CV_\textrm{wR}^2+1)
\end{matrix}}$$ calculated their mean $$\small{s_\textrm{w}^2=(s_\textrm{wT}^2+s_\textrm{wR}^2)/2}\tag{3}$$ and back-transform to the \(\small{CV_\textrm{w}}\) $$\small{CV_\textrm{w}= \sqrt{\exp(s_\textrm{w}^2)-1}}\tag{4}$$ This is exact only in a full replicate design because in a partial replicate \(\small{CV_\textrm{wT}}\) is unknown. \(\small{CV_\textrm{w}}\) obtained by \(\small{(4)}\) is identical to the one obtained by \(\small{(1)}\) only if sequences are balanced. Let’s try that:
library(replicateBE)
library(PowerTOST)
# Patterson & Jones https://doi.org/10.1002/pst.498 (Table II)
# partial replicate, balanced, complete
x <- method.A(data = rds04, verbose = TRUE, print = FALSE,
details = TRUE)
# get subjects / sequence
n <- as.integer(strsplit(x[["Sub/seq"]], "\\|")[[1]])
# CVw from the CI
CVw <- CI2CV(lower = x[["CL.lo(%)"]], upper = x[["CL.hi(%)"]],
design = "2x3x3", n = n)
cat(paste0("Design: ", x[["Design"]],
", subjects / sequence: ", x[["Sub/seq"]], "\n"),
sprintf("CVwR from Method A = %.2f%%", x[["CVwR(%)"]]), "\n",
sprintf("CVwT from Method A = %.2f%%", x[["CVwT(%)"]]), "\n",
sprintf("CVw from CI = %.2f%%", 100 * CVw), "\n",
sprintf("CVw from ANOVA MSE = %.2f%%", 100 * mse2CV(0.28377)), "\n")
Data set DS04: Method A by lm()
───────────────────────────────────
Type III Analysis of Variance Table
Response: log(PK)
Df Sum Sq Mean Sq F value Pr(>F)
sequence 2 4.2619 2.13095 2.06562 0.13785915
period 2 0.0657 0.03287 0.11582 0.89075874
treatment 1 3.4031 3.40306 11.99223 0.00079058
sequence:subject 48 49.5180 1.03162 3.63540 2.9213e-08
Residuals 99 28.0935 0.28377
treatment T – R:
Estimate Std. Error t value Pr(>|t|)
0.316370000 0.091357800 3.462980000 0.000790582
99 Degrees of Freedom
Design: TRR|RTR|RRT, subjects / sequence: 17|17|17
CVwR from Method A = 61.22%
CVwT from Method A = NA%
CVw from CI = 57.28%
CVw from ANOVA MSE = 57.28%
Let’s remove the first subject from the data set and see what happens.
rds04 <- rds04[rds04$subject != 1, ] # keep all but the first -> imbalanced
x <- method.A(data = rds04, verbose = TRUE, print = FALSE,
details = TRUE)
n <- as.integer(strsplit(x[["Sub/seq"]], "\\|")[[1]])
CVw <- CI2CV(lower = x[["CL.lo(%)"]], upper = x[["CL.hi(%)"]],
design = "2x3x3", n = n)
cat(paste0("Design: ", x[["Design"]],
", subjects / sequence: ", x[["Sub/seq"]], "\n"),
sprintf("CVwR from Method A = %.2f%%", x[["CVwR(%)"]]), "\n",
sprintf("CVwT from Method A = %.2f%%", x[["CVwT(%)"]]), "\n",
sprintf("CVw from CI = %.2f%%", 100 * CVw), "\n",
sprintf("CVw from ANOVA MSE = %.2f%%", 100 * mse2CV(0.28825)), "\n")
Data set DS04: Method A by lm()
───────────────────────────────────
Type III Analysis of Variance Table
Response: log(PK)
Df Sum Sq Mean Sq F value Pr(>F)
sequence 2 2.8418 1.42092 1.43254 0.2489319
period 2 0.0461 0.02303 0.07989 0.9232771
treatment 1 3.2785 3.27853 11.37382 0.0010713
sequence:subject 47 46.6188 0.99189 3.44104 1.3845e-07
Residuals 97 27.9605 0.28825
treatment T – R:
Estimate Std. Error t value Pr(>|t|)
0.31368000 0.09301090 3.37251000 0.00107127
97 Degrees of Freedom
Design: TRR|RTR|RRT, subjects / sequence: 17|16|17
CVwR from Method A = 61.60%
CVwT from Method A = NA%
CVw from CI = 57.79%
CVw from ANOVA MSE = 57.80%
What about an imbalanced and incomplete (periods missing) full replicate design?
# The EMA's (in)famous reference data set I
x <- method.A(data = rds01, verbose = TRUE, print = FALSE,
details = TRUE)
n <- as.integer(strsplit(x[["Sub/seq"]], "\\|")[[1]])
CVw <- CI2CV(lower = x[["CL.lo(%)"]], upper = x[["CL.hi(%)"]],
design = "2x2x4", n = n)
cat(paste0("Design: ", x[["Design"]],
", subjects / sequence: ", x[["Sub/seq"]], "\n"),
sprintf("CVwR from Method A = %.2f%%", x[["CVwR(%)"]]), "\n",
sprintf("CVwT from Method A = %.2f%%", x[["CVwT(%)"]]), "\n",
sprintf("CVw from CI = %.2f%%", 100 * CVw), "\n",
sprintf("CVw from ANOVA MSE = %.2f%%", 100 * mse2CV(0.159995)), "\n")
Data set DS01: Method A by lm()
───────────────────────────────────
Type III Analysis of Variance Table
Response: log(PK)
Df Sum Sq Mean Sq F value Pr(>F)
sequence 1 0.0077 0.007652 0.00268 0.9588496
period 3 0.6984 0.232784 1.45494 0.2278285
treatment 1 1.7681 1.768098 11.05095 0.0010405
sequence:subject 75 214.1296 2.855061 17.84467 < 2.22e-16
Residuals 217 34.7190 0.159995
treatment T – R:
Estimate Std. Error t value Pr(>|t|)
0.14547400 0.04650870 3.12788000 0.00200215
217 Degrees of Freedom
Design: TRTR|RTRT, subjects / sequence: 39|38
CVwR from Method A = 46.96%
CVwT from Method A = 35.16%
CVw from CI = 42.58%
CVw from ANOVA MSE = 41.65%
Conclusion: If you have the ANOVA and are interested in \(\small{CV_\textrm{w}}\), use \(\small{(1)}\).
Dif-tor heh smusma 🖖🏼 Довге життя Україна!
![[image]](https://static.bebac.at/pics/Blue_and_yellow_ribbon_UA.png)
Helmut Schütz
![[image]](https://static.bebac.at/img/CC by.png)
The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes
Complete thread:
- intrasubject variability Bebac user 2022-01-23 10:55 [Power / Sample Size]
- intrasubject variability ElMaestro 2022-01-23 12:24
- replicate designs: intrasubject variabilityHelmut 2022-01-23 13:12
- replicate designs: intrasubject variability Bebac user 2022-01-23 14:03
- intrasubject variability dshah 2022-01-24 10:53