rollmatch
is an R package designed to match study participants that start interventions at different times (rolling entry) with an appropriate comparison for the purpose of impact evaluation. Rolling entry presents several challenges for comparison group selection:
- A small number of entrants in a period can hinder propensity score models
- Precipitating events prior to entry may be hard to pin down, but generate changes in dynamic variables (e.g., utilization, spending)
This method, called Rolling Entry Matching, assigns potential comparison non-participants multiple counterfactual entry periods which allows for matching of participant and non-participants based on data immediately preceding each participant's specific entry period, rather than using data from a fixed pre-intervention period.
- For more details on Rolling Entry Matching, please reference Witman et al. 2018.
- For more details on the
rollmatch
R package, please reference Jones et al. 2019.
# Install from CRAN:
install.packages("rollmatch")
# Or try out the development version on GitHub:
# install.packages("devtools")
devtools::install_github("RTIInternational/rollmatch")
# Load rollmatch
library(rollmatch)
# Load sample dataset
data(package="rollmatch", "rem_synthdata_small")
# Reduce the input dataset size, for matching
reduced_data <- reduce_data(data = rem_synthdata_small, treat = "treat",
tm = "quarter", entry = "entry_q",
id = "indiv_id", lookback = 1)
# Choose confounding variables hypothesized to be associated with both treatment and outcome
fm <- as.formula(treat ~ qtr_pmt + yr_pmt + age)
vars <- all.vars(fm)
# Calculate propensity scores for the reduced data
scored_data <- score_data(reduced_data = reduced_data,
model_type = "logistic", match_on = "logit",
fm = fm, treat = "treat",
tm = "quarter", entry = "entry_q", id = "indiv_id")
# Run the rolling entry matching algorithm
output <- rollmatch(scored_data, data=rem_synthdata_small, treat = "treat",
tm = "quarter", entry = "entry_q", id = "indiv_id",
vars = vars, lookback = 1, alpha = .2,
standard_deviation = "average", num_matches = 3,
replacement = TRUE)
# View output matches and diagnostics
output