EfficientDiD methodology validation (PR-B): sieve outcome-regression upgrade + Verified Components#521
Conversation
|
Overall Assessment Executive Summary
Methodology
No other source-material mismatches stood out in the changed estimator math. The REGISTRY-documented deviations ( Code Quality
Performance
Maintainability
Tech Debt
Security
Documentation/Tests
Path to Approval
Verification note: this was a static review only. I could not run the Python test suite in the current environment because the project dependencies are not installed here. |
|
🔁 AI review rerun (requested by @igerber) Head SHA: Overall Assessment ⛔ Blocker Executive Summary
Methodology
Code Quality No findings. Performance
Maintainability No findings. Tech Debt
Security No findings. Documentation/Tests
Path to Approval
Static review only. I could not execute the estimator or test suite in this environment because the Python dependencies here are not installed ( |
|
🔁 AI review rerun (requested by @igerber) Head SHA: Overall Assessment ✅ Looks good Executive Summary
Methodology
Code Quality
Performance
Maintainability
Tech Debt
Security
Documentation/Tests
|
…upgrade + zero-weight-invariant nuisance selectors Source-validation pass for Chen, Sant'Anna & Xie (2025, arXiv:2506.17729v1); promotes the METHODOLOGY_REVIEW.md row to Complete. - Covariate doubly-robust outcome regression m_hat(X): linear OLS -> growing polynomial sieve (dimension-penalized AIC/BIC, no fixed K<=5 ceiling), so the covariate path attains the semiparametric efficiency bound under Assumption C.1; the K<=5 cap is removed from the two pre-existing propensity sieves too. - Theorem A.1 Hausman statistic extracted into a behavior-preserving _hausman_quadratic_form helper; criterion guard on estimate_outcome_regression. - Zero-weight (survey-subpopulation / padded) rows are now fully inert for the DR point estimate: all three sieve order-selectors key off the positive-weight support (n_pos = sum(w>0)) for auto-k_max / the n_basis cap / the IC sample-size terms, and the auto Silverman bandwidth for the kernel Omega*(X) is evaluated on the positive-weight support (this last only bites overidentified H>1 cells where Omega* feeds the efficient weights). Both were CI-codex P0s, both fail-under-bug verified. - New tests/test_methodology_efficient_did.py: paper-equation Verified Components (weights, generated-outcome telescoping, no-cov closed form, PT-Post=CS, SE, Hausman) + growing-sieve / propensity K>5 / zero-weight invariance (just- identified H=1 sieve-order AND overidentified H>1 kernel-bandwidth). - HRS Table 6 anchor tightened 0.1*SE -> 0.05*SE + data license / 656-vs-652 docs; REGISTRY / CHANGELOG / paper-review / docstrings reconciled to the growing-sieve + positive-weight-support contract; two P3 follow-ups (basis-rebuild cache, survey-vcov zero-weight-PSU DOF correction) tracked in TODO.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
b8ef907 to
f632acb
Compare
|
🔁 AI review rerun (requested by @igerber) Head SHA: Overall Assessment ✅ Looks good Executive Summary
Methodology
Code Quality
Performance
Maintainability
Tech Debt
Security
Documentation/Tests
|
Summary
METHODOLOGY_REVIEW.mdrow to Complete. (PR-A EfficientDiD methodology review (PR-A): Chen-Sant'Anna-Xie (2025) paper-review fidelity artifact #515 landed the paper-review fidelity artifact; this is the substantive source-vs-code pass.)m̂(X)is upgraded from linear OLS to a growing polynomial sieve (basis-dimension-penalized AIC/BIC, no fixedK≤5ceiling) across all three nuisance sieves, so the covariate path matches Theorem 4.1 / Assumption C.1's growing-sieve regime (dimension ratep_K = comb(K+d,d) = o(n)for low-dimensional covariates) rather than only approximating it.sieve_k_max=1forces every covariate-path sieve to degree 1. The Theorem A.1 Hausman statistic was extracted into a behavior-preserving_hausman_quadratic_formhelper, andestimate_outcome_regressiongained acriterionguard.tests/test_methodology_efficient_did.py(24 tests): paper-equation-numbered Verified Components (Eq 3.5/3.13 weights, Eq 3.9 generated-outcome telescoping, §4.1 no-cov closed form, Cor 3.1/3.2 PT-Post=CS, Thm 4.1 SE, Thm A.1 Hausman incl. the restricted−efficient covariance direction + rank-deficient-V DOF + direction guard) plus growing-sieve / multivariate / weight-scale-invariance / zero-weight-padding / last_cohort-DR coverage.docs/api/efficient_did.rst,docs/choosing_estimator.rst,diff_diff/guides/llms-full.txt, CHANGELOG, and the tracker. HRS Table 6 anchor tightened from 0.1·SE → 0.05·SE, with the openICPSR-116186 data license + 656-vs-652 sample difference documented intests/data/README.md.Methodology references (required if estimator / math changes)
EfficientDiD— covariate doubly-robust path (sieve outcome regression + sieve propensity ratio (Eq 4.1–4.2) + kernel-smoothed Ω*(X)); Hausman PT-All vs PT-Post pretest (Theorem A.1).docs/methodology/papers/chen-santanna-xie-2025-review.md.docs/methodology/REGISTRY.md## EfficientDiD—overall_attcohort-size-weighted vs paperES_avguniform (Eq 2.3, recoverable from event-study output); fixed-weight multiplier bootstrap (the analytical path carries the(G_g−π_g)WIF correction); Hausman effective-rank DOF (=|E|when well-conditioned);vcov_typenarrow to{hc1}(IF-based variance, no single design matrix); polynomial sieve basis + Silverman kernel bandwidth (paper leaves the basis/kernel open); i.i.d.-asymptotics SEs with cluster/survey EIF variants as documented library extensions. The prior linear-OLS efficiency deviation is eliminated by the sieve upgrade. The growing sieve attains the bound for low-dimensional covariates; high-dimensionalXwould call for the paper's ML-nuisance option (Remark 4.2).Validation
tests/test_methodology_efficient_did.py(new),tests/test_efficient_did_validation.py(anchor tightened),tests/data/README.md. Existingtests/test_efficient_did.py/tests/test_survey_phase3.py/tests/test_survey_phase6.pystay green — the cap removal is a no-op for groups under ~3,125 units. Full affected suite: 361 passed (incl. slow) underDIFF_DIFF_BACKEND=python;black/ruffclean on changed code;mypyadds zero errors.Security / privacy
🤖 Generated with Claude Code