In the SimTOST
R
package, which is specifically designed for sample size estimation for
bioequivalence studies, hypothesis testing is based on the Two One-Sided
Tests (TOST) procedure. (Sozu et al. 2015) In TOST, the
equivalence test is framed as a comparison between the the null
hypothesis of ‘new product is worse by a clinically relevant quantity’
and the alternative hypothesis of ‘difference between products is too
small to be clinically relevant’. This vignette focuses on a parallel
design, with 2 arms/treatments and 5 primary endpoints.
In the following two examples, we demonstrate the use of SimTOST for parallel trial designs with data assumed to follow a normal distribution on the log scale. We start by loading the package.
Here, we consider a bio-equivalence trial with 2 treatment arms and m = 5 endpoints. The sample size is calculated to ensure that the test and reference products are equivalent with respect to all 5 endpoints. The true ratio between the test and reference products is assumed to be 1.05. It is assumed that the standard deviation of the log-transformed response variable is σ = 0.3, and that all tests are independent (ρ = 0). The equivalence limits are set at 0.80 and 1.25. The significance level is 0.05. The sample size is determined at a power of 0.8.
This example is adapted from Mielke et al. (2018), who employed a difference-of-means test on the log scale. The sample size calculation can be conducted using two approaches, both of which are illustrated below.
In the first approach, we calculate the required sample size for 80% power using the sampleSize_Mielke() function. This method directly follows the approach described in Mielke et al. (2018), assuming a difference-of-means test on the log-transformed scale with specified parameters.
ssMielke <- sampleSize_Mielke(power = 0.8, Nmax = 1000, m = 5, k = 5, rho = 0,
sigma = 0.3, true.diff = log(1.05),
equi.tol = log(1.25), design = "parallel",
alpha = 0.05, adjust = "no", seed = 1234,
nsim = 10000)
ssMielke
#> power.a SS
#> 0.8196 68.0000
For 80% power, 68 subjects per sequence (136 in total) would be required.
Alternatively, the sample size calculation can be performed using the
sampleSize() function. This
method assumes that effect sizes are normally distributed on the log
scale and uses a difference-of-means test (ctype = "DOM"
)
with user-specified values for mu_list
and
sigma_list
. This method allows for greater flexibility than
Approach 1 in specifying parameter distributions.
mu_r <- setNames(rep(log(1.00), 5), paste0("y", 1:5))
mu_t <- setNames(rep(log(1.05), 5), paste0("y", 1:5))
sigma <- setNames(rep(0.3, 5), paste0("y", 1:5))
lequi_lower <- setNames(rep(log(0.8), 5), paste0("y", 1:5))
lequi_upper <- setNames(rep(log(1.25), 5), paste0("y", 1:5))
ss <- sampleSize(power = 0.8, alpha = 0.05,
mu_list = list("R" = mu_r, "T" = mu_t),
sigma_list = list("R" = sigma, "T" = sigma),
list_comparator = list("T_vs_R" = c("R", "T")),
list_lequi.tol = list("T_vs_R" = lequi_lower),
list_uequi.tol = list("T_vs_R" = lequi_upper),
dtype = "parallel", ctype = "DOM", lognorm = FALSE,
adjust = "no", ncores = 1, nsim = 10000, seed = 1234)
ss
#> Sample Size Calculation Results
#> -------------------------------------------------------------
#> Study Design: parallel trial targeting 80% power with a 5% type-I error.
#>
#> Comparisons:
#> R vs. T
#> - Endpoints Tested: y1, y2, y3, y4, y5
#> (multiple co-primary endpoints, m = 5 )
#> -------------------------------------------------------------
#> Parameter Value
#> Total Sample Size 136
#> Achieved Power 80.1
#> Power Confidence Interval 79.3 - 80.9
#> -------------------------------------------------------------
For 80% power, a total of 136 subjects would be required.
Consider an alternative scenario in which the standard deviation of
the log-transformed response variable is unknown, but the standard
deviation on the original scale is known (σ = 1). In such cases, the sampleSize() function can still
accommodate adjustments to handle these uncertainties by transforming
parameters accordingly. We now provide all data on the raw scale,
including the equivalence bounds, and set ctype = ROM
and
lognorm = TRUE
.