Estimates the necessary sample size to obtain at least a target (desired) power.
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)
A data frame with the input and results will be returned.
The Sample size
column contains the total sample size.
Significance level (one-sided). Commonly set to 0.05.
Power to achieve at least. Must be >0 and <1.
Typical values are 0.8 or 0.9.
Should the data used on log-transformed (TRUE
) or on original
scale (FALSE
)? Defaults to TRUE
.
‘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
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
.
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
.
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.
Character string describing the study design.
See known.designs()
for designs covered in this package.
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.
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.
If TRUE
(default) the function prints its results. If FALSE
only the data frame with the results will be returned.
If TRUE
the design characteristics and the steps during
sample size calculations will be shown. Defaults to FALSE
.
Maximum number of steps in sample size search.
Defaults to 100. Adaption only in rare cases needed.
The function does not vectorize properly.
If you need sample sizes with varying CVs, use f.i. for
-loops or the apply
-family.
D. Labes
The sample size is estimated 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).
Phillips KF. Power of the Two One-Sided Tests Procedure in Bioequivalence. J Pharmacokin Biopharm. 1990;18:137--44. tools:::Rd_expr_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--38. tools:::Rd_expr_doi("10.1081/BIP-120022772")
power.TOST, known.designs
# 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)
Run the code above in your browser using DataLab