Synthetic Control Methods

Synthetic control estimation for single-unit event studies — construct a counterfactual from donor units, run placebo tests, and visualize treatment effects.

Synthetic control methods estimate a causal effect for a single treated unit by constructing a weighted combination of untreated donor units that approximates the treated unit’s pre-treatment trajectory. The treatment effect is the gap between the observed outcome and the synthetic counterfactual after treatment.

When to Use Synthetic Control vs. Other Methods

Feature Cross-Sectional Event Study Panel DiD Synthetic Control
Number of treated units Multiple firms Multiple units One unit
Control group Market index Untreated units Weighted donors
Best for Market reactions Policy effects (many units) Single policy case studies
Examples M&A, earnings Staggered regulations Country-level reforms, single-state laws

When to use. Synthetic control is ideal when you have a single treated unit (one country, one state, one firm) and a pool of similar untreated units. Classic applications: the economic cost of conflict (Abadie & Gardeazabal 2003), California’s Proposition 99 (Abadie et al. 2010).

Method

Step 1: Construct the Synthetic Control

Find donor weights \(w_1, \ldots, w_J\) that minimize the pre-treatment distance between the treated unit and the weighted donors:

\[ \min_{w} \sum_{t=1}^{T_0} \left( Y_{1t} - \sum_{j=2}^{J+1} w_j Y_{jt} \right)^2 \quad \text{s.t.} \quad w_j \geq 0, \; \sum_{j} w_j = 1 \]

where \(Y_{1t}\) is the treated unit’s outcome, \(Y_{jt}\) are donor outcomes, and \(T_0\) is the last pre-treatment period.

Step 2: Estimate the Treatment Effect

The treatment effect at time \(t > T_0\) is the gap:

\[ \hat{\tau}_t = Y_{1t} - \sum_{j=2}^{J+1} \hat{w}_j Y_{jt} \]

Step 3: Inference via Placebo Tests

Placebo tests apply the synthetic control method to each donor unit in turn, pretending it was treated. The treated unit’s gap is compared to the distribution of placebo gaps.

\[ p\text{-value} = \frac{\text{rank of treated RMSPE among all RMSPEs}}{J + 1} \]

where RMSPE is the root mean squared prediction error in the post-treatment period.

Running in R

# Create synthetic control task
sc_task <- SyntheticControlTask$new(
  treated_data = treated,
  donor_data = donors,
  treatment_time = treatment_time
)

# Estimate synthetic control
result <- estimate_synthetic_control(sc_task)
# Donor weights
result$weights
NULL
# Trajectory plot: treated vs. synthetic
plot_synthetic_control(result, type = "trajectory")

# Gap plot: treatment effect over time
plot_synthetic_control(result, type = "gap")

Placebo Tests

# Run placebo tests (each donor as pseudo-treated)
placebo <- sc_placebo_test(sc_task)
plot_synthetic_control(placebo, type = "placebo")

A treated unit whose post-treatment gap is large relative to the placebo gaps provides evidence of a real treatment effect.

Diagnostic Checks

Check What to Verify If Failed
Pre-treatment fit Synthetic control closely tracks treated unit before treatment Add covariates or remove poor donors
Donor weights Weights are not concentrated on a single unit Expand donor pool
RMSPE ratio Treated RMSPE >> placebo RMSPEs Effect may not be significant
Leave-one-out Results stable when removing individual donors Check for outlier influence

Literature

  • Abadie, A. & Gardeazabal, J. (2003). The economic costs of conflict: A case study of the Basque Country. American Economic Review, 93(1), 113–132.
  • Abadie, A., Diamond, A. & Hainmueller, J. (2010). Synthetic control methods for comparative case studies. Journal of the American Statistical Association, 105(490), 493–505.
  • Abadie, A. (2021). Using synthetic controls: Feasibility, data requirements, and methodological aspects. Journal of Economic Literature, 59(2), 391–425.

Next Steps