Allows to use multiple outcomes in Synthetic Diff-in-Diffs estimation. Implements the synthetic difference-in-differences estimation proposed by Chava and Reguly (2024): The Long-Run Stock Market Performance of Mergers and Acquisitions The package extends Arkhangelsky et al (2021) to multiple outcomes, while optimizing the weights over multiple variables.
Arkhangelsky et al (2021) introduces synthetic control that allows time and unit fixed effects while creating ''synthetic control'' for the (expected) treated unit.
Other Synthetic Control methods allows to use ''covariates'' that they use to calculate the weights. Note however these variables are unaffected by the treatment. Nice paper on the issue is by Botosaru and Ferman (2019).
Here we allow to estimate the weights for the control donor pool by using multiple outcome that are affected by the treatment. We also allow pre-event time specific weights that reduces the bias in the estimator.
where the individual unit-weights
and
where
Intuitively it uses information from
For the time specific weights we use the same approach but scale with unit-specific var-covar matrices.
To install this package, first ensure that devtools is installed with
install.packages("devtools")
then install the package from GitHub with
devtools::install_github("regulyagoston/multisynthdid")
To get started, use a panel dataset with an outcome measure, a treatment indicator, a unit indicator, a time variable, and an intervention time t_int. Then run
res <- multi_sdid( outcome_1 + outcome_2 ~ 1, 'treatment', 'unit_id', 'time_id', data )
A simple example is to estimate the effect of German Reunification.
library(multisynthdid)
Get the imputed data for german reunification.
data("german_reunification")
One can easily run the estimation via the main function:
res <- multi_sdid( gdp + infrate + trade ~ 1, 'W', 'country', 'year', german_reunification )
The summary command will summarise the main estimates
summary.multi_sdid(res)
To check the outcome variables and its synthetic counterparts visual investigation has been the norm with synthetic controls.
plot_outcomes( res )
Finally one can check the treatment/gap plots with ot without placebo effects for inference.
plot_gaps( res, placebo = T )