Bioequivalence and Bioavailability Forum 12:36 CET

Main page Policy/Terms of Use Abbreviations Latest Posts

 Log in |  Register |  Search

Simulations [Power / Sample Size]

posted by Helmut Homepage - Vienna, Austria, 2017-12-26 15:51  - Posting: # 18088
Views: 11,949

Hi kms,

» I mean to say always it is coming in the interval 95 to 99 and some times 100 ofcourse one time only, some times we are getting less power on 80s but very less times.

It might be in the actual study that the CV is lower and/or the GMR closer to 1 than assumed. Power is especially sensitive to the GMR. We can also simulate studies and assess the outcome. The GMR follows the log­normal distribution and the variance the χ² distribution with n–2 degrees of freedom in a 2×2×2 crossover. Try this R-code (the library PowerTOST will be installed if not available):

### housekeeping ###
rm(list=ls(all=TRUE))
packages <- c("PowerTOST", "MASS")
inst     <- packages %in% installed.packages()
if (length(packages[!inst]) > 0) install.packages(package[!inst])
invisible(lapply(packages, require, character.only=TRUE))
### give the relevant data below ###
CV      <- 0.20 # assumed CV
theta0  <- 0.95 # assumed T/R-ratio
target  <- 0.90 # target (desired) power
nsims   <- 1e4  # number of simulated studies
### change below this line only if you know what you are doing ###
plan    <- sampleN.TOST(CV=CV, theta0=theta0, targetpower=target, print=FALSE)
n       <- plan[["Sample size"]]
sim.pwr <- power.TOST.sim(CV=CV, theta0=theta0, n=n, nsims=nsims)
cat(paste0("Assumed CV = ", CV, ", GMR = ", theta0, "; target power = ", target,
    ";\nestimated sample size = ", n, " (power = ", signif(plan[["Achieved power"]], 4),
    ").\nAverage power in ", nsims, " simulated studies: ", signif(sim.pwr, 4), "\n"))


Assumed CV = 0.2, GMR = 0.95; target power = 0.9;
estimated sample size = 26 (power = 0.9176).
Average power in 10000 simulated studies: 0.9208


If you are interested in distributions of the GMR, CVs, and powers in the simulated studies, continue:

df  <- n-2
se  <- CV2se(CV)*sqrt(0.5/n) # Cave: simple formula for balanced sequences
mse <- CV2mse(CV)
res <- data.frame(GMR=rep(NA, nsims), CV=NA, power=NA)
names(res)[3] <- "post hoc power"
set.seed(123456)
res$GMR <- exp(rnorm(n=nsims, mean=log(theta0), sd=sqrt(0.5/n)*sqrt(mse)))
res$CV  <- mse2CV(mse*rchisq(n=nsims, df=df)/df)
for (j in 1:nsims) {
  res[j, 3] <- power.TOST(CV=res$CV[j], theta0=res$GMR[j], n=n)
}
cat("Results of", nsims, "simulated studies:\n"); summary(res)


Results of 10000 simulated studies:
      GMR               CV          post hoc power
 Min.   :0.8454   Min.   :0.09836   Min.   :0.2635
 1st Qu.:0.9326   1st Qu.:0.17808   1st Qu.:0.8374
 Median :0.9505   Median :0.19758   Median :0.9189
 Mean   :0.9508   Mean   :0.19850   Mean   :0.8887
 3rd Qu.:0.9679   3rd Qu.:0.21801   3rd Qu.:0.9683
 Max.   :1.0493   Max.   :0.31336   Max.   :1.0000


Explore also boxplots and a histograms:

col <- "bisque"
boxplot(res, col=col, boxwex=0.65, las=1)
grid()
ylab <- "relative frequency density"
op <- par(no.readonly=TRUE)
np <- c(4.5, 4.5, 1, 0.3) + 0.1
par(mar=np)
split.screen(c(1, 3))
screen(1)
truehist(res[, 1], col=col, lty=0, xlab="GMR", las=1, bty="o", ylab=ylab, log="x")
screen(2)
truehist(res[, 2], col=col, lty=0, xlab="CV", las=1, bty="o", ylab=ylab)
screen(3)
truehist(res[, 3], col=col, lty=0, xlab="post hoc power", las=1, bty="o", ylab=ylab)
abline(v=plan[["Achieved power"]], col="blue")
close.screen(all=TRUE)
par(op)

Especially the histogram is telling.

Even if the study was planned for 90% power (like in the example) I strongly doubt that you will always get a post hoc power of 95–99%:

cat("Simulated studies with post hoc power [0.95, 0.99]:", sprintf("%.2f%%",
    100*length(res[, 3][res[, 3] >= 0.95 & res[, 3] <=0.99])/nsims), "\n")

Simulated studies with post hoc power [0.95, 0.99]: 25.28%


If the study was planned for 80% power it will be even less likely:

Simulated studies with post hoc power [0.95, 0.99]: 12.63%


As ElMaestro suggested: Can you give us one example? We need the CV, the GMR, the number of eligible subjects, and your “power”. If the study was imbalanced, please give the number of subjects in each sequence.

Cheers,
Helmut Schütz
[image]

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

Complete thread:

Activity
 Mix view
Bioequivalence and Bioavailability Forum |  Admin contact
18,881 posts in 4,026 threads, 1,271 registered users;
online 27 (1 registered, 26 guests [including 20 identified bots]).

Being ignorant is not so much a shame,
as being unwilling to learn.    Benjamin Franklin

The BIOEQUIVALENCE / BIOAVAILABILITY FORUM is hosted by
BEBAC Ing. Helmut Schütz
HTML5 RSS Feed