monitorTrial {seqDesign} | R Documentation |
Group Sequential Monitoring of Simulated Efficacy Trials for the Event of Potential Harm, Non-Efficacy, and High Efficacy
Description
monitorTrial
applies a group sequential monitoring procedure to data-sets generated by simTrial
, which may result in modification or termination of each simulated trial.
Usage
monitorTrial(dataFile, stage1, stage2, harmMonitorRange,
harmMonitorAlpha = 0.05, alphaPerTest = NULL,
nonEffStartMethod = c("FKG", "fixed", "?", "old"),
nonEffStartParams = NULL, nonEffInterval,
nonEffIntervalUnit = c("counts", "time"), lowerVEnoneff = NULL,
upperVEnoneff, highVE, stage1VE, lowerVEuncPower = NULL, alphaNoneff,
alphaHigh, alphaStage1, alphaUncPower = NULL,
estimand = c("combined", "cox", "cuminc"), laggedMonitoring = FALSE,
lagTime, saveFile = NULL, saveDir = NULL, verbose = TRUE)
Arguments
dataFile |
if |
stage1 |
the final week of stage 1 in a two-stage trial |
stage2 |
the final week of stage 2 in a two-stage trial, i.e., the maximum follow-up time |
harmMonitorRange |
a 2-component numeric vector specifying the range of the pooled number of infections (pooled over the placebo and vaccine arm accruing infections the fastest) over which the type I error rate, specified in |
harmMonitorAlpha |
a numeric value (0.05 by default) specifying the overall type I error rate for potential-harm monitoring (per vaccine arm). To turn off potential-harm monitoring, set |
alphaPerTest |
a per-test nominal/unadjusted alpha level for potential-harm monitoring. If |
nonEffStartMethod |
a character string specifying the method used for determining when non-efficacy monitoring is to start. The default method of Freidlin, Korn, and Gray (2010) (" |
nonEffStartParams |
a list with named components specifying parameters required by |
nonEffInterval |
a numeric value (a number of infections or a number of weeks) specifying the interval between two adjacent non-efficacy interim analyses |
nonEffIntervalUnit |
a character string specifying whether intervals between two adjacent non-efficacy interim analyses should be event-driven (default option " |
lowerVEnoneff |
specifies criterion 1 for declaring non-efficacy: the lower bound of the two-sided (1- |
upperVEnoneff |
specifies criterion 2 for declaring non-efficacy: the upper bound of the two-sided (1- |
highVE |
specifies a criterion for declaring high-efficacy: the lower bound of the two-sided (1- |
stage1VE |
specifies a criterion for advancement of a treatment's evaluation into Stage 2: the lower bound of the two-sided (1- |
lowerVEuncPower |
a numeric vector with each component specifying a one-sided null hypothesis H0: VE(0– |
alphaNoneff |
one minus the nominal confidence level of the two-sided confidence interval used for non-efficacy monitoring |
alphaHigh |
one minus the nominal confidence level of the two-sided confidence interval used for high efficacy monitoring |
alphaStage1 |
one minus the nominal confidence level of the two-sided confidence interval used for determining whether a treatment's evaluation advances into Stage 2 |
alphaUncPower |
one minus the nominal confidence level of the two-sided confidence interval used to test one-sided null hypotheses H0: VE(0- |
estimand |
a character string specifying the choice of VE estimand(s) used in non- and high efficacy monitoring, advancement rule for Stage 2, and unconditional power calculations. Three options are implemented: (1) the ‘pure’ Cox approach ( |
laggedMonitoring |
a logical value ( |
lagTime |
a time point (in weeks) defining the per-protocol VE estimand, i.e., VE( |
saveFile |
a character string specifying the name of the output |
saveDir |
a character string specifying a path for |
verbose |
a logical value indicating whether information on the output directory, file name, and monitoring outcomes should be printed out (default is |
Details
All time variables use week as the unit of time. Month is defined as 52/12 weeks.
Potential harm monitoring starts at the harmMonitorRange[1]
-th infection pooled over the placebo group and the vaccine regimen that accrues infections the fastest. The potential harm analyses continue at each additional infection until the first interim analysis for non-efficacy. The monitoring is implemented with exact one-sided binomial tests of H0: p \le p0
versus H1: p > p0
, where p
is the probability that an infected participant was assigned to the vaccine group, and p0
is a fixed constant that represents the null hypothesis that an infection is equally likely to be assigned vaccine or placebo. Each test is performed at the same prespecified nominal/unadjusted alpha-level (alphaPerTest
), chosen based on simulations such that, for each vaccine regimen, the overall type I error rate by the harmMonitorRange[2]
-th arm-pooled infection (i.e., the probability that the potential harm boundary is reached when the vaccine is actually safe, p = p0
) equals harmMonitorAlpha
.
Non-efficacy is defined as evidence that it is highly unlikely that the vaccine has a beneficial effect measured as VE(0–stage1
) of upperVEnoneff
x 100% or more. The non-efficacy analyses for each vaccine regimen will start at the first infection (pooled over the vaccine and placebo arm) determined by nonEffStartMethod
. Stopping for non-efficacy will lead to a reported two-sided (1-alphaNoneff
) x 100% CI for VE(0–stage1
) with, optionally, the lower confidence bound below lowerVEnoneff
and the upper confidence bound below upperVEnoneff
, where estimand
determines the choice of the VE(0–stage1
) estimand. This approach is similar to the inefficacy monitoring approach of Freidlin, Korn, and Gray (2010). If estimand = "combined"
, stopping for non-efficacy will lead to reported (1-alphaNoneff
) x 100% CIs for both VE parameters with, optionally, lower confidence bounds below lowerVEnoneff
and upper confidence bounds below upperVEnoneff
. If laggedMonitoring = TRUE
, stopping for non-efficacy will lead to reported (1-alphaNoneff
) x 100% CIs for both VE(0–stage1
) and VE(lagTime
–stage1
) with, optionally, lower confidence bounds below lowerVEnoneff
and upper confidence bounds below upperVEnoneff
.
High efficacy monitoring allows early detection of a highly protective vaccine if there is evidence that VE(0–stage2
) >
highVE
x 100%. It is synchronized with non-efficacy monitoring during Stage 1, and a single high-efficacy interim analysis during Stage 2 is conducted halfway between the end of Stage 1 and the end of the trial. While monitoring for potential harm and non-efficacy restricts to stage1
infections, monitoring for high efficacy counts all infections during stage1
or stage2
, given that early stopping for high efficacy would only be warranted under evidence for durability of the efficacy.
The following principles and rules are applied in the monitoring procedure:
Exclude all follow-up data from the analysis post-unblinding (and include all data pre-unblinding).
The monitoring is based on modified ITT analysis, i.e., all subjects documented to be free of the study endpoint at baseline are included and analyzed according to the treatment assigned by randomization, ignoring how many vaccinations they received (only pre-unblinding follow-up included).
If a vaccine hits the harm boundary, immediately discontinue vaccinations and accrual into this vaccine arm, and unblind this vaccine arm (continue post-unblinded follow-up until the end of Stage 1 for this vaccine arm).
If a vaccine hits the non-efficacy boundary, immediately discontinue vaccinations and accrual into this vaccine arm, keep blinded and continue follow-up until the end of Stage 1 for this vaccine arm.
If and when the last vaccine arm hits the non-efficacy (or harm) boundary, discontinue vaccinations and accrual into this vaccine arm, and unblind (the trial is over, completed in Stage 1).
Stage 1 for the whole trial is over on the earliest date of the two events: (1) all vaccine arms have hit the harm or non-efficacy boundary; and (2) the last enrolled subject in the trial reaches the final
stage1
visit.Continue blinded follow-up until the end of Stage 2 for each vaccine arm that reaches the end of
stage1
with a positive efficacy (as defined bystage1VE
) or high efficacy (as defined byhighVE
) result.If at least one vaccine arm reaches the end of
stage1
with a positive efficacy or high efficacy result, continue blinded follow-up in the placebo arm until the end of Stage 2.Stage 2 for the whole trial is over on the earliest date of the two events: (1) all subjects in the placebo arm and each vaccine arm that registered efficacy or high efficacy in
stage1
have failed or been censored; and (2) all subjects in the placebo arm and each vaccine arm that registered efficacy or high efficacy instage1
have completed the finalstage2
visit.
The above rules have the following implications:
If a vaccine hits the non-efficacy boundary but Stage 1 for the whole trial is not over, then one includes in the analysis all follow-up through the final
stage1
visit for that vaccine regimen, including all individuals accrued up through the date of hitting the non-efficacy boundary (which will be the total number accrued to this vaccine arm).If a vaccine hits the harm boundary, all follow-up information through the date of hitting the harm boundary is included for this vaccine; no follow-up data are included after this date.
If and when the last vaccine arm hits the non-efficacy (or harm) boundary, all follow-up information through the date of hitting the non-efficacy (or harm) boundary is included for this vaccine; no follow-up data are included after this date.
Value
If saveDir
(and, optionally saveFile
) is specified, the output list (named out
) is saved as an .RData
file in saveDir
(the path to saveDir
is printed); otherwise it is returned. The output object is a list of length equal to the number of simulated trials, each of which is a list of length equal to the number of treatment arms, each of which is a list with (at least) the following components:
-
boundHit
: a character string stating the monitoring outcome in this treatment arm, i.e., one of"Harm"
,"NonEffInterim"
,"NonEffFinal"
,"Eff"
, or"HighEff"
. The first four outcomes can occur in Stage 1, whereas the last outcome can combine data over Stage 1 and Stage 2. -
stopTime
: the time of hitting a stopping boundary since the first subject enrolled in the trial -
stopInfectCnt
: the pooled number of infections atstopTime
-
summObj
: adata.frame
containing summary information from each non-/high efficacy interim analysis -
finalHRci
: the final CI for the hazard ratio, available ifestimand!="cuminc"
and there is at least 1 infection in each arm -
firstNonEffCnt
: the number of infections that triggered non-efficacy monitoring (if available) -
totInfecCnt
: the total number ofstage1
(stage2
ifboundHit = "HighEff"
) infections -
totInfecSplit
: a table with the numbers ofstage1
(stage2
ifboundHit = "HighEff"
) infections in the treatment and control arm -
lastExitTime
: the time between the first subject's enrollment and the last subject's exiting from the trial
References
Freidlin B., Korn E. L., and Gray R. (2010), A general inefficacy interim monitoring rule for randomized clinical trials. Clinical Trials 7(3):197-208.
See Also
simTrial
, censTrial
, and rankTrial
Examples
simData <- simTrial(N=c(1000, rep(700, 2)), aveVE=seq(0, 0.4, by=0.2),
VEmodel="half", vePeriods=c(1, 27, 79), enrollPeriod=78,
enrollPartial=13, enrollPartialRelRate=0.5, dropoutRate=0.05,
infecRate=0.04, fuTime=156,
visitSchedule=c(0, (13/3)*(1:4), seq(13*6/3, 156, by=13*2/3)),
missVaccProb=c(0,0.05,0.1,0.15), VEcutoffWeek=26, nTrials=5,
stage1=78, randomSeed=300)
monitorData <- monitorTrial(dataFile=simData, stage1=78, stage2=156,
harmMonitorRange=c(10,100), alphaPerTest=NULL,
nonEffStartMethod="FKG", nonEffInterval=20,
lowerVEnoneff=0, upperVEnoneff=0.4, highVE=0.7,
stage1VE=0, lowerVEuncPower=0, alphaNoneff=0.05,
alphaHigh=0.05, alphaStage1=0.05, alphaUncPower=0.05,
estimand="cuminc", lagTime=26)
### alternatively, to save the .RData output file (no '<-' needed):
###
### simTrial(N=c(1400, rep(1000, 2)), aveVE=seq(0, 0.4, by=0.2), VEmodel="half",
### vePeriods=c(1, 27, 79), enrollPeriod=78, enrollPartial=13,
### enrollPartialRelRate=0.5, dropoutRate=0.05, infecRate=0.04, fuTime=156,
### visitSchedule=c(0, (13/3)*(1:4), seq(13*6/3, 156, by=13*2/3)),
### missVaccProb=c(0,0.05,0.1,0.15), VEcutoffWeek=26, nTrials=30,
### stage1=78, saveDir="./", randomSeed=300)
###
### monitorTrial(dataFile=
### "simTrial_nPlac=1400_nVacc=1000_1000_aveVE=0.2_0.4_infRate=0.04.RData",
### stage1=78, stage2=156, harmMonitorRange=c(10,100), alphaPerTest=NULL,
### nonEffStartMethod="FKG", nonEffInterval=20, lowerVEnoneff=0,
### upperVEnoneff=0.4, highVE=0.7, stage1VE=0, lowerVEuncPower=0,
### alphaNoneff=0.05, alphaHigh=0.05, alphaStage1=0.05, alphaUncPower=0.05,
### estimand="cuminc", lagTime=26, saveDir="./")