Replicate designs based on information of 2×2×2 design [Design Issues]

posted by Helmut Homepage – Vienna, Austria, 2021-02-20 14:50 (211 d 02:31 ago) – Posting: # 22219
Views: 843

Hi Ibrahim,

» I had performed a 2X2 crossover study […] The results showed a very high unexpected intra-subject variability as following:
» Cmax: 73.8451%, AUCt: 67.6524%
»
» Therefore, a sequential two stage study won't be applicable in that condition.

Correct. Such a method does not exist.

» My question is: If i repeat the aforementioned study again, shall i follow a partial replicated cross over design or full replicated cross over design?

I recommend a full replicate design. If you want to have only three periods, opt for TRT|RTR or TRR|RTT. The partial replicate is nasty when it comes to heteroscedasticity (CVwT  CVwR).

It’s a little bit tricky because the CVw of the 2×2×2 is actually pooled from the (unknown) intra-subject variabilities of T and R (CVwT and CVwR). If you naïvely use the CVw in the sample size estimation (assuming that CVwT = CVwR), beware of these possibilities:Hence, if you don’t want to perform a pilot study in a replicate design (recommended!), at least explore the possibilities to be protected against surprises. Quite often CVwT < CVwR which allows for a lower sample size. [image]-script at the end.

Results with your values, variance ratios (s2wT / s2wR = 0.5 … 2), assumed T/R-ratio 0.9 (don’t use a ‘better’ one for a HVD), target power 80%, the EMA’s Average Bioequivalence with Expanding Limits (ABEL) if CVwR of Cmax > 30%, conventional ABE for AUC, various designs.
2x2x3 is a 2-sequence 3-period full replicate design (TRT|RTR or TRR|RTT),
2x2x4 is a 2-sequence 4-period full replicate design (TRTR|RTRT, TRRT|RTTR, or TTRR|RRTT),
2x3x3 is the 3-sequence 3-period partial replicate design (TRR|RTR|RRT).

 regulator Cmax    cap AUC  cap
       EMA ABEL 50.00% ABE <NA>
2x2x3 design
 Cmax
   CVwT   CVwR var.ratio method  n  power
 0.5802 0.8869    0.5000   ABEL 64 0.8008
 0.6454 0.8282    0.6667   ABEL 64 0.8007
 0.7385 0.7385    1.0000   ABEL 64 0.8001
 0.8282 0.6454    1.5000   ABEL 66 0.8088
 0.8869 0.5802    2.0000   ABEL 68 0.8099
 AUC
      CVw method   n  power
 0.676524    ABE 254 0.8019

 regulator Cmax    cap AUC  cap
       EMA ABEL 50.00% ABE <NA>
2x2x4 design
 Cmax
   CVwT   CVwR var.ratio method  n  power
 0.5802 0.8869    0.5000   ABEL 44 0.8123
 0.6454 0.8282    0.6667   ABEL 44 0.8124
 0.7385 0.7385    1.0000   ABEL 44 0.8122
 0.8282 0.6454    1.5000   ABEL 44 0.8107
 0.8869 0.5802    2.0000   ABEL 44 0.8035
 AUC
      CVw method   n  power
 0.676524    ABE 170 0.8033

 regulator Cmax    cap AUC  cap
       EMA ABEL 50.00% ABE <NA>
2x3x3 design
 Cmax
   CVwT   CVwR var.ratio method  n  power
 0.5802 0.8869    0.5000   ABEL 72 0.8324
 0.6454 0.8282    0.6667   ABEL 69 0.8224
 0.7385 0.7385    1.0000   ABEL 66 0.8119
 0.8282 0.6454    1.5000   ABEL 63 0.8020
 0.8869 0.5802    2.0000   ABEL 63 0.8035


Lessons learned: With such high variability you are far above the EMA’s upper cap of scaling (50%) and you may expand the limits only to 69.84–143.19%. Here different variabilities don’t count that much because the procedure behaves similar to the TOST (apart from the point estimate constraint).
AUC is the shown-stopper. For the EMA (and acc. to the Egyptian guideline) you are not allowed to expand the limits and have to go with ABE.

» My second: Shall i follow RASBE or unscaled BE limits ?

It depends on your ‘target’ jurisdiction.Try the script with regulator <- "FDA" or "WHO" or "HC". Since in those jurisdictions you are allowed to scale AUC, doable.

 regulator  Cmax  cap   AUC  cap
       FDA RSABE <NA> RSABE <NA>
2x2x4 design
 Cmax
   CVwT   CVwR var.ratio method  n  power
 0.5802 0.8869    0.5000  RSABE 26 0.8114
 0.6454 0.8282    0.6667  RSABE 26 0.8102
 0.7385 0.7385    1.0000  RSABE 26 0.8047
 0.8282 0.6454    1.5000  RSABE 28 0.8045
 0.8869 0.5802    2.0000  RSABE 32 0.8154
 AUC
   CVwT   CVwR var.ratio method  n  power
 0.5344 0.8080    0.5000  RSABE 22 0.8023
 0.5932 0.7562    0.6667  RSABE 24 0.8146
 0.6765 0.6765    1.0000  RSABE 24 0.8029
 0.7562 0.5932    1.5000  RSABE 28 0.8158
 0.8080 0.5344    2.0000  RSABE 30 0.8036

 regulator Cmax    cap  AUC    cap
       WHO ABEL 50.00% ABEL 50.00%
2x2x4 design
 Cmax
   CVwT   CVwR var.ratio method  n  power
 0.5802 0.8869    0.5000   ABEL 44 0.8123
 0.6454 0.8282    0.6667   ABEL 44 0.8124
 0.7385 0.7385    1.0000   ABEL 44 0.8122
 0.8282 0.6454    1.5000   ABEL 44 0.8107
 0.8869 0.5802    2.0000   ABEL 44 0.8035
 AUC
   CVwT   CVwR var.ratio method  n  power
 0.5344 0.8080    0.5000   ABEL 38 0.8096
 0.5932 0.7562    0.6667   ABEL 38 0.8092
 0.6765 0.6765    1.0000   ABEL 38 0.8080
 0.7562 0.5932    1.5000   ABEL 38 0.8016
 0.8080 0.5344    2.0000   ABEL 40 0.8003

 regulator Cmax  cap  AUC    cap
        HC   PE <NA> ABEL 57.38%
2x2x4 design
 Cmax
      CVw method  n  power
 0.738451     PE 24 0.8018
 AUC
   CVwT   CVwR var.ratio method  n  power
 0.5344 0.8080    0.5000   ABEL 30 0.8159
 0.5932 0.7562    0.6667   ABEL 30 0.8137
 0.6765 0.6765    1.0000   ABEL 30 0.8040
 0.7562 0.5932    1.5000   ABEL 34 0.8151
 0.8080 0.5344    2.0000   ABEL 38 0.8067



library(PowerTOST)
CV.p.Cmax <- 0.738451 # CVw of 2x2x2 study (pooled from unknown CVwT and CVwR)
CV.p.AUC  <- 0.676524 # CVw of 2x2x2 study (pooled from unknown CVwT and CVwR)
regulator <- "EMA"    # select from "EMA", "HC" (Health Canada),
                      # "GCC" (Gulf Cooperation Council), "WHO", "FDA"

theta0    <- 0.90     # assumed T/R-ratio
target    <- 0.80     # target (desired) power
design    <- "2x2x3"  # 2-sequence 3-period full replicate design
                      # alternatively:
                      # "2x2x4" 2-sequence 4-period full replicate design
                      # "2x3x3" 2-sequence 3-period partial replicate design

ratio     <- unique(sort(c(1/seq(1, 2, 0.5), seq(1, 2, 0.5))))
                      # assumed variance ratios: s2wT / s2wR
                      # CVwT and CVwR

CV.Cmax   <- CVp2CV(CV = CV.p.Cmax, ratio = ratio)
CV.AUC    <- CVp2CV(CV = CV.p.AUC, ratio = ratio)
if (regulator == "HC") {
  res.Cmax <- data.frame(CVw = CV.p.Cmax, method = "PE", n = NA,
                         power = NA, stringsAsFactors = FALSE)
} else {
res.Cmax  <- data.frame(CVwT = CV.Cmax[, 1], CVwR = CV.Cmax[, 2],
                        var.ratio = ratio, method = NA, n = NA,
                        power = NA, stringsAsFactors = FALSE)
}
if (regulator %in% c("HC", "WHO", "FDA")) {
  res.AUC <- data.frame(CVwT = CV.AUC[, 1], CVwR = CV.AUC[, 2],
                        var.ratio = ratio, method = NA, n = NA,
                        power = NA, stringsAsFactors = FALSE)
} else {
  res.AUC <- data.frame(CVw = CV.p.AUC, method = "ABE", n = NA,
                        power = NA, stringsAsFactors = FALSE)
}
cond      <- data.frame(regulator = c("EMA", "WHO", "GCC", "HC", "FDA"),
                        Cmax = c(rep("ABEL", 3), "PE", "RSABE"),
                        V1 = c(rep(sprintf("%.2f%%",
                                   100*reg_const(regulator = "EMA")$CVcap), 2),
                                   NA, NA, NA),
                        AUC = c("ABE", "ABEL", "ABE", "ABEL", "RSABE"),
                        V2 = c(NA, sprintf("%.2f%%",
                               100*reg_const(regulator = "EMA")$CVcap),
                               NA, sprintf("%.2f%%",
                               100*reg_const(regulator = "HC")$CVcap), NA))
names(cond)[c(3, 5)] <- "cap"
pb        <- txtProgressBar(0, 1, 0, char = "\u2588", width = NA, style = 3)
i         <- 0
for (j in 1:nrow(res.Cmax)) {
  i <- i + 1
  if (regulator == "HC") {     # only PE within 80.0-125.0%
      res.Cmax[j, 3:4]   <- sampleN.TOST(alpha = 0.5, CV = CV.p.Cmax,
                                         theta0 = theta0, targetpower = target,
                                         design = design, print = FALSE)[7:8]
  } else {                     # others
    CV <- as.numeric(c(res.Cmax[j, 1:2]))
    if (!regulator == "FDA") { # all but the FDA
      res.Cmax$method[j] <- "ABEL"
      if (!design == "2x3x3" & (res.Cmax[j, 1] > res.Cmax[j, 2])) {
        res.Cmax[j, 5:6] <- sampleN.scABEL(CV = CV, theta0 = theta0,
                                           targetpower = target,
                                           design = design, details = FALSE,
                                           print = FALSE)[8:9]
      } else { # if partial replicate and CVwT > CVwR: subject simulations
        res.Cmax[j, 5:6] <- sampleN.scABEL.sdsims(CV = CV, theta0 = theta0,
                                                  targetpower = target,
                                                  design = design,
                                                  details = FALSE, print = FALSE,
                                                  progress = FALSE)[8:9]
      }
    } else {                   # FDA (subject simulations not implemented)
      res.Cmax$method[j] <- "RSABE"
      res.Cmax[j, 5:6] <- sampleN.RSABE(CV = CV, theta0 = theta0,
                                        targetpower = target, design = design,
                                        details = FALSE, print = FALSE)[8:9]     }
  }
  setTxtProgressBar(pb, i/(nrow(res.Cmax)+nrow(res.AUC)))
} # estimating results for Cmax
if (regulator == "WHO") reg <- "EMA"
for (j in 1:nrow(res.AUC)) {
  i <- i + 1
  if (regulator %in% c("EMA", "GCC")) { # ABE
    res.AUC[j, 3:4]   <- sampleN.TOST(CV = CV.p.AUC, theta0 = theta0,
                                      targetpower = target, design = design,
                                      details = FALSE, print = FALSE)[7:8]
  } else {                              # others
    CV <- as.numeric(c(res.AUC[j, 1:2]))
    if (!regulator == "FDA") {          # all but the FDA
      res.AUC$method[j] <- "ABEL"
      if (!design == "2x3x3" & (res.AUC[j, 1] <= res.AUC[j, 2]) | reg == "HC") {
        res.AUC[j, 5:6] <- sampleN.scABEL(CV = CV, theta0 = theta0,
                                          targetpower = target, design = design,
                                          regulator = reg, details = FALSE,
                                          print = FALSE)[8:9]
      } else { # if partial replicate and CVwT > CVwR: subject simulations
        res.AUC[j, 5:6] <- sampleN.scABEL.sdsims(CV = CV, theta0 = theta0,
                                                 targetpower = target,
                                                 design = design,
                                                 regulator = reg,
                                                 details = FALSE,
                                                 print = FALSE,
                                                 progress = FALSE)[8:9]
      }
    } else {                   # FDA (subject simulations not implemented)
      res.AUC$method[j] <- "RSABE"
      res.AUC[j, 5:6] <- sampleN.RSABE(CV = CV, theta0 = theta0,
                                       targetpower = target, design = design,
                                       details = FALSE, print = FALSE)[8:9]
    }
  }
  setTxtProgressBar(pb, i/(nrow(res.Cmax)+nrow(res.AUC)))
} # estimating results for AUC
close(pb)
if (regulator == "HC") {
  res.Cmax[, 4] <- signif(res.Cmax[, 4], 4)
} else {
  res.Cmax[, c(1:3, 6)] <- signif(res.Cmax[, c(1:3, 6)], 4)
}
if (!regulator %in% c("EMA", "GCC")) {
  res.AUC[, c(1:3, 6)] <- signif(res.AUC[, c(1:3, 6)], 4)
} else {
  res.AUC[, 4] <- signif(res.AUC[, 4], 4)
}
info <- paste(design, "design", "\n Cmax\n")
print(cond[cond$regulator == regulator, ], row.names = FALSE);cat(info);print(res.Cmax, row.names = FALSE);cat(" AUC\n"); print(res.AUC, row.names = FALSE)


Dif-tor heh smusma 🖖
Helmut Schütz
[image]

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

Complete thread:

Activity
 Admin contact
21,691 posts in 4,534 threads, 1,541 registered users;
online 14 (0 registered, 14 guests [including 6 identified bots]).
Forum time: Sunday 18:22 CEST (Europe/Vienna)

If you want to get people to believe
something really, really stupid,
just stick a number on it.    Charles Seife

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