Applied Econometrics

14 articles

Matching in Python: a balanced covariate table doesn't make the estimate valid

Propensity-score matching returns 2.21 for a planted effect of 2.0 with a balance table that passes the 0.10 rule. The overlap diagnostic shows 6% of treated units have no comparable control; trimming recovers 2.04.

Jul 2026 · Methodology

Difference-in-differences in Python: why the TWFE coefficient can mislead

With staggered adoption and heterogeneous effects, two-way fixed effects returns 1.01 where the planted average is 1.60, and a group-time estimator with clean controls recovers 1.60.

Jul 2026 · Methodology

Synthetic control in Python: read the pre-fit before the gap

A hands-on walk through synthetic control in Python: why a zero-error pre-treatment fit is the weakest evidence for the gap, and the pre-fit that is allowed to be large is the diagnostic to trust.

Jul 2026 · Methodology

Regression discontinuity in Python: getting the effect at the cutoff right

A global polynomial fit returns a clean, plausible 1.8 where the effect planted at the cutoff is 0.75. A local fit recovers about 0.75. How to estimate a regression discontinuity in Python, and the confounder the local fit still cannot see.

Jul 2026 · Methodology

How to tell whether a double machine learning estimate is right

Double machine learning in Python: why a naive plug-in reads a true effect of 1.0 as 0.55, how cross-fitting recovers 0.97, and the confounder it still cannot detect.

Jul 2026 · Methodology

Using difference-in-differences in practice

When difference-in-differences is the right tool, the three assumptions stated as decisions, and the ways it breaks, each shown in a worked Too Early To Say case with open code.

Jul 2026 · Methodology

Instrumental variables in Python: a strong first stage doesn't make the estimate valid

2SLS recovers a planted effect of 2.0 where OLS reads 2.79, but only if the exclusion restriction holds. A small direct path biases 2SLS to 2.62 while the first-stage F stays 2051, uncatchable in-sample.

Jun 2026 · Methodology

How do we know an AI's estimator does what we meant?

AI-generated econometric code can run without error and still be wrong. A routine to verify it: spec the low-visibility choices, plant a known truth, and read the code against its source.

Jun 2026 · Methodology

When a policy reaches only a few units: rolling difference-in-differences (lwdid)

Rolling difference-in-differences (lwdid) gives credible effects from one treated unit and a few controls, and with so few units the transformation choice drives the answer.

Jun 2026 · Methodology

Logistic regression beats LLM readouts on survey prediction

On a real survey prediction task, a plain logistic regression beat a language-model activation pipeline, AUC 0.769 vs 0.747; steering changed nothing useful.

Jun 2026 · Methodology

Prediction-powered inference corrects AI survey imputation

Treating AI-imputed survey responses as data understated prevalence threefold; a regression adjustment lets predictions sharpen estimates without harm.

Jun 2026 · Methodology

Steering vectors estimate an average regression gradient

Activation steering approximates an average regression gradient, cosine 0.63 in our data, and classic estimator choices change how hard the vector steers.

Jun 2026 · Methodology

Well-Executed But Not Important: Reading the Record

When AI thins out the technical-flaws desk-rejection pretext, editors will have to learn to say 'well-executed but not important' on the record.

May 2026 · Methodology

Cycling Through Bad Ideas Faster: A Worked Example

How AI-augmented iterative critique compresses the cost of discarding bad ideas in applied research, illustrated through three coding rules, a controls…

May 2026 · Methodology