Now what? w & w* examples [Two-Stage / GS Designs]
❝ I hope there will be applications and more investigations in the future regarding this.
So do I – once we solved the mystery of finding a “suitable” n1 and specifying “appropriate” weights.
❝ ❝ Some regulatory statisticians told me to prefer a first stage as estimated for a fixed-sample design (i.e., the second stage is solely a ‘safety net’).
❝
❝ Sounds interesting. At first this sounds nice, but I am a bit puzzled about it. "Safety net" sounds like we have a rather good understanding about the CV …
Not necessarily good but a “guesstimate”.
❝ … but in case we observe some unforeseen value we have the possibility to add some extra subjects.
❝ However, in such a case we could just go with a fixed design and adapt the Power.
I’m not sure what you mean here. In a fixed sample design I would rather work with the upper CL of the CV or – if not available – assume a reasonably higher CV than my original guess rather than fiddling around with power.
❝ In a TSD setting we typically have no good understanding about the CV... Do I miss something here?
(1) Yep and (2) no.
❝ Based on what assumptions would we select n1 (= fixed design sample size)? We typically have some range of possible values and we don't know where we will be.
I was just quoting a regulatory statistician (don’t want to out him). Others didn’t contradict him. So likely he wasn’t alone with his point of view.
❝ For n1 I would then rather use the lower end of this range. Comments?
Very interesting. I expected that the sample size penalty (n2) will be higher if we use a low n1. Of course it all depends on which CV we observe in stage 1.
library(PowerTOST)
library(Power2Stage)
CVguess <- 0.2 # from a fixed design study with n=18
CL <- CVCL(CV=CVguess, df=18-2, side="2-sided")
# Sample sizes of fixed desiogn based on guesstimate CV and its CL
n1.fix <- sampleN.TOST(CV=CVguess, print=FALSE)[["Sample size"]]
n1.75 <- floor(0.75*n1.fix) + as.integer(0.75*n1.fix) %%2
n1.lo <- sampleN.TOST(CV=CL[["lower CL"]], print=FALSE)[["Sample size"]]
n1.hi <- sampleN.TOST(CV=CL[["upper CL"]], print=FALSE)[["Sample size"]]
# In all variants use the guesstimate
x <- power.tsd.in(CV=CVguess, n1=n1.fix)
ASN.fix <- x$nmean
med.fix <- x$nperc[["50%"]]
p.fix <- as.numeric(x[25:24])
pct.fix <- x$pct_s2
x <- power.tsd.in(CV=CVguess, n1=n1.75)
ASN.75 <- x$nmean
med.75 <- x$nperc[["50%"]]
p.75 <- as.numeric(x[25:24])
pct.75 <- x$pct_s2
x <- power.tsd.in(CV=CVguess, n1=n1.lo)
ASN.lo <- x$nmean
med.lo <- x$nperc[["50%"]]
p.lo <- as.numeric(x[25:24])
pct.lo <- x$pct_s2
x <- power.tsd.in(CV=CVguess, n1=n1.hi)
ASN.hi <- x$nmean
med.hi <- x$nperc[["50%"]]
p.hi <- as.numeric(x[25:24])
pct.hi <- x$pct_s2
result <- data.frame(CV=c(rep(CVguess, 2), CL),
n1=c(n1.fix, n1.75, n1.lo, n1.hi),
CV.obs=rep(CVguess, 4),
ASN=c(ASN.fix, ASN.75, ASN.lo, ASN.hi),
median=c(med.fix, med.75, med.lo, med.hi),
pwr.stg1=c(p.fix[1], p.75[1], p.lo[1], p.hi[1]),
pwr=c(p.fix[2], p.75[2], p.lo[2], p.hi[2]),
pct.2=c(pct.fix, pct.75, pct.lo, pct.hi))
row.names(result) <- c("like fixed", "75% of fixed", "lower CL", "upper CL")
print(signif(result, 4))
CV n1 CV.obs ASN median pwr.stg1 pwr pct.2
like fixed 0.2000 20 0.2 21.59 20 0.7325 0.8514 18.840
75% of fixed 0.2000 16 0.2 19.90 16 0.5946 0.8371 33.780
lower CL 0.1483 12 0.2 20.66 16 0.3834 0.8261 55.630
upper CL 0.3084 42 0.2 42.00 42 0.9740 0.9740 0.006
The pessimistic approach would be crazy.
❝ More comments on the weights:
Have to chew on that…
❝ Brings us back to: We should plan with a realistic/slightly optimistic scenario.
Seems so.
Dif-tor heh smusma 🖖🏼 Довге життя Україна!
Helmut Schütz
The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes
Complete thread:
- Finally: Exact TSD methods for 2×2 crossover designs Helmut 2018-04-21 17:17 [Two-Stage / GS Designs]
- Exact TSD methods: Example Helmut 2018-04-21 20:33
- Finally: Exact TSD methods for 2×2 crossover designs ElMaestro 2018-04-21 20:49
- Flow chart (without details) Helmut 2018-04-21 21:41
- naive questions regarding new functions in Power2Stage mittyri 2018-04-28 15:54
- Some answers Helmut 2018-04-28 17:29
- Some more "answers" d_labes 2018-04-29 21:11
- clarification regarding user Power2Stage guides mittyri 2018-04-30 13:41
- naive questions regarding new functions in Power2Stage mittyri 2018-04-28 15:54
- Flow chart (without details) Helmut 2018-04-21 21:41
- Technicality: Weigths for the inverse normal approach d_labes 2018-04-25 14:19
- Selection of w and w* Helmut 2018-04-26 09:51
- Selection of w and w* d_labes 2018-04-26 20:02
- Now what? w & w* examples d_labes 2018-05-09 13:53
- Now what? w & w* examples Ben 2018-06-10 20:12
- Now what? w & w* examplesHelmut 2018-06-11 13:57
- Now what? w & w* examples Ben 2018-06-12 19:14
- a bug in interim.tsd.in()? mittyri 2018-06-11 23:27
- a bug in interim.tsd.in()? Ben 2018-06-12 19:32
- Nonbinding futility rule d_labes 2018-06-13 16:59
- Bad weather? Helmut 2018-06-13 19:23
- NLYW? d_labes 2018-06-14 10:18
- Nonbinding futility rule Ben 2018-06-13 20:26
- Nonbinding futility rule d_labes 2018-06-14 10:47
- Nonbinding futility rule Ben 2018-06-15 17:58
- Binding / Nonbinding futility rule - alpha control d_labes 2018-06-16 19:42
- Binding / Nonbinding futility rule - alpha control Ben 2019-03-30 09:52
- Binding / Nonbinding futility rule - alpha control d_labes 2018-06-16 19:42
- Nonbinding futility rule Ben 2018-06-15 17:58
- Nonbinding futility rule d_labes 2018-06-14 10:47
- Bad weather? Helmut 2018-06-13 19:23
- Nonbinding futility rule d_labes 2018-06-13 16:59
- a bug in interim.tsd.in()? Ben 2018-06-12 19:32
- Now what? w & w* examplesHelmut 2018-06-11 13:57
- Now what? w & w* examples Ben 2018-06-10 20:12
- Selection of w and w* Helmut 2018-04-26 09:51