power.TOST (CV & n; everything else optional—with defaults) [🇷 for BE/BA]

posted by Helmut Homepage – Vienna, Austria, 2013-07-29 23:30 (4344 d 14:44 ago) – Posting: # 11118
Views: 5,911

Hi Ken!

❝ We would like to estimate the power of a BE study that has been completed.


Oh, is your authority still requiring this? :no:

❝ Which is the right way to key in data ? The first one or the second one ?


No. 1

Since you didn’t type in the lower (theta1) and upper (theta2) acceptance limits for bioequivalence, the defaults of 0.80 and 1/0.80=1.25 are used. But if you want you can state them. Try:
power.TOST(CV=0.29, n=25, theta0=0.95, theta1=0.80, theta2=1.25)
[1] 0.618512


You can play the game the other way ’round: How many subjects would we need for 61.85% power if CV is 29%?
sampleN.TOST(CV=0.29, targetpower=0.6185)

+++++++++++ Equivalence test - TOST +++++++++++
            Sample size estimation
-----------------------------------------------
Study design:  2x2 crossover
log-transformed data (multiplicative model)

alpha = 0.05, target power = 0.6185
BE margins        = 0.8 ... 1.25
Null (true) ratio = 0.95,  CV = 0.29

Sample size (total)
 n     power
26   0.640848


26 – not 25 – because in study planning you get always even numbers in a 2×2 design. Note that I did not use theta0, theta1, and theta2 because 0.95, 0.80, and 1.25 are the defaults.

❝ Do we have to key in the value of lower and upper BE limit obtained from the study ? Why after putting in the lower and upper BE limit, the power is only about 8% versus 62%.


No. That would mean asking for the chance to be bioequivalent (with CV 29%, ratio 95%) within limits of 83–109%. This range is much narrower than 80–125% – therefore, you get a much lower power. I guess your values are the confidence limits obtained in the study, right?

BTW, BE-limits are based on the maximum acceptable difference, say 20%. In log-scale they are symmetrical around zero [ln(1–0.20), ln(1/(1+0.20)] = [-0.2231, +0.2231]. After back-transformation they are asymetrical around 100% [ℯ-0.2231, ℯ+0.2231] = 80–125%. Hey, that’s upper = 1/lower. ;-) Therefore, in Power.TOST you could only give theta1 or theta2; the reciprocal would be calculated automatically. Try:
power.TOST(CV=0.29, n=25, theta0=0.95, theta1=0.80)
power.TOST(CV=0.29, n=25, theta0=0.95, theta2=1.25)


For details:
require(PowerTOST)
help(power.TOST)



@Detlew: Maybe PowerTOST should throw a warning if the input’s theta2 1/theta1 (to the precision of the input)? Or is this over the top?

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,424 posts in 4,927 threads, 1,673 registered users;
44 visitors (0 registered, 44 guests [including 10 identified bots]).
Forum time: 14:15 CEST (Europe/Vienna)

Medical researches can be divided into two sorts:
those who think that meta is better and those
who believe that pooling is fooling.    Stephen Senn

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