libaiyi
★    

China,
2018-05-23 10:40
(2136 d 06:15 ago)

Posting: # 18801
Views: 4,878
 

 Power decrease for the highly correlation of AUCt and AUCinf [Power / Sample Size]

Hi, all

I want to ask about power calculation. In BE, Cmax, AUCt, and AUCinf are all needed for power consideration. And the power for each one need to be bigger than overall power for the accumulation of power. But AUCinf and AUCt are highly correlated, so could I decrease the individual power and only consider about AUCt and Cmax for the power setting?

Thanks in advance.
Helmut
★★★
avatar
Homepage
Vienna, Austria,
2018-05-23 12:40
(2136 d 04:15 ago)

@ libaiyi
Posting: # 18802
Views: 4,115
 

 Relevant: The PK metric with highest CV

Hi libaiyi,

❝ I want to ask about power calculation. In BE, Cmax, AUCt, and AUCinf are all needed for power consideration. […] But AUCinf and AUCt are highly correlated,


AUC and Cmax are (highly?) correlated as well.

❝ […] so could I […] only consider about AUCt and Cmax for the power setting?


If you think about sample size estimation I would go a step further and consider only the PK metric with the highest variability, which generally* is the one of Cmax (see [msg]this thread[/msg], linked other posts, and references). You could use function power.2TOST() of the R-package PowerTOST to explore various correlations (ρ). This issue is a little bit academic because ρ is rarely known.


  • An early truncated partial AUC can be highly variable as well.

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
libaiyi
★    

China,
2018-05-24 12:02
(2135 d 04:53 ago)

@ Helmut
Posting: # 18811
Views: 4,014
 

 Relevant: The PK metric with highest CV

❝ You could use function power.2TOST() of the R-package PowerTOST to explore various correlations (ρ). This issue is a little bit academic because ρ is rarely known.



  • An early truncated partial AUC can be highly variable as well.

Hi Helmut,

Thank you for the reply. I am afraid that I did not state clearly. I still want to clarify do you mean that for the estimation of sample size, the power need to be calculated as:
Overall power = (power of AUC0 * power of AUCinf * power of Cmax)
like 0.8=(0.92*0.92*0.92)
And it could not be simplified as Overall power = (power of AUC0 * power of Cmax) to decrease power needed of each for the lack of ρ?

Thanks again.
Helmut
★★★
avatar
Homepage
Vienna, Austria,
2018-05-24 14:54
(2135 d 02:01 ago)

@ libaiyi
Posting: # 18812
Views: 4,052
 

 Power of 2 independent TOSTs ≈ 2 simultaneous TOSTs with ρ=0

Hi libaiyi,

❝ And it could not be simplified as Overall power = (power of AUC0 * power of Cmax) to decrease power needed of each for the lack of ρ?


For two tests, it could.
Try this (conventional BE-limits, T/R-ratio 0.95, target power 0.8, 2×2×2 crossover):

library(PowerTOST)
CV1      <- 0.3 # Cmax
CV2      <- 0.2 # AUC0-t
n1       <- sampleN.TOST(CV=CV1, print=FALSE)[["Sample size"]]
n2       <- sampleN.TOST(CV=CV2, print=FALSE)[["Sample size"]]
n        <- max(n1, n2)
rho.min  <- 0.25
rho.max  <- 0.75
rho.step <- 0.25
rho      <- c(1-.Machine$double.eps,
              seq(rho.max, rho.min, -rho.step),
              .Machine$double.eps)
pwr0.1   <- power.TOST(CV=CV1, n=n)
pwr0.2   <- power.TOST(CV=CV2, n=n)
nsims    <- 1e6
pwr1     <- numeric(length(rho))
res1     <- character(length(rho))
f        <- "%.4f"
for (j in seq_along(rho)) {
  pwr1[j] <- power.2TOST(CV=c(CV1, CV2), n=n, rho=rho[j], nsims=nsims)
  res1[j] <- paste0("\n  rho = ", sprintf(f, rho[j]), ": ",
                    sprintf(f, pwr1[j]))
}
res0     <- paste0("\nCV1: ", sprintf(f, CV1), ", CV2: ", sprintf(f, CV2),
  "\nSample size based on max(CV1, CV2) = ", sprintf(f, max(CV1, CV2)), ": ", n,
  "\nPower for two independent TOSTs",
  "\n  PK metric with CV  = ", sprintf(f, CV1), ": ", sprintf(f, pwr0.1),
  "\n  PK metric with CV  = ", sprintf(f, CV2), ": ", sprintf(f, pwr0.2),
  "\n    overall power (p1\u00D7p2)    : ", sprintf(f, pwr0.1*pwr0.2),
  "\nPower for two simultaneous TOSTs (",
  formatC(nsims, digits=0, format="d", big.mark = ","), " simulations each)")
cat(res0, paste0(res1), "\n")

Gives:

CV1: 0.3000, CV2: 0.2000
Sample size based on max(CV1, CV2) = 0.3000: 40
Power for two independent TOSTs

  PK metric with CV  = 0.3000: 0.8158
  PK metric with CV  = 0.2000: 0.9848
    overall power (p1×p2)    : 0.8035
Power for two simultaneous TOSTs (1,000,000 simulations each)
  rho = 1.0000: 0.8162
  rho = 0.7500: 0.8151
  rho = 0.5000: 0.8111
  rho = 0.2500: 0.8071

  rho = 0.0000: 0.8041


If ρ=1, power ~ the one by TOST of the PK metric with the higher CV. Implicitly people assume a perfect correlation when estimating the sample size based on the PK metric with the higher CV.
If ρ=0, power ~ pTOST1 × pTOST2. 证明完毕 :-D

Similar for three tests (e.g., for the FDA). Let’s assume the CV of AUC0–∞ with 0.22 to be a little bit larger than the one of AUC0–t with 0.2. Then we would get pTOST1 × pTOST2 × pTOST3 = 0.8158×0.9848×0.9660 = 0.7762. Since likely the correlation is high (esp. between AUC0–t and AUC0–∞), a relative drop in power from the desired 0.8 by less than 3% doesn’t worry me. In practice (high correlation) the loss will be negligible.

Another example. Since CV1 scratches the limit of HVD(P)s, it might be a good idea to be more cautious and assume a T/R of 0.90 (and – if you are courageous – assume a nicer one of AUC at 0.925). Let’s try a 4-period full replicate design:

library(PowerTOST)
CV1      <- 0.3 # Cmax
CV2      <- 0.2 # AUC
design   <- "2x2x4"
theta0.1 <- 0.90
theta0.2 <- 0.925
n1       <- sampleN.TOST(CV=CV1, theta0=theta0.1, design=design,
                         print=FALSE)[["Sample size"]]
n2       <- sampleN.TOST(CV=CV2, theta0=theta0.2, design=design,
                         print=FALSE)[["Sample size"]]
n        <- max(n1, n2)
nsims    <- 1e6
rho.min  <- 0.25
rho.max  <- 0.75
rho.step <- 0.25
rho      <- c(1-.Machine$double.eps,
              seq(rho.max, rho.min, -rho.step),
              .Machine$double.eps)
pwr0.1   <- power.TOST(CV=CV1, theta0=theta0.1, n=n, design=design)
pwr0.2   <- power.TOST(CV=CV2, theta0=theta0.2, n=n, design=design)
pwr1     <- numeric(length(rho))
res1     <- character(length(rho))
f        <- "%.4f"
for (j in seq_along(rho)) {
  pwr1[j] <- power.2TOST(CV=c(CV1, CV2), theta0=c(theta0.1, theta0.2),
                         n=n, design=design, rho=rho[j], nsims=nsims)
  res1[j] <- paste0("\n  rho = ", sprintf(f, rho[j]), ": ",
                    sprintf(f, pwr1[j]))
}
res0     <- paste0("\nCV1     : ", sprintf(f, CV1),
                   ", CV2     : ", sprintf(f, CV2),
  "\ntheta0.1: ", sprintf(f, theta0.1), ", theta0.2: ", sprintf(f, theta0.2),
  "\nSample size based on max(CV1, CV2) = ", sprintf(f, max(CV1, CV2)),
  ": ", n, " (", design, " design)",
  "\nPower for two independent TOSTs",
  "\n  PK metric with CV  = ", sprintf(f, CV1), ": ", sprintf(f, pwr0.1),
  "\n  PK metric with CV  = ", sprintf(f, CV2), ": ", sprintf(f, pwr0.2),
  "\n    overall power (p1\u00D7p2)    : ", sprintf(f, pwr0.1*pwr0.2),
  "\nPower for two simultaneous TOSTs (",
  formatC(nsims, digits=0, format="d", big.mark = ","), " simulations each)")
cat(res0, paste0(res1), "\n")

Gives:

CV1     : 0.3000, CV2     : 0.2000
theta0.1: 0.9000, theta0.2: 0.9250
Sample size based on max(CV1, CV2) = 0.3000: 40 (2x2x4 design)
Power for two independent TOSTs
  PK metric with CV  = 0.3000: 0.8100
  PK metric with CV  = 0.2000: 0.9985
    overall power (p1×p2)    : 0.8088
Power for two simultaneous TOSTs (1,000,000 simulations each)
  rho = 1.0000: 0.8101
  rho = 0.7500: 0.8105
  rho = 0.5000: 0.8102
  rho = 0.2500: 0.8096
  rho = 0.0000: 0.8094

If you assume a T/R-ratio of 0.90 for both (probably better):

CV1     : 0.3000, CV2     : 0.2000
theta0.1: 0.9000, theta0.2: 0.9000
Sample size based on max(CV1, CV2) = 0.3000: 40 (2x2x4 design)
Power for two independent TOSTs
  PK metric with CV  = 0.3000: 0.8100
  PK metric with CV  = 0.2000: 0.9819
    overall power (p1×p2)    : 0.7953
Power for two simultaneous TOSTs (1,000,000 simulations each)
  rho = 1.0000: 0.8101
  rho = 0.7500: 0.8089
  rho = 0.5000: 0.8041
  rho = 0.2500: 0.7992
  rho = 0.0000: 0.7958


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
libaiyi
★    

China,
2018-05-30 05:24
(2129 d 11:31 ago)

@ Helmut
Posting: # 18827
Views: 3,757
 

 Power of 2 independent TOSTs ≈ 2 simultaneous TOSTs with ρ=0

Thank you so much for the answer! I understand now. :-D
UA Flag
Activity
 Admin contact
22,957 posts in 4,819 threads, 1,638 registered users;
76 visitors (0 registered, 76 guests [including 9 identified bots]).
Forum time: 15:56 CET (Europe/Vienna)

Nothing shows a lack of mathematical education more
than an overly precise calculation.    Carl Friedrich Gauß

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