replicate designs: intrasubject variability [Power / Sample Size]

posted by Helmut Homepage – Vienna, Austria, 2022-01-23 14:12 (821 d 23:37 ago) – Posting: # 22740
Views: 2,112

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,993 posts in 4,828 threads, 1,658 registered users;
67 visitors (0 registered, 67 guests [including 5 identified bots]).
Forum time: 14:50 CEST (Europe/Vienna)

So far as I can remember,
there is not one word in the Gospels
in praise of intelligence.    Bertrand Russell

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