This R Markdown document illustrates the power calculation in the presence of stratification variables. This example is taken from EAST 6.4 section 56.7 on lung cancer patients comparing two treatment groups in a target patient population with some prior therapy. There are three stratification variables:
type of cancer cell (small, adeno, large, squamous)
age in years (<=50, >50)
performance status score (<=50, >50-<=70, >70)
We consider a three stage Lan-DeMets O’Brien-Fleming group sequential design. The stratum fractions are
= c(0.28, 0.13, 0.25, 0.34)
p1 = c(0.28, 0.72)
p2 = c(0.43, 0.37, 0.2)
p3 = p1 %x% p2 %x% p3 stratumFraction
Using the small cancer cell, age <=50, and performance status score <=50 as the reference stratum, the hazard ratios are
= c(1, 2.127, 0.528, 0.413)
theta1 = c(1, 0.438)
theta2 = c(1, 0.614, 0.159) theta3
If the hazard rate of the reference stratum is 0.009211, then the hazard rate for the control group is
= 0.009211*exp(log(theta1) %x% log(theta2) %x% log(theta3)) lambda2
The hazard ratio of the active treatment group versus the control group is 0.4466.
In addition, we assume an enrollment period of 24 months with a constant enrollment rate of 12 patients per month to enroll 688 patients, and the target number of events of 66.
First we obtain the calendar time at which 66 events will occur.
library(lrstat)
library(rpact)
caltime(nevents = 66, accrualDuration = 24, accrualIntensity = 12,
stratumFraction = stratumFraction,
lambda1 = 0.4466*lambda2, lambda2 = lambda2,
followupTime = 100)
## [1] 54.92197
Therefore, the follow-up time for the last enrolled patient is 30.92 months. Next we obtain the critical values for the three stage O’Brien-Fleming group sequential design.
getDesignGroupSequential(kMax = 3, alpha = 0.025, typeOfDesign = "asOF")
## Design parameters and output of group sequential design:
##
## User defined parameters:
## Type of design : O'Brien & Fleming type alpha spending
##
## Derived from user defined parameters: not available
##
## Default parameters:
## Maximum number of stages : 3
## Stages : 1, 2, 3
## Information rates : 0.333, 0.667, 1.000
## Significance level : 0.0250
## Type II error rate : 0.2000
## Two-sided power : FALSE
## Test : one-sided
## Tolerance : 1e-08
## Type of beta spending : none
##
## Output:
## Cumulative alpha spending : 0.0001035, 0.0060484, 0.0250000
## Critical values : 3.710, 2.511, 1.993
## Stage levels (one-sided) : 0.0001035, 0.0060122, 0.0231281
Now we can evaluate the power using lrpower.
lrpower(kMax = 3,
informationRates = c(0.333, 0.667, 1),
criticalValues = c(3.710, 2.511, 1.993),
accrualIntensity = 12,
stratumFraction = stratumFraction,
lambda1 = 0.4466*lambda2,
lambda2 = lambda2,
accrualDuration = 24,
followupTime = 30.92)
## $overallReject
## [1] 0.8820359
##
## $rejectPerStage
## [1] 0.02854146 0.49559309 0.35790136
##
## $futilityPerStage
## [1] 0.0000000 0.0000000 0.1179643
##
## $eventsPerStage
## [1] 21.97716 44.02030 65.99745
##
## $numberOfSubjects
## [1] 288 288 288
##
## $analysisTime
## [1] 24.87300 39.03982 54.92000
##
## $expectedNumberOfEvents
## [1] 53.84934
##
## $expectedNumberOfSubjects
## [1] 288.0001
##
## $expectedStudyDuration
## [1] 46.19232
##
## $accrualDuration
## [1] 24
##
## $followupTime
## [1] 30.92
##
## $fixedFollowup
## [1] FALSE
Therefore, the overall power is about 88% for the stratified analysis. This is confirmed by the simulation below.
lrsim(kMax = 3,
informationRates = c(0.333, 0.667, 1),
criticalValues = c(3.710, 2.511, 1.993),
accrualIntensity = 12,
stratumFraction = stratumFraction,
lambda1 = 0.4466*lambda2,
lambda2 = lambda2,
accrualDuration = 24,
followupTime = 30.92,
plannedEvents = c(22, 44, 66),
maxNumberOfIterations = 1000,
seed = 314159)
## stage 1 stage 2 stage 3
## eventsPerStage 22.00000 44.00000 66.000
## expectedNumberOfEvents 55.04400
## analysisTime 24.97951 39.16561 54.663
## expectedStudyDuration 47.01474
## numberOfSubjects 279.32000 288.00000 288.000
## expectedNumberOfSubjects 287.99000
## futilityPerStage 0.00000 0.00600 0.109
## rejectPerStage 0.00600 0.48000 0.399
## overallReject 0.88500