Starting from version 1.1.0, the package supports a simplified approach to specify interventions. This document describes how to specify interventions using this approach. This document assumes that readers have read the long-form package documentation of McGrath et al. (2020).
Note that maintains backwards compatibility in the sense that users may continue to specify interventions using the previous approach (i.e., based on specifying the arguments , , and ).
To specify interventions, users can supply arguments with the following naming requirements:
For example, an argument with the name specifies the first intervention, which intervenes on variable .
Each intervention argument takes as input a list with the following elements:
The next sections illustrate complete examples.
In this example, we re-perform the analysis in Example 1 in McGrath et al. (2020) using the new intervention specification.
id <- 'id'
time_points <- 7
time_name <- 't0'
covnames <- c('L1', 'L2', 'A')
outcome_name <- 'Y'
outcome_type <- 'survival'
covtypes <- c('binary', 'bounded normal', 'binary')
histories <- c(lagged, lagavg)
histvars <- list(c('A', 'L1', 'L2'), c('L1', 'L2'))
covparams <- list(covmodels = c(L1 ~ lag1_A + lag_cumavg1_L1 + lag_cumavg1_L2 +
                                  L3 + t0,
                                L2 ~ lag1_A + L1 + lag_cumavg1_L1 +
                                  lag_cumavg1_L2 + L3 + t0,
                                A ~ lag1_A + L1 + L2 + lag_cumavg1_L1 +
                                  lag_cumavg1_L2 + L3 + t0))
ymodel <- Y ~ A + L1 + L2 + L3 + lag1_A + lag1_L1 + lag1_L2 + t0
nsimul <- 10000
gform_basic <- gformula(obs_data = basicdata_nocomp, id = id,
                        time_points = time_points,
                        time_name = time_name, covnames = covnames,
                        outcome_name = outcome_name,
                        outcome_type = outcome_type, covtypes = covtypes,
                        covparams = covparams, ymodel = ymodel,
                        histories = histories, histvars = histvars,
                        basecovs = c('L3'), nsimul = nsimul,
                        seed = 1234, 
                        intervention1.A = list(static, rep(0, time_points)),
                        intervention2.A = list(static, rep(1, time_points)), 
                        int_descript = c('Never treat', 'Always treat'))
gform_basic## PREDICTED RISK UNDER MULTIPLE INTERVENTIONS
## 
## Intervention      Description
## 0         Natural course
## 1         Never treat
## 2         Always treat
## 
## Sample size = 2500, Monte Carlo sample size = 10000
## Number of bootstrap samples = 0
## Reference intervention = natural course (0)
##  
## 
##      k Interv. NP Risk g-form risk Risk ratio Risk difference % Intervened On
##  <num>   <num>   <num>       <num>      <num>           <num>           <num>
##      6       0  0.5056   0.5041395  1.0000000       0.0000000            0.00
##      6       1      NA   0.7307657  1.4495308       0.2266262          100.00
##      6       2      NA   0.2336471  0.4634571      -0.2704925           94.67
##  Aver % Intervened On
##                 <num>
##               0.00000
##              71.62286
##              34.00000In this example, we apply a custom intervention that assigns treatment if is below a certain threshold. We first define the custom intervention function.
example_intervention <- function(newdf, pool, intvar, intvals, time_name, t){
  newdf[, (intvar) := 0]
  newdf[L2 < intvals[[1]], (intvar) := 1]
}Next, we apply the g-formula with this custom intervention where we consider different thresholds for .
gform_basic <- gformula(obs_data = basicdata_nocomp, id = id,
                        time_points = time_points,
                        time_name = time_name, covnames = covnames,
                        outcome_name = outcome_name,
                        outcome_type = outcome_type, covtypes = covtypes,
                        covparams = covparams, ymodel = ymodel,
                        histories = histories, histvars = histvars,
                        basecovs = c('L3'), nsimul = nsimul,
                        seed = 1234, 
                        intervention1.A = list(example_intervention, 0.8),
                        intervention2.A = list(example_intervention, 1), 
                        int_descript = c('Treat if L2 < 0.8', 'Treat if L2 < 1'))
gform_basic## PREDICTED RISK UNDER MULTIPLE INTERVENTIONS
## 
## Intervention      Description
## 0         Natural course
## 1         Treat if L2 < 0.8
## 2         Treat if L2 < 1
## 
## Sample size = 2500, Monte Carlo sample size = 10000
## Number of bootstrap samples = 0
## Reference intervention = natural course (0)
##  
## 
##      k Interv. NP Risk g-form risk Risk ratio Risk difference % Intervened On
##  <num>   <num>   <num>       <num>      <num>           <num>           <num>
##      6       0  0.5056   0.5041395  1.0000000       0.0000000            0.00
##      6       1      NA   0.6958459  1.3802645       0.1917064           99.88
##      6       2      NA   0.3302342  0.6550453      -0.1739053           96.32
##  Aver % Intervened On
##                 <num>
##               0.00000
##              68.50143
##              38.47143McGrath S, Lin V, Zhang Z, Petito LC, Logan RW, Hernán MA, Young JG. gfoRmula: an R package for estimating the effects of sustained treatment strategies via the parametric g-formula. Patterns. 2020 Jun 12;1(3).