sampleN.TOST: Sample size based on power of TOST

Description Usage Arguments Details Value Warning Note Author(s) References See Also Examples

View source: R/SampleSize.R

Description

Calculates the necessary sample size to have at least a given power.

Usage

1
2
3
sampleN.TOST(alpha = 0.05, targetpower = 0.8, logscale = TRUE, 
             theta0, theta1, theta2, CV, design = "2x2", method="exact", 
             robust=FALSE, print = TRUE, details = FALSE, imax=100)

Arguments

alpha

Significance level (one-sided). Commonly set to 0.05.

targetpower

Power to achieve at least. Must be >0 and <1.
Typical values are 0.8 or 0.9.

logscale

Should the data used on log-transformed (TRUE) or on original scale (FALSE)? Defaults to TRUE.

theta0

‘True’ or assumed T/R ratio or difference.
In case of logscale=TRUE it must be given as ratio T/R.
If logscale=FALSE, the difference in means. In this case, the difference may be expressed in two ways: relative to the same (underlying) reference mean, i.e. as (T-R)/R = T/R - 1; or as difference in means T-R. Note that in the former case the units of CV, theta1 and theta2 need also be given relative to the reference mean (specified as ratio).
Defaults to 0.95 if logscale=TRUE or to 0.05 if logscale=FALSE

theta1

Lower (bio-)equivalence limit.
In case of logscale=TRUE it is given as ratio.
If logscale=FALSE, the limit may be expressed in two ways: difference of means relative to the same (underlying) reference mean or in units of the difference of means. Note that in the former case the units of CV, theta0 and theta2 need also be given relative to the reference mean (specified as ratio).
Defaults to 0.8 if logscale=TRUE or to -0.2 if logscale=FALSE.

theta2

Upper (bio-)equivalence limit.
In case of logscale=TRUE it is given as ratio. If logscale=FALSE, the limit may be expressed in two ways: difference of means relative to the same (underlying) reference mean or in units of the difference of means. Note that in the former case the units of CV, theta0 and theta1 need also be given relative to the reference mean (specified as ratio).
If not given, theta2 will be calculated as 1/theta1 if logscale=TRUE or as -theta1 if logscale=FALSE.

CV

In case of logscale=TRUE the (geometric) coefficient of variation given as ratio.
If logscale=FALSE the argument refers to (residual) standard deviation of the response. In this case, standard deviation may be expressed two ways: relative to a reference mean (specified as ratio sigma/muR), i.e. again as a coefficient of variation; or untransformed, i.e. as standard deviation of the response. Note that in the former case the units of theta0, theta1 and theta2 need also be given relative to the reference mean (specified as ratio).

In case of cross-over studies this is the within-subject CV, in case of a parallel-group design the CV of the total variability.

design

Character string describing the study design.
See known.designs() for designs covered in this package.

method

Method for calculation of the power.
Defaults to "exact" in which case the calculation is done based on formulas with Owen’s Q. The calculation via Owen’s Q can also be choosen with method="owenq".
Another exact method via direct use of the bivariate non-central t-distribution may be chosen with method="mvt". This may have somewhat lower precision compared to Owen’s Q and has a much longer run-time.
Approximate calculations can be choosen via method="noncentral" or method="nct" for the approximation using the non-central t-distribution. With method="central" or method="shifted" the relatively crude approximation via the ‘shifted’ central t-distribution is chosen.
The strings for method may be abbreviated.

robust

Defaults to FALSE. With that value the usual degrees of freedom will be used.
Set to TRUE will use the degrees of freedom according to the ‘robust’ evaluation (aka Senn’s basic estimator). These df are calculated as n-seq.
See known.designs()$df2 for designs covered in this package.
Has only effect for higher-order crossover designs.

print

If TRUE (default) the function prints its results. If FALSE only the data.frame with the results will be returned.

details

If TRUE the design characteristics and the steps during sample size calculations will be shown. Defaults to FALSE.

imax

Maximum number of steps in sample size search.
Defaults to 100. Adaption only in rare cases needed.

Details

The sample size is calculated via iterative evaluation of power of the TOST procedure.
Start value for the sample size search is taken from a large sample approximation according to Zhang, modified.
The sample size is bound to 4 as minimum.

The estimated sample size gives always the total number of subjects (not subject/sequence in crossovers or subjects/group in parallel designs – like in some other software packages).

Value

A data.frame with the input and results will be returned.
The Sample size column contains the total sample size.

Warning

The function does not vectorize properly.
If you need sample sizes with varying CVs, use f.i. for-loops or the apply-family.

Note

Of course it is highly recommended to use the default method="exact". :-)
There is no reason besides testing and for comparative purposes to use an approximation if the exact method is available at no extra costs.

Author(s)

D. Labes

References

Phillips KF. Power of the Two One-Sided Tests Procedure in Bioequivalence. J Pharmacokin Biopharm. 1990;18:137–44. doi: 10.1007/BF01063556

Diletti D, Hauschke D, Steinijans VW. Sample Size Determination for Bioequivalence Assessment by Means of Confidence Intervals. Int J Clin Pharmacol Ther Toxicol. 1991;29(1):1–8.

Diletti D, Hauschke D, Steinijans VW. Sample size determination: Extended tables for the multiplicative model and bioequivalence ranges of 0.9 to 1.11 and 0.7 to 1.43. Int J Clin Pharmacol Ther Toxicol. 1992;30(Suppl 1):S59–62.

Zhang P. A Simple Formula for Sample Size Calculation in Equivalence Studies. J Biopharm Stat. 2003;13(3):529–538. doi: 10.1081/BIP-120022772

See Also

power.TOST, known.designs

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# Exact calculation for a classical 2x2 cross-over (TR/RT),
# BE limits 80 ... 125%, assumed true BE ratio 0.95, intra-subject CV=30%,
# using all the default values
# should give n=40 power=0.815845
sampleN.TOST(CV = 0.3)

# Exact calculation for a parallel group design
# evaluation on the original (untransformed) scale
# BE limits 80 ... 120% = -20% ... +20% of reference,
# assumed true BE ratio 0.95% = -5% to reference mean,
# total CV=20%
# should give n=48 (total) power=0.815435
sampleN.TOST(logscale = FALSE, theta1 = -0.2, theta0 = -0.05,
             CV = 0.2, design = "parallel")

# A rather strange setting of theta0! Have a look at n.
# It would be better this is not the sample size but the running total
# of my bank account. But the first million is the hardest. ;-)
sampleN.TOST(CV = 0.2, theta0 = 0.8005, theta1 = 0.8)

Example output

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

alpha = 0.05, target power = 0.8
BE margins = 0.8 ... 1.25 
True ratio = 0.95,  CV = 0.3

Sample size (total)
 n     power
40   0.815845 


+++++++++++ Equivalence test - TOST +++++++++++
            Sample size estimation
-----------------------------------------------
Study design:  2 parallel groups 
untransformed data (additive model)

alpha = 0.05, target power = 0.8
BE margins = -0.2 ... 0.2 
True diff. = -0.05,  CV = 0.2

Sample size (total)
 n     power
48   0.815435 


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

alpha = 0.05, target power = 0.8
BE margins = 0.8 ... 1.25 
True ratio = 0.8005,  CV = 0.2

Sample size (total)
 n     power
1242296   0.800000 

PowerTOST documentation built on Aug. 5, 2020, 5:07 p.m.