# Sample Size Calculation With Fixed Follow-up

#### 12/15/2021

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:

library(lrstat)

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
##