Learn R Programming

seqDesign (version 1.0.1)

monitorTrial: 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, 
             alphaPerTest, minCnt, minPct, week1, minCnt2, 
             week2, nonEffInterval, nullVE, altVE, highVE,
             alpha, estimand = c("combined", "cox", "cuminc"), 
             VEcutoffWeek, saveDir = NULL)

Arguments

dataFile
if saveDir = NULL, a list returned by simTrial; otherwise a name (character string) of an .RData file created by simTrial
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 for pooled numbers of infections (pooled over the placebo and vaccine arm accruing infections the fastest) for which potential-harm stopping boundaries will be computed
alphaPerTest
a per-test nominal/unadjusted alpha level for potential-harm monitoring
minCnt
a minumum number of infections (pooled over the placebo and vaccine arm accruing infections the fastest) required for the initiation of non-efficacy monitoring [criterion 1]
minPct
a minimum proportion of infections after week1 (pooled over the placebo and vaccine arm accruing infections the fastest) required for the initiation of non-efficacy monitoring [criterion 2]
week1
a time point (in weeks) used, together with minPct, for defining criterion 2
minCnt2
a minumum number of infections after week2 (pooled over the placebo and vaccine arm accruing infections the fastest) required for the initiation of non-efficacy monitoring [criterion 3]
week2
a time point (in weeks) used, together with minCnt2, for defining criterion 3
nonEffInterval
a number of infections between two adjacent non-efficacy interim analyses
nullVE
specifies criterion 1 for declaring non-efficacy: the 95% confidence interval(s) for the VE estimand(s) do(es) not lie above nullVE (typically set equal to 0)
altVE
specifies criterion 2 for declaring non-efficacy: the 95% confidence interval(s) for the VE estimand(s) lie(s) below altVE (typically a number in the 0--1 range)
highVE
specifies a criterion for declaring high-efficacy: the 95% confidence interval(s) for the VE estimand(s) lie(s) above highVE (typically a number in the 0--1 range)
alpha
the nominal significance level for the one-sided test of the null hypothesis that VE(0--stage1) $\le$ 0%
estimand
a character string specifying the choice of VE estimands/test statistics used in non-efficacy and high-efficacy monitoring. Three options are implemented: (1) the `pure' Cox approach ("cox"), where VE is defined as 1-hazard ratio (treatment/c
VEcutoffWeek
a time-origin (in weeks) from which the per-protocol VE is assessed (typically taken as the date of the last immunization or the date of the visit following the last immunization)
saveDir
a character string specifying a path for dataFile. If supplied, the output is also saved as an .RData file in this directory; otherwise the output is returned as a list.

Value

  • If saveDir 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:
  • boundHita 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.
  • stopTimethe time of hitting a stopping boundary since the first subject enrolled in the trial
  • stopInfectCntthe pooled number of infections at stopTime
  • summObja data.frame containing summary information from each non-/high-efficacy interim analysis
  • finalHRcithe final 95% CI for the hazard ratio, available if estimand!="cuminc" and there is at least 1 infection in each arm
  • firstNonEffCntthe number of infections that triggered non-efficacy monitoring (if available)
  • totInfecCntthe total number of stage1 (stage2 if boundHit = "HighEff") infections
  • totInfecSplita table with the numbers of stage1 (stage2 if boundHit = "HighEff") infections in the treatment and control arm
  • lastExitTimethe time between the first subject's enrollment and the last subject's exiting from the trial

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 0.05. Non-efficacy is defined as evidence that it is highly unlikely that the vaccine has a beneficial effect on acquisition of VE(0--stage1) of altVE x 100% or more. The non-efficacy analyses for each vaccine regimen will start at the first infection at or after the minCnt-th (pooled over the vaccine arm and placebo) when at least minPct x 100% of the accumulated infections are diagnosed after week1 and at least minCnt2 infections are diagnosed after week2. Stopping for non-efficacy will lead to a reported 95% CI for VE(0--stage1) lying below altVE x 100% and covering nullVE x 100%, where estimand determines the choice of the VE(0--stage1) estimator. This approach is similar to the inefficacy monitoring approach of Freidlin B, Korn EL, Gray R. (2010) A general inefficacy interim monitoring rule for randomized trials. Clinical Trials, 7:197-208. For estimand = "combined", stopping for non-efficacy will lead to the reported 95% CIs for both VE parameters lying below altVE x 100% and covering nullVE x 100%. High-efficacy monitoring allows early detection of a highly protective vaccine if there is evidence that VE(0--stage2) $>$ highVE x 100%, based on two planned interim analyses, the first at the time of the fifth planned non-efficacy analysis, and the second at the expected mid-point between the number of infections at the first interim analysis and the number of infections observed at the end of stage2. Whereas the monitoring for potential-harm and non-efficacy restricts to stage1 infections, the 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 finalstage1visit.
  • Continue blinded follow-up until the end of Stage 2 for each vaccine arm that reaches the end ofstage1with a positive efficacy or high-efficacy result.
  • If at least one vaccine arm reaches the end ofstage1with 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 instage1have failed or been censored; and (2) all subjects in the placebo arm and each vaccine arm that registered efficacy or high-efficacy instage1have completed the finalstage2visit.
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 finalstage1visit 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.

See Also

simTrial, censTrial, and rankTrial

Examples

Run this code
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=0.0106, 
                            minCnt=50, minPct=0.33, week1=26, minCnt2=2, week2=52, 
                            nonEffInterval=20, nullVE=0, altVE=0.4, highVE=0.6, 
                            alpha=0.025, estimand="combined", VEcutoffWeek=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=0.0106, 
###          minCnt=50, minPct=0.33, week1=26, minCnt2=2, week2=52, nonEffInterval=20, 
###          nullVE=0, altVE=0.4, highVE=0.6, alpha=0.025, estimand="combined", 
###          VEcutoffWeek=26, saveDir="./")

Run the code above in your browser using DataLab