monitorTrial: Group Sequential Monitoring of Simulated Efficacy Trials for...

Description Usage Arguments Details Value References See Also Examples

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

1
2
3
4
5
6
7
8
9
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 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 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, will be spent (per vaccine arm). Note that harmMonitorRange does not specify a range for which potential-harm stopping boundaries will be computed; instead, it specifies when potential-harm monitoring will start, and the range over which harmMonitorAlpha will be spent.

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 harmMonitorAlpha equal to 0.00001.

alphaPerTest

a per-test nominal/unadjusted alpha level for potential-harm monitoring. If NULL, a per-test alpha level is calculated that yields a cumulative alpha of harmMonitorAlpha at the end of harmMonitorRange.

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) ("FKG") calculates the minimal pooled infection count (pooled over the placebo and vaccine arm accruing infections the fastest) such that a hazard-ratio-based VE point estimate of 0% would result in declaring non-efficacy, i.e., the upper bound of the two-sided (1-alphaNoneff) x 100% confidence interval for VE based on the asymptotic variance of the log-rank statistic is (barely) below the non-efficacy threshold specified as component upperVEnonEff in the list nonEffStartParams. If this list component is left unspecified, the argument upperVEnonEff is used as the non-efficacy threshold. The alternative method ("fixed") starts non-efficacy monitoring at a fixed pooled infection count (pooled over the placebo and vaccine arm accruing infections the fastest) specified by component N1 in the list nonEffStartParams.

nonEffStartParams

a list with named components specifying parameters required by nonEffStartMethod (NULL by default)

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 "counts") or calendar time-driven (option "time")

lowerVEnoneff

specifies criterion 1 for declaring non-efficacy: the lower bound of the two-sided (1-alphaNoneff) x 100% confidence interval(s) for the VE estimand(s) lie(s) below lowerVEnoneff (typically set equal to 0). If NULL (default), this criterion is ignored.

upperVEnoneff

specifies criterion 2 for declaring non-efficacy: the upper bound of the two-sided (1-alphaNoneff) x 100% confidence interval(s) for the VE estimand(s) lie(s) below upperVEnoneff (typically a number in the 0–0.5 range)

highVE

specifies a criterion for declaring high-efficacy: the lower bound of the two-sided (1-alphaHigh) x 100% confidence interval for the VE estimand lies above highVE (typically a number in the 0.5–1 range). To turn off high efficacy monitoring, set highVE equal to 1.

stage1VE

specifies a criterion for advancement of a treatment's evaluation into Stage 2: the lower bound of the two-sided (1-alphaStage1) x 100% confidence interval for the VE estimand lies above stage1VE (typically set equal to 0)

lowerVEuncPower

a numeric vector with each component specifying a one-sided null hypothesis H0: VE(0–stage1) lowerVEuncPower x 100%. Unconditional power (i.e., accounting for sequential monitoring) to reject each H0 is calculated, where the rejection region is defined by the lower bound of the two-sided (1-alphaUncPower) x 100% confidence interval for the VE estimand being above the respective component of lowerVEuncPower (typically values in the 0–0.5 range).

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-stage1) lowerVEuncPower x 100% against alternative hypotheses H1: VE(0–stage1) > lowerVEuncPower x 100%. The same nominal confidence level is applied for each component of lowerVEuncPower.

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 ("cox"), where VE is defined as 1-hazard ratio (treatment/control) and estimated by the maximum partial likelihood estimator in the Cox model; (2) the ‘pure’ cumulative incidence-based approach ("cuminc"), where VE is defined as 1-cumulative incidence ratio (treatment/control) and estimated by the transformation of the Nelson-Aalen estimator for the cumulative hazard function; and (3) the combined approach ("combined"), where both aforementioned VE estimands are used for non-efficacy monitoring while the cumulative VE estimand is used for all other purposes. Only the first three characters are necessary.

laggedMonitoring

a logical value (FALSE by default) indicating whether "per-protocol" non-efficacy monitoring should additionally be conducted for events occurring after lagTime weeks as a more conservative non-efficacy monitoring approach. If TRUE and estimand = "combined", the cumulative VE estimand is considered only for non-efficacy monitoring.

lagTime

a time point (in weeks) defining the per-protocol VE estimand, i.e., VE(lagTimestage1). This VE estimand is also used in "per-protocol" non-efficacy monitoring if laggedMonitoring equals TRUE. It is typically chosen as the date of the last immunization or the date of the visit following the last immunization.

saveFile

a character string specifying the name of the output .RData file. If NULL (default), a default file name will be used.

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.

verbose

a logical value indicating whether information on the output directory, file name, and monitoring outcomes should be printed out (default is TRUE)

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 ≤ 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(lagTimestage1) 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:

The above rules have the following implications:

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:

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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="./")

seqDesign documentation built on May 23, 2019, 1:03 a.m.