replicate designs: intrasubject variability [Power / Sample Size]

posted by Helmut Homepage – Vienna, Austria, 2022-01-23 14:12 (378 d 13:50 ago) – Posting: # 22740
Views: 1,245

Hi Bebac user,

❝ 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%

Of course, we don’t get \(\small{CV_\textrm{wT}}\) in the partial replicate design. Since the study was balanced, \(\small{CV_\textrm{w}}\) calculated from the CI is identical to the one obtained from the ANOVA’s \(\small{MSE}\).

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%

Not exactly the same but pretty close.

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%

Not so close. \(\small{(3)}\) is only correct for balanced sequences. Although it’s possible to weigh the variances by the degrees of freedom, I wouldn’t do that.

Conclusion: If you have the ANOVA and are interested in \(\small{CV_\textrm{w}}\), use \(\small{(1)}\).

Dif-tor heh smusma 🖖🏼 Довге життя Україна! [image]
Helmut Schütz
[image]

The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes

Complete thread:

UA Flag
Activity
 Admin contact
22,479 posts in 4,709 threads, 1,603 registered users;
18 visitors (0 registered, 18 guests [including 9 identified bots]).
Forum time: 04:03 CET (Europe/Vienna)

The rise of biometry in this 20th century,
like that of geometry in the 3rd century before Christ,
seems to mark out one of the great ages or critical periods
in the advance of the human understanding.    R.A. Fisher

The Bioequivalence and Bioavailability Forum is hosted by
BEBAC Ing. Helmut Schütz
HTML5