This R Markdown document illustrates the sample size calculation for a fixed follow-up design, in which the treatment allocation is 3:1 and the hazard ratio is 0.3. This is a case for which neither the Schoenfeld method nor the Lakatos method provides an accurate sample size estimate, and simulation tools are needed to obtain a more accurate result. First we load the lrstat package:
Consider a fixed design with the hazard rate of the control group being 0.95 per year, a hazard ratio of the experimental group to the control group being 0.3, a randomization ratio of 3:1, an enrollment rate of 5 patients per month, a 2-year drop-out rate of 10%, and a planned fixed follow-up of 26 weeks for each patient. The target power is 90%, and we are interested in the number of patients to enroll to achieve the target 90% power.
Using the Schoenfeld formula, we have
lrsamplesize(beta = 0.1, kMax = 1, criticalValues = 1.96,
allocationRatioPlanned = 3, accrualIntensity = 5,
lambda1 = 0.3*0.95/12, lambda2 = 0.95/12,
gamma1 = -log(1-0.1)/24, gamma2 = -log(1-0.1)/24,
accrualDuration = NA, followupTime = 26/4,
fixedFollowup = TRUE,
typeOfComputation = "schoenfeld")$resultsUnderH1
##
## Fixed design
## Overall power: 0.902, overall significance level (1-sided): 0.025
## Number of events: 39
## Number of dropouts: 4.8
## Number of subjects: 192
## Study duration: 42.6
## Accrual duration: 38.4, follow-up duration: 6.5, fixed follow-up: TRUE
##
##
## Efficacy boundary (Z-scale) 1.960
## Efficacy boundary (HR-scale) 0.484
## Efficacy boundary (p-scale) 0.0250
## Information 7.31
## HR 0.300
This calls for 39 events with 192 patients enrolled over 38.4 months. Denote this design as design 1.
On the other hand, using the Lakatos method, we have
lrsamplesize(beta = 0.1, kMax = 1, criticalValues = 1.96,
allocationRatioPlanned = 3, accrualIntensity = 5,
lambda1 = 0.3*0.95/12, lambda2 = 0.95/12,
gamma1 = -log(1-0.1)/24, gamma2 = -log(1-0.1)/24,
accrualDuration = NA, followupTime = 26/4,
fixedFollowup = TRUE,
typeOfComputation = "direct")$resultsUnderH1
##
## Fixed design
## Overall power: 0.901, overall significance level (1-sided): 0.025
## Number of events: 26
## Number of dropouts: 3.2
## Number of subjects: 128
## Study duration: 30.2
## Accrual duration: 25.6, follow-up duration: 6.5, fixed follow-up: TRUE
##
##
## Efficacy boundary (Z-scale) 1.960
## Efficacy boundary (HR-scale) 0.463
## Efficacy boundary (p-scale) 0.0250
## Information 4.46
## HR 0.300
It implies that we only need 26 events with 128 subjects enrolled over 25.6 months, a dramatic difference from the Schoenfeld formula. Denote this design as design 2.
To check the accuracy of either solution, we run simulations using the lrsim function.
lrsim(kMax = 1, criticalValues = 1.96,
allocation1 = 3, allocation2 = 1,
accrualIntensity = 5,
lambda1 = 0.3*0.95/12, lambda2 = 0.95/12,
gamma1 = -log(1-0.1)/24, gamma2 = -log(1-0.1)/24,
accrualDuration = 38.4, followupTime = 6.5,
fixedFollowup = TRUE,
plannedEvents = 39,
maxNumberOfIterations = 1000, seed = 12345)
##
## Fixed design
## Overall power: 0.947
## Expected # events: 37.2
## Expected # dropouts: 4.5
## Expected # subjects: 187.4
## Expected study duration: 39.5
## Accrual duration: 38.4, fixed follow-up: TRUE
##
lrsim(kMax = 1, criticalValues = 1.96,
allocation1 = 3, allocation2 = 1,
accrualIntensity = 5,
lambda1 = 0.3*0.95/12, lambda2 = 0.95/12,
gamma1 = -log(1-0.1)/24, gamma2 = -log(1-0.1)/24,
accrualDuration = 25.6, followupTime = 6.5,
fixedFollowup = TRUE,
plannedEvents = 26,
maxNumberOfIterations = 1000, seed = 12345)
##
## Fixed design
## Overall power: 0.842
## Expected # events: 24.5
## Expected # dropouts: 2.9
## Expected # subjects: 124.9
## Expected study duration: 27.2
## Accrual duration: 25.6, fixed follow-up: TRUE
##
The simulated power is about 95% for design 1, and 84% for design 2. Neither is close to the target 90% power.
We use the following formula to adjust the sample size to attain the target power, \[ D = D_0 \left( \frac{\Phi^{-1}(1-\alpha) + \Phi^{-1}(1-\beta)} {\Phi^{-1}(1-\alpha) + \Phi^{-1}(1-\beta_0)} \right)^2 \] where \(D_0\) and \(\beta_0\) are the initial event number and the correponding type II error, and \(D\) and \(\beta\) are the required event number and the target type II error, respectively. For \(\alpha=0.025\) and \(\beta=0.1\), plugging in \((D_0=39, \beta_0=0.053)\) and \((D_0=26, \beta_0=0.158)\) would yield \(D=32\) and \(D=31\), respectively. For \(D=32\), we need about 156 patients for an enrollment period of 31.2 months:
getDurationFromNevents(
nevents = 32, allocationRatioPlanned = 3,
accrualIntensity = 5,
lambda1 = 0.3*0.95/12, lambda2 = 0.95/12,
gamma1 = -log(1-0.1)/24, gamma2 = -log(1-0.1)/24,
followupTime = 6.5, fixedFollowup = TRUE)[1,]
## nevents fixedFollowup followupTime accrualDuration subjects studyDuration
## 1 32 TRUE 6.5 31.20859 156.0429 37.70859
Simulation results confirmed the accuracy of this sample size estimate.
lrsim(kMax = 1, criticalValues = 1.96,
allocation1 = 3, allocation2 = 1,
accrualIntensity = 5,
lambda1 = 0.3*0.95/12, lambda2 = 0.95/12,
gamma1 = -log(1-0.1)/24, gamma2 = -log(1-0.1)/24,
accrualDuration = 31.2, followupTime = 6.5,
fixedFollowup = TRUE,
plannedEvents = 32,
maxNumberOfIterations = 1000, seed = 12345)
##
## Fixed design
## Overall power: 0.904
## Expected # events: 30.2
## Expected # dropouts: 3.7
## Expected # subjects: 152.5
## Expected study duration: 32.7
## Accrual duration: 31.2, fixed follow-up: TRUE
##