EMA: adjusted α [RSABE / ABEL]

posted by Helmut Homepage – Vienna, Austria, 2015-11-18 01:27 (3519 d 21:39 ago) – Posting: # 15646
Views: 10,989

Dear all,

for the ones who are concerned about inflation of the Type I Error with EMA’s ABEL (see this thread) and don’t want to risk my iteratively adjusted α. There I suspected that adjusting to ~0.025 for full replicate designs and ~0.03 for the partial replicate would maintain the TIE at ≤0.05.
I explored CV 30% (maximum inflation of the TIE) and 50% (minimum). Here are the results (T/R 0.90, sample sizes for 80 and 90% power); R-code at the end for the nerds.

      Design   CV     LL     UL  alpha target  n  power     TIE Infl
   RTRT|TRTR 0.30 0.8000 1.2500 0.0500   0.80 34 0.8028 0.08128    *
   RTRT|TRTR 0.30 0.8000 1.2500 0.0250   0.80 44 0.8040 0.04488     
   RTRT|TRTR 0.30 0.8000 1.2500 0.0500   0.90 48 0.9002 0.08226    *
   RTRT|TRTR 0.30 0.8000 1.2500 0.0250   0.90 60 0.9021 0.04552     
   RTRT|TRTR 0.50 0.6984 1.4319 0.0500   0.80 28 0.8143 0.03301     
   RTRT|TRTR 0.50 0.6984 1.4319 0.0250   0.80 34 0.8088 0.01603     
   RTRT|TRTR 0.50 0.6984 1.4319 0.0500   0.90 38 0.9065 0.02928     
   RTRT|TRTR 0.50 0.6984 1.4319 0.0250   0.90 44 0.9021 0.01615     
     RTR|TRT 0.30 0.8000 1.2500 0.0500   0.80 50 0.8016 0.08746    *
     RTR|TRT 0.30 0.8000 1.2500 0.0250   0.80 66 0.8091 0.04942     
     RTR|TRT 0.30 0.8000 1.2500 0.0500   0.90 72 0.9027 0.08861    *
     RTR|TRT 0.30 0.8000 1.2500 0.0250   0.90 90 0.9048 0.05050    *
     RTR|TRT 0.50 0.6984 1.4319 0.0500   0.80 42 0.8035 0.03170     
     RTR|TRT 0.50 0.6984 1.4319 0.0250   0.80 52 0.8061 0.01534     
     RTR|TRT 0.50 0.6984 1.4319 0.0500   0.90 58 0.9022 0.02769     
     RTR|TRT 0.50 0.6984 1.4319 0.0250   0.90 68 0.9020 0.01525     
 RRT|RTR|TRR 0.30 0.8000 1.2500 0.0500   0.80 54 0.8159 0.07155    *
 RRT|RTR|TRR 0.30 0.8000 1.2500 0.0304   0.80 63 0.8061 0.04533     
 RRT|RTR|TRR 0.30 0.8000 1.2500 0.0500   0.90 75 0.9088 0.07243    *
 RRT|RTR|TRR 0.30 0.8000 1.2500 0.0304   0.90 87 0.9068 0.04598     
 RRT|RTR|TRR 0.50 0.6984 1.4319 0.0500   0.80 39 0.8076 0.03390     
 RRT|RTR|TRR 0.50 0.6984 1.4319 0.0304   0.80 48 0.8261 0.01998     
 RRT|RTR|TRR 0.50 0.6984 1.4319 0.0500   0.90 54 0.9097 0.03305     
 RRT|RTR|TRR 0.50 0.6984 1.4319 0.0304   0.90 60 0.9024 0.02028     


Seems to work. Of course the adjustment is more conservative than necessary for all CVs above ~0.4…

I wouldn’t worry too much about the slight inflation of the TIE in RTR|TRT. Ten runs with different seeds:

0.05050 *
0.05032 
0.05027 
0.05052 *
0.05059 *
0.05066 *
0.05025 
0.05016 
0.05044 *
0.05054 *



library(PowerTOST)
theta0   <- 0.90
CV       <- c(0.3, 0.5)
target   <- c(0.8, 0.9)
design   <- c("2x2x4", "2x2x3", "2x3x3")             # PowerTOST
type     <- c("RTRT|TRTR", "RTR|TRT", "RRT|RTR|TRR") # clear words
sig      <- binom.test(x=0.05*1e6, n=1e6, alternative="less",
              conf.level=1-0.05)$conf.int[2]
res      <- matrix(nrow=24, ncol=10, byrow=TRUE, dimnames=list(NULL,
              c("Design", "CV", "LL", "UL", "alpha", "target", "n",
                "power", "TIE", "Infl")))
i        <- 0
for (j in seq_along(design)) {
  for (k in seq_along(CV)) {
    LL <- min(0.80, exp(-0.76*CV2se(CV[k])))          # EMA's ABEL
    UL <- 1/LL
    for (l in seq_along(target)) {
      for (m in 1:2) {
        i <- i + 1
        res[i, 1] <- type[match(design[j], design)]
        res[i, 2] <- sprintf("%.2f", CV[k])
        res[i, 3] <- sprintf("%.4f", LL)
        res[i, 4] <- sprintf("%.4f", UL)
        if (m == 1) {
          alpha <- 0.05       # unadjusted (GL)
        } else {
          if (design[j] == "2x3x3") {
            alpha <- 0.0304   # partial replicate
          } else {
            alpha <- 0.0250   # full replicates
          }
        }
        res[i, 5] <- sprintf("%.4f", alpha)
        res[i, 6] <- sprintf("%.2f", target[l])
        tmp       <- sampleN.scABEL(alpha=alpha, CV=CV[k],
                       theta0=theta0, targetpower=target[l],
                       des=design[j], nsims=1e5, print=F, details=F)
        res[i, 7] <- tmp[, "Sample size"]
        res[i, 8] <- sprintf("%.4f", tmp[, "Achieved power"])
        TIE       <- power.scABEL(alpha=alpha, theta0=LL, CV=CV[k],
                       n=tmp[, "Sample size"], des=design[j], nsims=1e6)
        res[i, 9] <- sprintf("%.5f", TIE)
        res[i, 10] <- ""
        if (TIE > sig) res[i, 10] <- "*"
      }
    }
  }
}
print(as.data.frame(res), row.names=FALSE)


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,428 posts in 4,929 threads, 1,687 registered users;
69 visitors (0 registered, 69 guests [including 9 identified bots]).
Forum time: 00:06 CEST (Europe/Vienna)

No matter what side of the argument you are on,
you always find people on your side
that you wish were on the other.    Thomas Berger

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