Sneak preview (BE module)

Hi Linda, I took to opportunity fo have a look into the project about unequal variances you attached to another post. Some discussion going on over there. 6.4.0.334 (Core Version 29May2013) Westlake is history. Great! Has anybody ever used an 80% CI? Don’t think so. Can you explain what the two different powers mean – and how they are calculated? In your project (Xover) I see Power_TOST = 0.719661 (significance level = 0.0500) and Power of ANOVA (80/20 Rule) for Confidence Level 90.00 Power at 20% = 0.898884 What is the 80/20 Rule? The one FDA abandoned in 1987 (80% power to show a 20% difference) in favor of TOST? Don’t support a zombie in getting out from his grave. We have Intrasubject CV 0.180941 and Ratio(%Ref) 104.6588. For the post-hoc power I get in R: require(PowerTOST) power.TOST(CV=0.180941, theta0=1.046588, n=20, method=“shifted”) 0.9061784 power.TOST(CV=0.180941, theta0=1.046588, n=20, method=“noncentral”) 0.9117793 power.TOST(CV=0.180941, theta0=1.046588, n=20, method=“exact”) 0.9117793 Not sure whether you use the noncentral-t or the shifted-t. AFAIK the noncentral-t is available internally (though not accessible in a custom transformation). However, I can’t reproduce any of PHX’ results (0.719661, 0.898884). Maybe a ratio of unity is used? power.TOST(CV=0.180941, theta0=1, n=20, method=“shifted”) 0.9586781 power.TOST(CV=0.180941, theta0=1, n=20, method=“noncentral”) 0.9670758 power.TOST(CV=0.180941, theta0=1, n=20, method=“exact”) 0.9670758 Nope. Confused. :wink: Retrospective (aka post-hoc) power is of no value in BE until somebody opts for a two-stage design, where it is needed in the intermediate step (only!). If Pharsight decides to offer customers such an option, then it should be possible to enter a ratio. More and more papers are published on the subject. In the majority of them a fixed ratio (0.95 or 0.90) is used. There is just one – little bit bizarre – paper published (Karalis & Macheras, 2013) using the observed ratio in stage 1. So IMHO the observed ratio should be used as the default (for the last power-freaks in Novosibirsk and followers of obscure Greek methods) plus an option to enter any other value.

Hi Helmut, The 80/20 Rule is the one that the FDA was using around 1987. We are beginning to publicize that this type of power will be removed in a future version (probably the release after 1.4), along with the Anderson-Hauck test, to see if anyone has any concerns about removing these. Right now, Power_TOST is computed with a shifted central t as a convenience, but I don’t expect that to be final for the released version. Remember that you have a pre-release, because of your work on RSABE and other areas, but most people don’t get to see this version. For now, with this shifted central t, I match R’s ‘power.TOST’ like this: require(PowerTOST) power.TOST(alpha=0.05, logscale=TRUE, theta1=0.8, theta2=1.25, theta0=1.046588, CV=0.2339278, n=20, design=“2x2”, method=“central”) > 0.7196604 I completely agree with you about needing a power tool based on ratio, CV, n, etc., and not just based on observations, but I think getting Power_TOST coded as part of bioequivalence output is a first step toward eventually adding a separate power calculator. I read the discussion about unequal variances on BEBAC, but I have a few meetings this morning – I’ll need to get back to you later. As always, thanks for your comments! Best regards, Linda

Hi Linda! [quote]The 80/20 Rule is the one that the FDA was using around 1987. We are beginning to publicize that this type of power will be removed in a future version (probably the release after 1.4), along with the Anderson-Hauck test, to see if anyone has any concerns about removing these.[/quote] Yep. [quote]Right now, Power_TOST is computed with a shifted central t as a convenience, but I don’t expect that to be final for the released version.[/quote] The shifted t is an approximation of an approximation, but better than nothing. … In the common area of power >70% and ratios of not more than ±10% away from 1 up to 5% wrong. :wink: In a two-stage design (power with shifted t is always lower than noncentral) it would mean applying a penality (Method C: alpha 0.0294 instead of 0.05 if power <80%) in some cases. [quote]Remember that you have a pre-release, because of your work on RSABE and other areas, but most people don’t get to see this version.[/quote] I don’t have it as well – I was just quoting to the project you posted (of course I got an warning in opening it). [quote]For now, with this shifted central t, I match R’s ‘power.TOST’ like this: require(PowerTOST) power.TOST(alpha=0.05, logscale=TRUE, theta1=0.8, theta2=1.25, theta0=1.046588, CV=0.2339278, n=20, design=“2x2”, method=“central”) > 0.7196604[/quote] OK, but where does your CV come from? You need the intrasubject CV, therefore, power.TOST(CV=0.180941, theta0=1.046588, n=20, method=“central”) [1] 0.9061784 In the Core Output I read: Final variance parameter estimates: Var(SequenceSubject)_11 0.0979228 Var(PeriodFormulationSubject)_21 0.0322151 Var(PeriodFormulation*Subject)_22 0.0743398 Intersubject CV 0.320745 Intrasubject CV 0.180941 In the balanced case the residual variance is the arithmetic mean of 0.0322151 and 0.0743398 (0.05327745). CVintra = sqrt(exp(Var-res)-1) = 0.2339278. Now I see! That’s the value PHX uses in the power estimation. Only the value in the core output is wrong – and this is the one I used… [quote]I completely agree with you about needing a power tool based on ratio, CV, n, etc., and not just based on observations, but I think getting Power_TOST coded as part of bioequivalence output is a first step toward eventually adding a separate power calculator.[/quote] Maybe. What do we have so far? [ol][li]The output in the line “Power_TOST” is correct – based on the pooled intra-subject variances. Only CVintra in the output is wrong (probably only due to this “unconventional” coding of the model).[/li][li]Since the first release of WinNonlin I have no idea how the 80/20 Power (here 0.898884) is calculated. Even with power.TOST(theta0=1, CV=0.2339278, n=20, method=“shifted”) I got only 0.7976217[/li][/ol] [quote]I read the discussion about unequal variances on BEBAC, but I have a few meetings this morning – I’ll need to get back to you later.[/quote] No problem. I deleted the last subject from the data-set in order to check whether pooling of variances works in an imbalanced case (formula at the footnote of this post: Bioequivalence and Bioavailability Forum • Parallel design [unequal variances] in Phoenix/WinNonlin) – only to find out that PHX doesn’t give a result of Power_TOST at the end of TOST-output. :wink:

You’re right about the CV. I had used that code to test Data 2x2 against R’s power.TOST a while ago, using just the default model in PHX, not the model with a Repeated term. The actual Power_TOST computation in PHX does not depend on CV – it is computed from values from the two one-sided t-tests (t-critical, df, t1, t2), so that always makes it a bit challenging to compare with the R package or SAS, which expect CV as input. About computing Power_80_20, I thought someone on the BEBAC forum had figured it out. On page 142 of Chow/Liu (either the second or third edition), they give a useful approximation. The following R-code will compute it for the Data 2x2 example: ##### R code to compute Power (80/20 rule) for Data 2x2.csv # with default model and settings in Bioeq (which includes ln-transform), # AUClast is Dependent Variable, Capsule is Reference Formulation sed = 0.072991394963926 # SE of difference (from linmix for Data 2x2) df = 18.0 # DF of difference, correct, Chow-Liu, pg 79, n1 = n2 = 10, DF = n1 + n2 - 2 fraction = 0.2 # Percent of Reference to Detect in the UI was 20% alpha = 0.05 # Confidence Level in the UI was 90%, 2*alpha = (100 - Conf_Level) / 100 tcrit = qt( 1.0 - alpha, df); delta = -log(1.0 - fraction); # = -ln(0.8) = ln(1.25) t1 = tcrit - (delta/sed); # Chow-Liu, p.142 to 143, compute power to detect a difference of 20% of the reference p1 = pt(t1, df); t2 = -1.0 * (tcrit + (delta / sed)); #negligible piece that needs to be subtracted for the type II error, p2 = pt(t2, df); #Chow-Liu don’t even bother with this piece power = 1.0 - (p1 - p2);

Hi Linda! [quote]About computing Power_80_20, I thought someone on the BEBAC forum had figured it out.[/quote]How could I forget this one? Took us days unveiling WinNonlin’s secrets. But as Detlew said: [center]“Approximate correct for the problem stated but answers a question no one has asked.”[/center]