Skip to content

PR-A: WooldridgeDiD primary-source review (Wooldridge 2025 EmpEcon)#484

Merged
igerber merged 6 commits into
mainfrom
feature/wooldridge-2025-review-pr-a
May 22, 2026
Merged

PR-A: WooldridgeDiD primary-source review (Wooldridge 2025 EmpEcon)#484
igerber merged 6 commits into
mainfrom
feature/wooldridge-2025-review-pr-a

Conversation

@igerber
Copy link
Copy Markdown
Owner

@igerber igerber commented May 21, 2026

Summary

  • Adds the primary-source methodology review for WooldridgeDiD (ETWFE) at docs/methodology/papers/wooldridge-2025-review.md (single new file, 771 lines).
  • Covers Wooldridge (2025) Empirical Economics 69(5), 2545-2587 Sections 2 (TWFE foundation), 3 (two-way Mundlak + Theorem 3.1 Mundlak ≡ TWFE / Corollary 3.2 RE ≡ POLS), 4 (staggered identification + Procedure 4.1 cohort imputation), 5 (POLS / extended TWFE + Propositions 5.1 / 5.2 equivalence chain), 6 (event study + pre-trend tests), 7 (aggregation — Eq. 7.2-7.4 cohort-share weights), 8 (heterogeneous cohort-specific trends), 10 (extensions). Cross-links the existing docs/methodology/papers/wooldridge-2023-review.md for nonlinear extensions (logit / Poisson / ASF), which Wooldridge (2025) defers to (p. 2554).
  • Identifies a new untracked methodology finding: the existing REGISTRY ## WooldridgeDiD (ETWFE) § Aggregations Note documents only the Eqs. 7.2-7.4 simple-overall cell-vs-cohort-share weighting deviation; the same deviation extends to the Eq. 7.6 event-time path via aggregate("event") but is not yet in REGISTRY or TODO. Documented in the review's Deviations § "Untracked findings" subsection; lifting it into REGISTRY + TODO is intentionally deferred to the follow-up PR.
  • First of two PRs for the WooldridgeDiD (ETWFE) methodology-review-tracker promotion. The follow-up PR (methodology test file + R etwfe parity + implementation fixes if any + tracker promotion consolidation) will land after this paper review.

Methodology references (required if estimator / math changes)

  • Method name(s): WooldridgeDiD (ETWFE) — OLS / Mundlak / POLS-on-cohort-dummies / aggregation (simple, group, calendar, event-time) / event study / heterogeneous-trends Section 8.
  • Paper / source link(s):
    • Wooldridge, J. M. (2025). Two-way fixed effects, the two-way mundlak regression, and difference-in-differences estimators. Empirical Economics, 69(5), 2545-2587. https://doi.org/10.1007/s00181-025-02807-z
    • Wooldridge, J. M. (2023). Simple approaches to nonlinear difference-in-differences with panel data. The Econometrics Journal, 26(3), C31-C66. https://doi.org/10.1093/ectj/utad016 (secondary source; review already on disk).
  • Any intentional deviations from the source (and why): No new deviations introduced. The review documents an existing library deviation (cell-level n_{g,t} aggregation weights vs the paper's cohort-share ω̂_g weights at Eq. 7.2-7.4; already tracked) and a NEW untracked extension of the same deviation under Eq. 7.6 event-time. Both are tagged in the Deviations section but no REGISTRY / TODO surfaces are modified in this PR; consolidation is deferred to the follow-up PR.

Validation

  • Tests added/updated: No test changes. This is a documentation-only PR.
  • Backtest / simulation / notebook evidence (if applicable): N/A — paper review only.

Security / privacy

  • Confirm no secrets/PII in this PR: Yes

Adds the primary-source methodology review for Wooldridge, J. M.
(2025). Two-way fixed effects, the two-way mundlak regression,
and difference-in-differences estimators. Empirical Economics,
69(5), 2545-2587. DOI 10.1007/s00181-025-02807-z.

Covers Sections 2 (TWFE foundation), 3 (two-way Mundlak + Theorem
3.1 / Corollary 3.2), 4 (staggered identification + Procedure 4.1
cohort imputation), 5 (POLS / extended TWFE + Propositions 5.1 / 5.2
equivalence chain), 6 (event study), 7 (aggregation — Eq. 7.2-7.4
cohort-share weights), 8 (heterogeneous cohort-specific trends),
and 10 (extensions). Cross-links the existing 2023 secondary
review for nonlinear extensions (logit / Poisson / ASF).

Deviations section separates documented deviations (Eqs. 7.2-7.4
simple-overall aggregation already tracked in REGISTRY + TODO; R /
Stata small-sample-correction items) from untracked findings (Eq. 7.6
event-time aggregation extension of the simple-overall deviation —
new finding from this review, not yet in REGISTRY or TODO).

First of two PRs for the WooldridgeDiD (ETWFE) methodology-review-
tracker promotion. The second PR (methodology test file + R `etwfe`
parity + implementation fixes if any + tracker promotion
consolidation) will follow.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

Overall Assessment

⚠️ Needs changes

Executive Summary

  • P1 Methodology: the new review correctly identifies that Wooldridge 2025 uses cohort-share weights for both overall aggregation (Eq. 7.4) and exposure-time aggregation (Eq. 7.6), but the PR explicitly leaves the Eq. 7.6 event-time deviation out of docs/methodology/REGISTRY.md, so the repo still has an undocumented methodology deviation in its authoritative surface. (link.springer.com)
  • The code evidence matches the review’s claim: diff_diff/wooldridge.py:L723-L753 stores _gt_weights as raw cell counts, and diff_diff/wooldridge_results.py:L150-L166 reuses those same weights for aggregate("event").
  • Existing registry coverage is narrower: docs/methodology/REGISTRY.md:L1489-L1500 documents the simple-overall Eq. 7.2-7.4 mismatch, but not the Eq. 7.6 event-time path.
  • Minor docs issue: docs/methodology/papers/wooldridge-2025-review.md:L769-L771 points readers to WooldridgeResults, but the actual class is diff_diff/wooldridge_results.py:L15-L20 WooldridgeDiDResults.
  • No performance or security concerns in scope; this is a docs-only diff.

Methodology

  • P1
    Impact: docs/methodology/papers/wooldridge-2025-review.md:L607-L630 says the Eq. 7.6 event-time weighting deviation is a new finding “NOT yet tracked.” That matches both the implementation and the current Registry state: diff_diff/wooldridge.py:L723-L753 builds cell-count weights, diff_diff/wooldridge_results.py:L150-L166 uses them for event aggregation, and docs/methodology/REGISTRY.md:L1489-L1500 only documents the simple-overall Eq. 7.2-7.4 deviation. Under the review rubric, that remains an undocumented methodology deviation, not deferrable TODO-only debt. (link.springer.com)
    Concrete fix: add an explicit **Note:** / deviation note under ## WooldridgeDiD (ETWFE) in docs/methodology/REGISTRY.md stating that aggregate("event") currently uses cell-count n_{g,t} weights instead of Wooldridge 2025 Eq. 7.6’s exposure-time cohort-share weights N_g / (N_q + ... + N_{T-e}); update TODO.md:L94-L97 at the same time so the deferred implementation item names the event path too.

Code Quality

No findings in scope.

Performance

No findings in scope.

Maintainability

No findings beyond the documentation cross-reference issue below.

Tech Debt

No additional deferrable tech-debt findings. The blocker above is methodological and needs Registry documentation rather than TODO-only tracking.

Security

No findings in scope.

Documentation/Tests

  • P3
    Impact: docs/methodology/papers/wooldridge-2025-review.md:L769-L771 references a non-existent WooldridgeResults symbol. That will misdirect future reviewers who grep from the paper review into the implementation.
    Concrete fix: rename the reference to WooldridgeDiDResults to match diff_diff/wooldridge_results.py:L15-L20.

Path to Approval

  1. Update docs/methodology/REGISTRY.md so the WooldridgeDiD Aggregations note explicitly documents the Eq. 7.6 event-time weighting deviation.
  2. Widen the existing Wooldridge TODO row in TODO.md:L94-L97 (or add a second row) so the tracked follow-up names both the simple and event aggregation paths.
  3. Fix WooldridgeResultsWooldridgeDiDResults in the new review.

CI audit found the Eq. 7.6 event-time aggregation deviation was a real
methodology mismatch not yet documented in REGISTRY/TODO. Both `simple`
and `event` aggregations reuse the same `_gt_weights` cell-count
array, so the deviation form is identical across paths.

- REGISTRY § Aggregations Note: extend the cell-vs-cohort-share text
  to name both Eq. 7.4 (simple-overall) and Eq. 7.6 (event-time)
- TODO.md row 95: widen the deferred `weights="cohort_share"`
  follow-up to cover both paths in one parameter addition
- Wooldridge 2025 review: consolidate the prior split (documented vs
  untracked) into a single Deviations entry covering both paths now
  that REGISTRY documents both; fix WooldridgeResults reference

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

🔁 AI review rerun (requested by @igerber)

Head SHA: 5e07796aa605078278cbdde5fd445c1d5a039190


Overall Assessment

✅ Looks good

Executive Summary

  • Re-review result: the prior P1 is resolved. docs/methodology/REGISTRY.md:L1490-L1499 now documents the Wooldridge (2025) Eq. 7.6 event-time weighting deviation, consistent with _gt_weights construction and reuse in diff_diff/wooldridge.py:L721-L753 and diff_diff/wooldridge_results.py:L150-L166.
  • The deferred implementation work is now properly tracked in TODO.md:L95 across both simple and event aggregation paths, so the remaining difference from Wooldridge (2025) is documented/tracked rather than silent.
  • The prior WooldridgeResults reference issue appears fixed; the new review now points to WooldridgeDiDResults at docs/methodology/papers/wooldridge-2025-review.md:L754-L762, matching diff_diff/wooldridge_results.py:L15-L20.
  • One minor P3 docs issue remains: the new review describes accepted REGISTRY deviation labels too narrowly at docs/methodology/papers/wooldridge-2025-review.md:L614-L618, even though this PR’s own mitigation uses a plain **Note:** in docs/methodology/REGISTRY.md:L1495.

Methodology

  • Severity: P3 informational. Impact: The affected method is WooldridgeDiD (ETWFE) aggregation weighting. The existing cell-count weighting deviation is now explicitly documented in the authoritative Registry for both the simple-overall and event-time paths, and that documentation matches the current implementation. docs/methodology/REGISTRY.md:L1490-L1499, diff_diff/wooldridge.py:L721-L753, diff_diff/wooldridge_results.py:L150-L166. Concrete fix: None required for approval.

Code Quality

  • No findings.

Performance

  • No findings.

Maintainability

  • No findings.

Tech Debt

  • Severity: P3 informational. Impact: TODO.md:L95 now tracks the deferred cohort-share implementation across both affected aggregation paths, so the remaining gap is properly recorded as tech debt rather than left untracked. Concrete fix: None required for approval.

Security

  • No findings.

Documentation/Tests

  • Severity: P3. Impact: The new paper review says documented deviations are recognized via **Note (deviation from R/Stata):** or **Deviation from R:**, but this repo’s review rubric also accepts plain **Note:**, and this PR’s own mitigation relies on plain **Note:** at docs/methodology/REGISTRY.md:L1495. That mismatch could mislead future reviewers about what counts as a documented deviation. docs/methodology/papers/wooldridge-2025-review.md:L614-L618, docs/methodology/REGISTRY.md:L1495. Concrete fix: Reword that sentence to include plain **Note:** or simply say “a labeled note/deviation entry in REGISTRY.md.”
  • No additional findings. The prior class-name reference issue appears resolved at docs/methodology/papers/wooldridge-2025-review.md:L754-L762, consistent with diff_diff/wooldridge_results.py:L15-L20.

CI R2 P3 (documentation): the review's intro to its Deviations
section listed only `**Note (deviation from R/Stata):**` and
`**Deviation from R:**` as accepted REGISTRY label forms, but the
plain `**Note:**` form is also accepted (and is what the corresponding
REGISTRY:1495 aggregation note uses).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

🔁 AI review rerun (requested by @igerber)

Head SHA: 5943f2225439643f87a9ef44bf8fbf020968d631


Overall Assessment

✅ Looks good

Executive Summary

  • Prior re-review issue resolved: the new review now explicitly recognizes plain **Note:** as a valid REGISTRY deviation label at docs/methodology/papers/wooldridge-2025-review.md:L614-L616.
  • The previously untracked Wooldridge aggregation deviation is now properly mitigated for both simple and event: docs/methodology/REGISTRY.md:L1489-L1499 and TODO.md:L95-L95 now match the implementation’s shared _gt_weights path in diff_diff/wooldridge.py:L740-L754 and diff_diff/wooldridge_results.py:L150-L165, while the paper’s target weights are cohort-share based in Eq. 7.4 and Eq. 7.6. (link.springer.com)
  • No new P1+ issues found in code or methodology tracking.
  • Two minor P3 docs issues remain in the new review file: one overstates when the paper-vs-implementation weighting difference appears, and one uses weighting= even though the tracked follow-up uses weights=.

Methodology

  • Severity: P3. Impact: docs/methodology/papers/wooldridge-2025-review.md:L614-L618 overstates when the paper’s cohort-share weights differ from the implementation, saying the gap appears in “imbalanced or staggered panels with heterogeneous cohort sizes.” By inference from Eq. 7.4 and Eq. 7.6, a balanced staggered panel with no missing cells still matches exactly because the implementation’s per-cell counts reduce to N_g within each available cell; unequal cohort sizes alone do not create a mismatch. That wording could mislead future reviewers into treating ordinary balanced staggered designs as methodology deviations when they are not. diff_diff/wooldridge.py:L740-L754, diff_diff/wooldridge_results.py:L150-L165. (link.springer.com) Concrete fix: Reword the sentence to say the gap appears when post-treatment cell counts vary within cohort or exposure horizon, e.g. unbalanced panels, missing cells, or filtered cells.

Code Quality

  • No findings.

Performance

  • No findings.

Maintainability

  • No findings.

Tech Debt

  • No findings. The deferred cohort-share implementation is now explicitly tracked for both aggregation paths in TODO.md:L95-L95, so the remaining gap is mitigated under the review rules.

Security

  • No findings.

Documentation/Tests

  • Severity: P3. Impact: docs/methodology/papers/wooldridge-2025-review.md:L723-L725 proposes a future weighting="cohort_share" / weighting="cell" API, but the tracked follow-up in TODO.md:L95-L95 and TODO.md:L203-L203 uses weights="cohort_share". This is minor, but it can create avoidable churn in the follow-up implementation/docs PR. Concrete fix: Align the review text with the tracked TODO API name, or rename both together if weighting= is the intended public keyword.
  • No test-gap finding. This PR is documentation-only.

CI R3 P3 (methodology): the prior wording said the cell-vs-cohort-share
gap appears in "imbalanced or staggered panels with heterogeneous cohort
sizes." Codex correctly notes that balanced staggered panels with
uniform within-cohort cell counts still match exactly (cell-count
reduces to N_g per cell, recovering the cohort-share form). Rewording
to "post-treatment cell counts vary within cohort or exposure horizon"
captures the actual divergence trigger (unbalanced panels, missing
cells, sample-filter drops).

CI R3 P3 (documentation): align the review's `weighting="cohort_share"`
prose with the TODO row's tracked API name `weights="cohort_share"`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

🔁 AI review rerun (requested by @igerber)

Head SHA: 3a6853ebf24254e2b3e6286eb87edaff0c372a0d


Overall Assessment

✅ Looks good

Executive Summary

  • Prior re-review blockers remain resolved: the Wooldridge aggregation-weight deviation is now documented for both simple and event in docs/methodology/REGISTRY.md:L1489-L1499, and the deferred follow-up is tracked in TODO.md:L95-L95.
  • That tracking matches the implementation path: _gt_weights is built once in diff_diff/wooldridge.py:L740-L754 and reused by aggregate("event") in diff_diff/wooldridge_results.py:L150-L165.
  • No new P1+ methodology, inference, assumption-check, default-behavior, or edge-case issues are introduced by this docs/TODO-only PR.
  • One minor P3 methodology-doc wording issue remains in the new review: it assigns a fixed direction to the cohort-share vs. cell-count weighting gap, but that direction depends on where post-treatment cells are sparse or missing.
  • No code quality, performance, maintainability, security, or testing blockers.

Methodology

  • Severity: P3. Impact: docs/methodology/papers/wooldridge-2025-review.md:L616-L618 says the paper’s cohort-share form “down-weights short-exposure cohorts ... relative to the cell-count scheme when those conditions hold.” Given the paper formulas summarized at docs/methodology/papers/wooldridge-2025-review.md:L388-L418 and the implementation’s realized-cell weighting path in diff_diff/wooldridge.py:L740-L754 plus diff_diff/wooldridge_results.py:L150-L165, that direction is not fixed: cell-count weighting can either over- or under-weight a short-exposure cohort depending on which (g,t) cells fall below N_g. Concrete fix: rephrase that sentence to say only that the schemes diverge when realized post-treatment cell counts depart from the cohort-share formulas, without asserting a universal down-weighting direction.

Code Quality

  • No findings.

Performance

  • No findings.

Maintainability

  • No findings.

Tech Debt

  • Severity: P3-informational. Impact: the previously untracked event-time weighting deviation is now explicitly mitigated in docs/methodology/REGISTRY.md:L1489-L1499 and TODO.md:L95-L95, aligned with the shared _gt_weights path. Concrete fix: none required in this PR.

Security

  • No findings.

Documentation/Tests

  • No findings. This is a docs/TODO-only diff; no additional tests are required for approval.

CI R4 P3 (methodology): the prior wording asserted the paper's
cohort-share form universally "down-weights short-exposure cohorts
relative to the cell-count scheme." That direction isn't universal —
it depends on which post-treatment cells are sparse, missing, or
filtered. Replace with a direction-agnostic statement and keep the
mechanical contrast between Eq. 7.4's exposure-multiplier denominator
and the cell-count scheme.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

🔁 AI review rerun (requested by @igerber)

Head SHA: b096838416ddf43bc3d03d94454015cde5012dd8


Overall Assessment

✅ Looks good

Executive Summary

  • Prior re-review item is resolved: the new review no longer assigns a fixed direction to the cohort-share vs. cell-count weighting gap and now correctly states that the direction depends on where sparse or missing post-treatment cells occur, docs/methodology/papers/wooldridge-2025-review.md:L618-L618.
  • The previously untracked Wooldridge (2025) event-time weighting deviation is now explicitly documented in docs/methodology/REGISTRY.md:L1490-L1499 and tracked in TODO.md:L95-L95.
  • That documentation matches the implementation: _gt_weights is built from realized (g,t) cell counts in diff_diff/wooldridge.py:L740-L754 and reused by the event aggregation path in diff_diff/wooldridge_results.py:L88-L165.
  • No new P1+ methodology, inference, assumption-check, control-group, or NaN/Inf issues are introduced by this docs/TODO-only PR.
  • One minor P3 documentation nit remains: the Gaps and Uncertainties ordered list skips item 3, docs/methodology/papers/wooldridge-2025-review.md:L725-L729.

Methodology

  • Severity: P3-informational. Impact: The PR properly mitigates the previously untracked Wooldridge 2025 aggregation-weight deviation by adding a labeled REGISTRY note and a matching TODO entry, and the note matches the real shared-weight code path in diff_diff/wooldridge.py:L740-L754 and diff_diff/wooldridge_results.py:L88-L165. Concrete fix: none required.

Code Quality

  • No findings.

Performance

  • No findings.

Maintainability

  • No findings.

Tech Debt

  • Severity: P3-informational. Impact: The remaining aggregation-weight implementation gap is now properly tracked in the accepted review-debt ledger at TODO.md:L95-L95, so it is not a blocker for this documentation PR. Concrete fix: none required in this PR.

Security

  • No findings.

Documentation/Tests

  • Severity: P3. Impact: The ordered list under ## Gaps and Uncertainties jumps from 2. to 4., which makes the new methodology review read like an incomplete edit and slightly reduces readability, docs/methodology/papers/wooldridge-2025-review.md:L725-L729. Concrete fix: renumber that list so it is contiguous.

CI R5 P3 (documentation): the ordered list jumped from 2 to 4 after
the R2 removal of a stale Section 8 coverage gap entry. Renumber
4-14 → 3-13 so the list reads as a complete, contiguous edit.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

🔁 AI review rerun (requested by @igerber)

Head SHA: 27acfc362f4290569c609d79fd964790fc6353f6


Overall Assessment

✅ Looks good

Executive Summary

  • Re-review scope: the prior documentation nit is resolved; the Gaps and Uncertainties list is now contiguous in docs/methodology/papers/wooldridge-2025-review.md:L725-L749.
  • The previously untracked Wooldridge (2025) event-time weighting deviation is now explicitly documented in docs/methodology/REGISTRY.md:L1490-L1499 and tracked in TODO.md:L95-L95.
  • That documentation matches the implementation: realized (g,t) cell-count weights are built in diff_diff/wooldridge.py:L730-L754 and reused by aggregate("event") in diff_diff/wooldridge_results.py:L88-L165.
  • No new unmitigated P0/P1 methodology, inference, assumption-check, control-group, or NaN/Inf issues are introduced by this docs/TODO-only PR.

Methodology

  • Severity: P3-informational. Impact: The only load-bearing methodology gap in scope is the known cohort-share vs. cell-count aggregation deviation, and this PR now documents it for both the simple-overall and event-time paths, aligning the paper review, registry, TODO tracking, and code. Concrete fix: none required in this PR. docs/methodology/REGISTRY.md:L1490-L1499, docs/methodology/papers/wooldridge-2025-review.md:L614-L621, TODO.md:L95-L95, diff_diff/wooldridge.py:L730-L754, diff_diff/wooldridge_results.py:L88-L165

Code Quality

  • No findings.

Performance

  • No findings.

Maintainability

  • No findings.

Tech Debt

  • Severity: P3-informational. Impact: The remaining weights="cohort_share" implementation work is explicitly tracked in the accepted review-debt ledger, so it is non-blocking for this PR. Concrete fix: none required here; follow the tracked TODO item. TODO.md:L95-L95

Security

  • No findings.

Documentation/Tests

  • No findings. This is a documentation-only PR, and the prior numbering issue has been corrected in docs/methodology/papers/wooldridge-2025-review.md:L725-L749.

@igerber igerber added the ready-for-ci Triggers CI test workflows label May 22, 2026
@igerber igerber merged commit e416aed into main May 22, 2026
11 of 12 checks passed
@igerber igerber deleted the feature/wooldridge-2025-review-pr-a branch May 22, 2026 11:40
igerber added a commit that referenced this pull request May 22, 2026
Closes the WooldridgeDiD (ETWFE) methodology-review-tracker
promotion in METHODOLOGY_REVIEW.md (In Progress → Complete),
following the primary-source review for Wooldridge (2025) merged
in PR-A (#484). Adds two paper-driven implementation surfaces and
extends R-parity goldens to the nonlinear paths.

Implementation:
- `aggregate(weights="cohort_share")` on WooldridgeDiDResults
  implements paper Eqs. 7.4 (simple-overall) and 7.6 (event-time,
  restricted to k>=0) cohort-share aggregation weights as an
  opt-in alternative to the default cell-count weighting
  (matching Stata `jwdid_estat`). Inference fields fail-closed to
  NaN with UserWarning per paper Section 7.5 conditional-on-shares
  semantics; raises on `survey_design` (design-consistent totals
  deferred); raises on `type ∈ {"group","calendar"}` (no paper
  closed-form); raises on bootstrap fits (no matching bootstrap
  variant). Closes TODO row 95.
- `cohort_trends=True` on `WooldridgeDiD.__init__` adds linear
  `dg_i · t` cohort-specific trend interactions (paper Section 8
  / Eq. 8.1) for the OLS path. Rejects on logit/poisson per
  paper Section 8 OLS scope; rejects on survey_design pending
  full-dummy/TSL validation; enforces per-cohort pre-period
  identification check (≥ 2 observed pre-periods per treated
  cohort). Auto-routes to full-dummy mode regardless of
  vcov_type. Closes the PR-A Requirements Checklist
  heterogeneous-trends gap.

Tests:
- `tests/test_methodology_wooldridge.py` extended with 6
  paper-equation-numbered methodology classes (Theorem 3.1,
  Proposition 5.1, Section 6 event study, Section 7 aggregation
  paths, Section 8 heterogeneous trends, Section 10 unbalanced
  panels) + `TestW2025LibraryDeviations` consolidating 5 surviving
  deviations. Mirrors the HAD PR #473 precedent.
- Two new R-parity surface classes (`TestWooldridgeParityRPoisson`,
  `TestWooldridgeParityRLogit`) lock the structural surface
  against R `etwfe(family=...)` log-link goldens.
- 209 tests total (60 methodology + 149 R-parity + unit
  regressions).

R Goldens:
- `benchmarks/R/generate_wooldridge_golden.R` extended with
  Poisson + logit DGPs via R `etwfe`; augmented panel CSV
  retains the same seed-generated `y_pois` + `y_logit` columns
  for cross-language reproducibility.
- `benchmarks/R/requirements.R` pins `etwfe >= 0.5.0`.

Tracker promotion:
- METHODOLOGY_REVIEW.md L52 status flip with merge date; detail
  section L583-605 rewritten to the Verified Components / Test
  Coverage / Corrections Made / Deviations / Outstanding
  Concerns template mirroring HAD / ContinuousDiD / DCDH. L27
  example re-pointed; priority queue items #7-#10 renumbered to
  #6-#9.
- REGISTRY.md `## WooldridgeDiD (ETWFE)` extended with
  `### Deviations from the paper / from R / library extensions`
  block consolidating 7 surviving deviations + opt-in notes for
  cohort_share + cohort_trends + survey rejection + bootstrap
  cohort_share rejection contracts.
- CHANGELOG.md `[Unreleased]` `### Added` documents the new
  parameters, R-parity extension, and tracker flip.
- `docs/methodology/papers/wooldridge-2025-review.md`
  Requirements Checklist + Gaps & Uncertainties items 1 + 11
  marked `**Status:** Closed in PR-B`.
- `docs/api/wooldridge_etwfe.rst` updated with weighting-scheme
  notes alongside the existing aggregation table.

Second of two PRs for the WooldridgeDiD methodology-review-tracker
promotion. PR-A merged at e416aed (#484).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-ci Triggers CI test workflows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant