
Native synthetic control (Abadie-Diamond-Hainmueller)
Source:R/synth_native.R
morie_synth_control.RdBuilds a synthetic version of the treated unit as a convex combination of donor units, chosen so the synthetic unit tracks the treated unit's pre-treatment outcomes (and optional predictors). The donor-weight problem is the constrained QP of Abadie & Gardeazabal (2003), solved by accelerated projected gradient on the simplex; the predictor-weight matrix V is optimized by nested minimization of pre-period MSPE. In-space placebo inference reassigns treatment to every donor and compares post/pre RMSPE ratios (Abadie, Diamond & Hainmueller 2010).
Usage
morie_synth_control(
data,
outcome,
unit,
time,
treated_unit,
treatment_time,
predictors = NULL,
optimize_v = TRUE
)Arguments
- data
Long panel data frame (balanced).
- outcome, unit, time
Column names.
- treated_unit
The identifier of the treated unit.
- treatment_time
First treated period.
- predictors
Optional character vector of predictor columns (averaged over the pre-period). Pre-period outcomes are always included as predictors.
- optimize_v
Optimize the predictor-weight matrix V (default TRUE); FALSE uses equal weights on standardized predictors.
Value
An object of class morie_synth: a list with
weights (named donor weights), donor_pool,
treated_unit, time_series (data frame with observed,
synthetic, and gap paths), att (mean post-period gap),
pre_rmspe, post_rmspe, rmspe_ratio,
placebo_pvalue and placebo_ratios, v_weights,
method.
References
Abadie, A., Diamond, A., & Hainmueller, J. (2010). Synthetic control methods for comparative case studies. JASA, 105(490), 493–505.
Examples
pan <- expand.grid(unit = letters[1:6], time = 1:10)
pan$y <- rnorm(nrow(pan)) + as.integer(pan$time) * 0.2 +
ifelse(pan$unit == "a" & pan$time >= 7, 2, 0)
fit <- morie_synth_control(pan, "y", "unit", "time",
treated_unit = "a", treatment_time = 7)
fit$att
#> [1] 2.185351