causal

Introduction to the Synthetic Control Method in Python with mlsynth

How much did Proposition 99, the 1989 California tobacco program, reduce cigarette sales? This beginner Python tutorial teaches the synthetic control method, which builds a look-alike California from other states, finds about 19 fewer packs sold per person each year, and then tries hard to break that result. It comes with an interactive app that runs in your web browser.

The FWL Theorem: Making Multivariate Regressions Intuitive

What does it really mean to control for another factor in a regression? This Python tutorial uses a simulated fast food coupon campaign to show that any such result can be rebuilt by first removing what the other factors explain and then plotting what is left in a simple two-variable chart. It comes with an interactive app that runs in your web browser.

scspill

Did a policy really work if it also affected the comparison regions? scspill, a Python package, estimates both the true effect and the spillover to them.

Covariates in Difference-in-Differences: The LaLonde Test in Python

Can we still find the true effect of a job training program on earnings if we compare trainees with ordinary survey respondents instead of a randomized control group? This Python tutorial shows that adding background characteristics fixes the estimate only when they adjust the expected earnings trend of the comparison group. It comes with an interactive app that runs in your web browser.

Do Industrial Parks Work? Evaluating Place-Based Policy in Ethiopia with Difference-in-Differences

Do industrial parks bring more economic activity to nearby towns, and who benefits? This Python tutorial compares places that got a park with places that did not, before and after it opened, using simulated data modeled on Ethiopia, and also looks at household welfare and outcomes for women. It comes with an interactive app that runs in your web browser.

Bouncing Back Better? Evaluating the Economic Impact of the Aceh Tsunami

How did the 2004 tsunami affect the economy of Aceh, Indonesia, over the long run? This beginner-friendly Python tutorial uses simulated data, nighttime lights, and several causal methods to compare damaged and undamaged areas before and after the disaster.

Staggered Synthetic Difference-in-Differences (SDID) in Stata: Gender Quotas and Women in Parliament

Do gender quotas raise the share of women in national parliaments? In Stata, we compare 9 countries that adopted quotas in different years with look-alike groups built from 110 countries without quotas, and find an average gain of about 8 percentage points that varies a lot across countries. The tutorial includes an interactive app that runs in your web browser.

Synthetic Difference-in-Differences (SDID) in Stata: Re-evaluating California's Proposition 99

Did the 1988 tobacco tax in California reduce smoking? In Stata, we compare three ways of building a comparison for California from other states, including a newer method that blends their strengths, and all three agree that cigarette sales fell, though by different amounts. It comes with an interactive app that runs in your web browser.

Double LASSO in Python: Does Abortion Reduce Crime?

Python companion to the R and Stata Double LASSO tutorials — same data, same five estimators, plus a hands-on introduction to the DoubleML library (DoubleMLPLR, DoubleMLIRM, and learner-robustness across LASSO, RandomForest, XGBoost).

Double LASSO in Stata: Does Abortion Reduce Crime?

Stata companion to the R Double LASSO tutorial — same data, same five estimators, replicating the Belloni-Chernozhukov-Hansen 284-control extension of Donohue and Levitt's abortion-and-crime panel with pdslasso, rlasso, and cvlasso.