Synthetic control and propensity score analysis: Contributions (money and time)

273 views
Skip to first unread message

Hans Olav Melberg

unread,
Apr 21, 2017, 11:21:23 AM4/21/17
to pystatsmodels
Hi,

I would like to help to develop synthetic control methods and propensity score analysis in statsmodels.

Based on the archives it seems like propensity score analysis is close to completion, but I have not seem any discussion of synthetic control methods.


I do not think I have the skills to code this myself, but I would be happy to help (and to make a financial contribution) if some of you would be interested.

Hans Olav








josef...@gmail.com

unread,
Apr 21, 2017, 4:38:11 PM4/21/17
to pystatsmodels
Hi,

I recently read about the synthetic control method in overview
articles and didn't look at more than a summary before. I tried to get
a quick overview to see how difficult this would be.

It might not be a small project because it doesn't use anything for
which we would have already a larger amount of infrastructure. Also,
the nested optimization might be a bit tricky, according to the
authors of MSCMT, e.g.
https://cran.r-project.org/web/packages/MSCMT/vignettes/CheckingSynth.html

One problem might be that the weights are estimated under
non-negativity constraints where some of the constraints are likely to
be binding. I haven't looked at the details, but the only constrained
optimizer we currently use is for discrete models fit_regularized
which uses slsqp for non-negativity constraints. Maybe scipy has now
something else that would be appropriate.

I will try to look again next week to see if I get a better overview,
or at least learn enough to ask some questions.

If anyone wants to work on this, this would be a good topic.

Related: some versions for matching estimators or propensity score
matching are outside of statsmodels
https://github.com/statsmodels/statsmodels/issues/2871 (maybe not up
to date)


Josef


>
>
>
>
>
>

josef...@gmail.com

unread,
Apr 21, 2017, 4:46:06 PM4/21/17
to pystatsmodels
And a link
https://google.github.io/CausalImpact/CausalImpact.html
The plot and the idea for identifying the post-break causal or
treatment effect look similar.

The details differ, but I also didn't look at their details when I saw
it some time ago.

Josef



>
>
> Josef
>
>
>>
>>
>>
>>
>>
>>

josef...@gmail.com

unread,
Apr 23, 2017, 10:04:48 AM4/23/17
to pystatsmodels
background reference

Doudchenko, Nikolay, and Guido W. Imbens. 2016. “Balancing,
Regression, Difference-In-Differences and Synthetic Control Methods: A
Synthesis.” NBER Working Paper 22791. National Bureau of Economic
Research, Inc. https://ideas.repec.org/p/nbr/nberwo/22791.html.
https://arxiv.org/abs/1610.07748

Based on a quick browsing, they seem to point out the
"no-extrapolation" constraints in Abadie et al.

Josef

josef...@gmail.com

unread,
Apr 23, 2017, 9:31:05 PM4/23/17
to pystatsmodels
an issue for discussion, links and notes
https://github.com/statsmodels/statsmodels/issues/3622

Josef

Hans Olav Melberg

unread,
Apr 24, 2017, 7:48:53 AM4/24/17
to pystatsmodels
Yes, the standard synthetic control method involves some new work. It might be easier and perhaps even better to implement the approach mentioned in the working paper by Doudchenko and Imbens (https://arxiv.org/abs/1610.07748 ) since this avoids the assumption of non-negative weights (as well as the assumptions of "sum to one" and "equal in level"). The elastic net regression has also already been implemented in sklearn: http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.ElasticNet.html

Hans Olav
Reply all
Reply to author
Forward
0 new messages