-
⌥ 3 steps Index: 132 87 peers Double machine learning in Python (econml)
A Python toolkit for heterogeneous treatment effects from observational data — double ML, doubly-robust, orthogonal forests, meta-learners.
Data prep Build the data▼Estimation Fit a Linear Double-ML model▼Inference Read the average effect -
⌥ 3 steps Index: 132 62 peers Causal forests for heterogeneous effects (grf)
Generalized random forests that estimate conditional average treatment effects τ(x) non-parametrically, with valid confidence intervals.
Data prep Assemble X, W, Y▼Estimation Fit a causal forest▼Inference Aggregate to the ATE -
⌥ 2 steps Index: 132 73 peers Randomization inference, packaged (ri2)
Exact Fisher randomization tests and sharp-null confidence intervals for any randomization scheme — the packaged version of the design-based test.
Data prep Declare the randomization▼Inference Conduct randomization inference -
⌥ 3 steps Index: 132 40 peers Simulation-based inference for any model (clarify)
Turn any fitted model into interpretable quantities of interest — average marginal effects, predictions, contrasts — with simulation-based confidence intervals.
Estimation Fit any regression model▼Inference Simulate the coefficient distribution▼Reporting Average marginal effect of treatment -
⌥ 3 steps Index: 132 22 peers IV with heterogeneous effects: the LATE (ivreg)
Two-stage least squares for instrumental-variables regression, with the modern LATE interpretation and rich diagnostics.
Data prep Load data and specify the IV formula▼Estimation Fit the 2SLS / IV model▼Inference Summary with diagnostic tests -
⌥ 4 steps Index: 132 98 peers Bias-corrected nearest-neighbor matching (Matching)
Match treated and control units on covariates, then bias-correct and get the correct large-sample standard errors.
Data prep Fit the propensity score model▼Estimation Bias-adjusted nearest-neighbor matching▼Diagnostic / pre-tests Check covariate balance after matching▼Inference Report the ATT with Abadie-Imbens SE -
⌥ 5 steps Index: 132 48 peers Regression discontinuity, done right (rdrobust)
Estimate causal effects at a cutoff with data-driven optimal bandwidths and bias-corrected, robust confidence intervals.
Data prep Load senate data and inspect the running …▼Diagnostic / pre-tests RD plot around the cutoff▼Diagnostic / pre-tests Data-driven optimal bandwidth▼Estimation Robust bias-corrected RD estimate▼Inference Read the three inference rows -
⌥ 5 steps Index: 132 96 peers Causal mediation analysis (mediation)
Decomposes a treatment effect into the part transmitted through a mediator (ACME) and the rest (direct effect), with sensitivity analysis.
Data prep Load package and data▼Estimation Fit the mediator model▼Estimation Fit the outcome model▼Inference Simulate mediation effects▼Robustness check Sensitivity analysis -
⌥ 4 steps Index: 132 81 peers Ecological inference (ei)
Infers individual-level behavior from aggregate (district-level) data, the classic example being voting rates by race from precinct totals.
Data prep Load ei and prepare the 2x2 margins▼Estimation Fit the ecological inference model▼Inference Summarize aggregate estimates▼Reporting Read out precinct-level betas -
⌥ 5 steps Index: 132 28 peers Coarsened exact matching (CEM)
Temporarily coarsens each covariate into bins, exact-matches treated and controls within bins, then estimates effects on the matched data.
Data prep Load cem and the LeLonde data▼Diagnostic / pre-tests Measure imbalance before matching▼Estimation Coarsen and match with cem()▼Diagnostic / pre-tests Check imbalance after matching▼Inference Estimate the SATT -
⌥ 5 steps Index: 132 53 peers Multiple imputation of missing data (Amelia)
Fills in missing values via fast bootstrap-EM multiple imputation, producing several complete datasets you analyze and combine.
Data prep Load Amelia and the freetrade data▼Estimation Run multiple imputation with m = 5▼Diagnostic / pre-tests Check imputation diagnostics▼Estimation Fit the model on each imputed dataset▼Inference Combine estimates with Rubin's rules -
⌥ 4 steps Index: 132 97 peers Bayesian principal stratification (PStrata)
Bayesian mixture modeling for principal stratification: causal effects within latent strata (e.g. compliers) under post-treatment confounding.
Data prep Specify the principal stratification model▼Estimation Fit the model with MCMC▼Inference Estimate stratum-specific potential outco…▼Inference Contrast treatment effects within strata -
⌥ 3 steps Index: 132 50 peers PS weighting for survival outcomes (PSsurvival)
Propensity-score balancing weights for time-to-event outcomes: counterfactual survival curves, survival differences, and marginal hazard ratios.
Data prep Load package and survival data▼Estimation Run surveff() with overlap weights▼Inference Survival difference with confidence inter… -
⌥ 4 steps Index: 132 27 peers Propensity-score weighting (PSweight)
A full design-and-analysis platform for causal effects via balancing weights (overlap, IPW, ATT, matching, entropy) for binary and multiple treatments.
Data prep Load data and specify the PS model▼Diagnostic / pre-tests Design stage: SumStat() balance check▼Estimation Estimate the ATO with overlap weights▼Inference Summarize pairwise contrasts -
⌥ 4 steps ⑂ 1 branch Index: 195 86 peers Confounder-adjusted survival curves for a treatment (adjustedCurves)
Compare survival between treatment groups after removing confounding — via IPTW, the g-formula or AIPW — instead of a raw Kaplan-Meier that quietly bakes in selection.
Data prep Time-to-event, treatment, confounders Estimation Adjust for confounding (IPTW / g-formula) Inference Curves with confidence bands Reporting Summaries: RMST difference, survival at t -
⌥ 4 steps ⑂ 1 branch Index: 207 93 peers Bayesian regression discontinuity with credible intervals (CausalPy)
Fit a model on each side of the cutoff, put a posterior on the jump, and report a credible interval for the discontinuity — plus an honest look at how it moves with the bandwidth.
Data prep Running variable, threshold, outcome Estimation A Bayesian model each side of the cutoff Inference Posterior & 94% credible interval for the… Robustness check Bandwidth & functional-form sensitivity -
⌥ 4 steps ⑂ 1 branch Index: 207 21 peers Synthetic control, the tidy way — weights, gaps and placebo inference (tidysynth)
Build a synthetic version of the treated unit from a convex blend of donors, read the treated-minus-synthetic gap, and test it against placebos run on every donor.
Data prep Panel, treated unit, donor pool Estimation Solve for donor & predictor weights Reporting Read the gap: observed − synthetic Inference Placebo permutation across donors -
⌥ 4 steps ⑂ 1 branch Index: 207 12 peers Honest sensitivity bounds for parallel-trends violations (HonestDiD)
Stop betting everything on a pre-trends test. Allow the post-treatment trend to deviate within a transparent class, and report the confidence set — and the breakdown value where the effect would vanish.
Data prep Start from event-study coefficients Diagnostic / pre-tests Read the pre-trends, don't just test them Robustness check Bound the deviation: relative magnitudes … Inference Robust confidence set & breakdown value -
⌥ 4 steps ⑂ 1 branch Index: 219 99 peers Heterogeneous effects with causal-forest double ML (EconML)
Double machine learning with a forest final stage: partial out nuisance with flexible learners, then read the conditional effect τ(x) — with valid confidence intervals.
Data prep Split features: effect-modifiers X vs con… Estimation Partial out nuisance (Neyman-orthogonal D… Heterogeneity Forest-weighted local effect τ(x) Inference Confidence intervals for τ(x) -
⌥ 4 steps ⑂ 1 branch Index: 108 22 peers Causal mediation: natural direct & indirect effects (CMAverse)
Split a total effect into what flows through a mediator (indirect) and what doesn't (direct) — with a sensitivity analysis for mediator–outcome confounding.
Data prep Treatment, mediator, outcome, confounders Estimation Fit mediator & outcome models Inference Decompose the total effect Robustness check Sensitivity to mediator–outcome confoundi… -
⌥ 4 steps ⑂ 1 branch Index: 96 21 peers Synthetic difference-in-differences (synthdid)
Reweight both control units and pre-periods to build a synthetic control, then apply a DiD correction — robust where plain SC or TWFE struggle.
Data prep Balanced panel + treated block Estimation Solve for unit & time weights Inference Placebo / jackknife standard errors Reporting Plot trajectories & the gap -
⌥ 4 steps ⑂ 1 branch Index: 96 64 peers Instrumental variables & 2SLS for an endogenous treatment (ivreg)
When treatment is endogenous, an instrument identifies the complier (LATE) effect via two-stage least squares — after you check the instrument is strong.
Data prep Outcome, endogenous treatment, instrument Diagnostic / pre-tests Check instrument strength (first stage) Estimation Two-stage least squares (ivreg) Inference Interpret as a complier effect (LATE) -
⌥ 4 steps ⑂ 1 branch Index: 108 69 peers Design & diagnose a randomized experiment (DeclareDesign)
Specify a study as model–inquiry–data–answer, simulate it, and read its diagnosands — bias, power, coverage — before you run it.
Data prep Declare the model & potential outcomes Estimation Difference-in-means estimator Inference Neyman variance & confidence intervals Diagnostic / pre-tests Diagnose: bias, power, coverage -
⌥ 4 steps ⑂ 1 branch Index: 108 73 peers Dose–response with average potential outcomes (DoubleML APO)
For a multi-valued or continuous treatment: estimate E[Y(d)] at each dose and the contrasts between them, all cross-fitted.
Data prep Declare the multi-valued treatment Estimation Average potential outcome at each level Inference Contrasts between doses Reporting Plot the dose–response curve -
⌥ 4 steps ⑂ 1 branch Index: 120 18 peers Quantile treatment effects of 401(k) eligibility (DoubleML)
Beyond the average: how 401(k) eligibility shifts net financial assets across the whole wealth distribution, estimated orthogonally.
Data prep Build DoubleMLData (net_tfa, e401, X) Estimation Estimate QTEs across the distribution Inference Simultaneous confidence bands Reporting Plot the QTE curve -
⌥ 5 steps ⑂ 1 branch Index: 231 101 peers Difference-in-differences with multiple periods (did)
Staggered-adoption DiD done right: group-time ATT(g,t) → event-study / group / calendar aggregations, with honest pre-trends.
Data prep Build the staggered panel▼▼Inference aggte(type = 'dynamic') Heterogeneity aggte(type = 'group')▼Reporting ggdid() event-study plot -
⌥ 3 steps Index: 96 20 peers Estimating ATEs on a new target population
Train a causal forest on the source sample → reweight AIPW to a target population → report transported ATE.
▼▼Reporting Transported ATE + overlap caveats -
⌥ 5 steps Index: 183 61 peers Policy learning via optimal decision trees
Causal forest → doubly-robust scores → policytree → evaluate policy value → plot the tree.
▼Data prep double_robust_scores()▼Estimation policytree: depth-2 optimal tree▼Inference Evaluate policy value (held-out)▼Reporting Plot the learned decision tree -
⌥ 5 steps ⑂ 1 branch Index: 170 30 peers Causal forest with time-to-event data (survival)
Censoring check → causal survival forest → RMST-scale AIPW ATE → calibration → report.
▼▼Inference [GRF] AIPW average treatment effect Diagnostic / pre-tests test_calibration()▼Reporting RMST difference by subgroup -
⌥ 8 steps ⑂ 1 branch Index: 292 48 peers Heterogeneous treatment effects with a causal forest (GRF recipe)
The full GRF HTE playbook: cross-fit nuisances → causal forest → calibration → AIPW ATE → BLP → RATE → policy.
▼▼Diagnostic / pre-tests test_calibration() Inference [GRF] AIPW average treatment effect Heterogeneity best_linear_projection() Heterogeneity [GRF] Rank-weighted ATE — RATE / AUTOC / …▼Robustness check Policy learning (policytree)▼Reporting CATE histogram + targeting report