Two 2x2 and one 6x3 crossover design [Design Issues]

posted by Helmut Homepage – Vienna, Austria, 2019-09-24 12:57 (1841 d 02:19 ago) – Posting: # 20644
Views: 2,919

Hi Bing,

❝ Dear Helmut,

            Not interested in opinions of other members of the forum?

❝ Would you evaluate the advantages of two independent 2x2 trials (T vs. R1 and T vs. R2) over the 6x3 crossover design? Actually I have completed the two 2x2 trials. However, someone has challenged me for not conducting it as in 6x3 crossover.


What speaks against a 6×3 trial:
  1. In the past some (!) agencies didn’t like 6×3 (and 3×3) trials essentially saying “We are not interested in the other reference product”. However, at least for the major agencies (FDA, EMA) these day are gone.
  2. Sample size is a multiple of 6 instead of 2.
  3. Larger blood volume and higher chance of dropouts.
  4. The worst case scenario. T/R1 passes and T/R2 fails. Although you present only the passing part to agency 1, both the analytical and statistical report will still contain the entire data. Doesn’t look good.
#2: Higher sample size (though outweighed by increased power):

CV     <- seq(0.15, 0.4, 0.05)
theta0 <- 0.95
target <- 0.80
res    <- data.frame(CV = CV, n.2x2 = NA, power.2x2 = NA,
                     n.6x3 = NA, power.6x3 = NA)
for (j in 1:nrow(res)) {
  x <- sampleN.TOST(CV = CV[j], theta0 = theta0,
                    targetpower = target, print = FALSE,
                    details = FALSE)
  res[j, 2:3] <- x[1, 7:8]
  # round up to the next multiple of 6
  res[j, 4]   <- res[j, 2] + (6 - res[j, 2] %% 6)
  res[j, 5]   <- power.TOST(CV = CV[j], theta0 = theta0,
                            n = res[j, 4])
}
print(signif(res, 4), row.names = FALSE)

  CV n.2x2 power.2x2 n.6x3 power.6x3
0.15    12    0.8305    18    0.9514
0.20    20    0.8347    24    0.8960
0.25    28    0.8074    30    0.8343
0.30    40    0.8158    42    0.8342
0.35    52    0.8075    54    0.8220
0.40    66    0.8053    72    0.8379


#4 can happen, of course.

library(PowerTOST)
CV     <- seq(0.15, 0.4, 0.05)
theta0 <- 0.95
tests  <- 1
target <- 0.80 # overall passing test(s)
targetpower <- target^(1/tests)
res <- data.frame(CV = CV, n = NA, risk.1 = NA, risk.2 = NA,
                  above = "no", stringsAsFactors = FALSE)
for (j in 1:nrow(res)) {
  n.2x2 <- sampleN.TOST(CV = CV[j], theta0 = theta0,
                        targetpower = targetpower,
                        print = FALSE, details = FALSE)[["Sample size"]]
  n.6x3 <- n.2x2 + (6 - n.2x2 %% 6) # round up to the next multiple of 6
  res[j, 2] <- n.6x3
  res[j, 3] <- 1 - power.TOST(CV = CV[j], theta0 = theta0, n = n.6x3)
  res[j, 4] <- 1 - (1 - res[j, 3])^2
}
res$above[which(res$risk.2 > (1 - target))] <- "yes"
names(res)[5] <- ">beta"
res[, 3:4] <- signif(res[, 3:4], 3)
cat("Producer\u2019s \u03B2 = 1 \u2013 power\n");print(res, row.names = FALSE)

Producer’s β = 1 – power
  CV  n risk.1 risk.2 >beta
0.15 18 0.0486 0.0949    no
0.20 24 0.1040 0.1970    no
0.25 30 0.1660 0.3040   yes
0.30 42 0.1660 0.3040   yes
0.35 54 0.1780 0.3240   yes
0.40 72 0.1620 0.2980   yes


If you want that both pass, you have to increase the sample size accordingly.

tests  <- 2
...

Producer’s β = 1 – power
  CV  n risk.1 risk.2 >beta
0.15 18 0.0486 0.0949    no
0.20 30 0.0514 0.1000    no
0.25 42 0.0673 0.1300    no
0.30 54 0.0882 0.1690    no
0.35 72 0.0879 0.1680    no
0.40 90 0.0937 0.1790    no


What speaks against two 2×2 trials? Costs.

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
23,249 posts in 4,885 threads, 1,652 registered users;
77 visitors (0 registered, 77 guests [including 10 identified bots]).
Forum time: 15:17 CEST (Europe/Vienna)

Nothing shocks me. I’m a scientist.    Harrison Ford (as Indiana Jones)

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