Skip to content

Commit 8f6ca46

Browse files
igerberclaude
andcommitted
Add Goodman-Bacon (2021) paper review
Comprehensive review of "Difference-in-differences with variation in treatment timing" (Journal of Econometrics 225(2), 254-277, DOI: 10.1016/j.jeconom.2021.03.014) targeting the BaconDecomposition methodology-review promotion. Covers: - Theorem 1 decomposition (Eqs. 10a-g) with the three 2x2 comparison types: treated/untreated, earlier/later, later/earlier - Variance terms (Eqs. 7-9) and decomposition weights (Eqs. 10e-g) with explicit superscript-convention note on which group plays the treatment role - Timing-only pair simplification (Eq. 11, μ_kℓ) - Probability-limit decomposition VWATT + VWCT - ΔATT (Eqs. 14a-c, 15) with the VWCT approximation (Eq. 19) — w_k^T and w_k^C formulas written with paper-faithful superscripts (all `k` for treatment-role weights, all `j` for control-role weights) - Linear trend-break wrong-sign case (Eqs. 17-18) - Constant-ATT identification (Eq. 16) - Controlled DD extension (Section 5.2, Eqs. 21-27) - Oaxaca-Blinder-Kitagawa specification-comparison decomposition (Eq. 20) Includes a "Methodology Registry Entry" block formatted to match the REGISTRY.md structure, marked as **proposed** — not yet merged into docs/methodology/REGISTRY.md. The audit-pass PR for diff_diff/bacon.py (tracked in TODO.md "Tech Debt from Code Reviews" → Methodology/ Correctness) carries the REGISTRY replacement plus six concrete follow-up items (verify Theorem 1 / Eqs 10a-g, decide on always- treated handling, R parity fixtures, methodology test file, REGISTRY replacement, METHODOLOGY_REVIEW.md status flip). Documents two library-vs-paper deviations explicitly: 1. Unbalanced panels: paper Appendix A assumes balanced panels; diff_diff/bacon.py:491-499 accepts unbalanced panels with a UserWarning. The decomposition is exact only on balanced panels. 2. Always-treated unit U-bucketing: paper footnote 11 puts always- treated units (t_i < 1) into U alongside never-treated; diff_diff/ bacon.py:437-439 documents only first_treat ∈ {0, np.inf} as the U sentinels, and bacon.py:504-507 implements only that mask. Genuinely always-treated units (0 < first_treat <= min(time), per docs/troubleshooting.rst:739-747) are not automatically remapped. The audit needs to decide how to handle this gap. Adds a TODO.md row under Methodology/Correctness tech debt for the BaconDecomposition methodology-audit follow-up, listing the six items the audit needs to address. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent e67bbc0 commit 8f6ca46

2 files changed

Lines changed: 334 additions & 0 deletions

File tree

TODO.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ Deferred items from PR reviews that were not addressed before merge.
7474

7575
| Issue | Location | PR | Priority |
7676
|-------|----------|----|----------|
77+
| BaconDecomposition: substantive methodology audit pass against Goodman-Bacon (2021). Paper review on file at `docs/methodology/papers/goodman-bacon-2021-review.md` includes a proposed Methodology Registry Entry, but the `REGISTRY.md` `## BaconDecomposition` section (lines ~2598-2654) still carries the older contract. Audit pass needs to (a) verify `bacon.py` matches Theorem 1 / Eqs. 10a-g exactly, (b) decide how to handle genuinely always-treated units (`0 < first_treat <= min(time)`) — paper convention puts them in `U`, but `bacon.py` currently treats only `first_treat ∈ {0, np.inf}` as the `U` bucket, (c) generate R parity fixtures via `bacondecomp::bacon()`, (d) write `tests/test_methodology_bacon.py`, (e) replace the REGISTRY entry with the proposed text, (f) populate Verified Components / Corrections Made / Deviations in `METHODOLOGY_REVIEW.md` and flip status to Complete. | `diff_diff/bacon.py`, `docs/methodology/REGISTRY.md`, `tests/test_methodology_bacon.py`, `METHODOLOGY_REVIEW.md` | follow-up | Medium |
7778
| dCDH: Phase 1 per-period placebo DID_M^pl has NaN SE (no IF derivation for the per-period aggregation path). Multi-horizon placebos (L_max >= 1) have valid SE. | `chaisemartin_dhaultfoeuille.py` | #294 | Low |
7879
| dCDH: Survey cell-period allocator's post-period attribution is a library convention, not derived from the observation-level survey linearization. MC coverage is empirically close to nominal on the test DGP; a formal derivation (or a covariance-aware two-cell alternative) is deferred. Documented in REGISTRY.md survey IF expansion Note. | `chaisemartin_dhaultfoeuille.py`, `docs/methodology/REGISTRY.md` | #408 | Medium |
7980
| dCDH: Parity test SE/CI assertions only cover pure-direction scenarios; mixed-direction SE comparison is structurally apples-to-oranges (cell-count vs obs-count weighting). | `test_chaisemartin_dhaultfoeuille_parity.py` | #294 | Low |

0 commit comments

Comments
 (0)