If it is real: results [RSABE / ABEL]

posted by Helmut Homepage – Vienna, Austria, 2013-03-29 00:20 (4483 d 10:13 ago) – Posting: # 10305
Views: 25,892

Hi Martin!

❝ IMHO: yes as this is a constant and should not dependent on the number of simulation runs.


Oh yes, sure. Sorry for my stupidity.

❝ Ps.: ... and yes its the same guy who is famous for publicly calling some approaches “bullshit” :-D


I always thought he should work on his social skills.

Here the results of my sim’s for target α 0.05. Partial and full replicate designs, n=24/48.

[image]

[image]

The FDA’s method would lead to a large α-inflation (as presented by Detlew above) for CVWR ≤30%. This could be corrected by adjusting α. However, since scaling is only allowed for CVWR >30% nothing has to be done. Like the conventional TOST the test gets more con­ser­vative with increasing CV (and n).

[image]

[image]

The EMA’s method is another cup of tea. α-inflation is seen up to 45%! The test is closer to the nominal level than the FDA’s.
Interesting the behavior of the partial replicate with n=24. :confused:


Code (10–25 iterations to reach convergence, runtime on my machine 15–45 seconds depending on design, n, CV):
require(PowerTOST)
reg   <- "EMA"   # "EMA" for ABEL or "FDA" for scABE
CV    <- 0.300   # intra-subject CV of reference
n     <- 24      # total sample size
                 # in case of imbalanced sequences use a vector:
                 # e.g., c(n1,n2,n3)
des   <- "2x3x3" # partial: "2x3x3" full: "2x2x4"
                 # for others see known.designs()
print <- TRUE    # intermediate results
if (reg == "EMA") { # scABEL
  ifelse (CV <= 0.5, GMR <- exp(0.7601283*CV2se(CV)),
                     GMR <- exp(0.7601283*CV2se(0.5)))
  if (CV <= 0.3) GMR <- 1.25
  } else {          # RSABE
  ifelse (CV > 0.3, GMR <- exp(0.8925742*CV2se(CV)),
                    GMR <- 1.25)
}
nsims <- 1e6
prec  <- 1e-8    # precision of bisection algo
x     <- 0.05    # target alpha
nom   <- c(0.001, x)                # from conservative to target alpha
lower <- min(nom); upper <- max(nom)
delta <- upper - lower              # interval
ptm   <- proc.time()                # start timer
iter  <- 0
while (abs(delta) > prec) {         # until precision reached
  iter  <- iter + 1
  x.new <- (lower+upper)/2          # bisection
  if (reg == "EMA") {
    pBE <- power.scABEL(alpha=x.new, theta0=GMR, CV=CV,
                        n=n, design=des, nsims=nsims)
    } else {
    pBE <- power.RSABE(alpha=x.new, theta0=GMR, CV=CV,
                       n=n, design=des, nsims=nsims)
  }
  if (print) {                      # show progress
    if (iter == 1) cat(" i  adj. alpha       pBE\n")
    cat(format(iter, digits=2, width=2),
        format(x.new, digits=6, width=11, nsmall=7),
        format(pBE, digits=6, width=9, nsmall=6), "\n")
    if (.Platform$OS.type == "windows") flush.console()
  }
  if (abs(pBE - x) <= prec) break   # precision reached
  if (pBE > x) upper <- x.new       # move upper limit downwards
  if (pBE < x) lower <- x.new       # move lower limit upwards
  delta <- upper - lower            # new interval
}
if (print) cat("run-time:", round((proc.time()[3]-ptm[3]), 1),
               "seconds  iterations:", iter, "\n")
cat("regulator:", reg, " CV:", CV, " n:", n, " design:", des,
    "\ntarget alpha:", x, " adjusted alpha:", x.new,
    " pBE:", pBE, "(empiric alpha)\n")

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,427 posts in 4,929 threads, 1,681 registered users;
42 visitors (0 registered, 42 guests [including 11 identified bots]).
Forum time: 11:34 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