docs(methodology): Deaner & Ku (2026) causal duration DiD paper review (PR-A) - #825
docs(methodology): Deaner & Ku (2026) causal duration DiD paper review (PR-A)#825igerber wants to merge 2 commits into
Conversation
Overall assessment: ✅ Looks goodExecutive summary
Methodology
No implemented methodology, weighting, identification, or variance mismatch was found. The affected methods are prospective common-dynamics and proportional-hazards Code Quality
PerformanceNo findings; runtime code is unchanged. Maintainability
Tech DebtNo current implementation debt is introduced. Deferred estimator capabilities are explicitly scoped as future work. SecurityNo secrets, credentials, PII, or executable unlicensed source were added. Documentation/TestsThe required changelog fragment is present and its format passes the changelog compiler. No estimator tests are required for this documentation-only methodology artifact. |
|
🔁 AI review rerun (requested by @igerber) Head SHA: Overall assessment: ✅ Looks goodExecutive summary
Methodology
Code Quality
PerformanceNo findings; runtime code is unchanged. Maintainability
Tech DebtNo findings. Deferred estimator capabilities introduce no current implementation debt. SecurityNo secrets, PII, or unlicensed source code were added. Documentation/TestsThe required changelog fragment is present, and the changelog compiler check passes. No estimator tests are required for this documentation-only artifact. |
Summary
Adds the methodology review for Deaner & Ku, Causal Duration Analysis with Diff-in-Diff
(arXiv 2405.05220v2), as the Step-1 artifact for a prospective
DurationDiDestimator forbinary absorbing-state outcomes (exit from unemployment, passing an exam, divorce, parole
revocation), where parallel trends in mean outcomes generally fails and the paper instead
imposes common-dynamics or proportional-hazards restrictions on counterfactual hazard rates.
Docs-only. No estimator, tests, dependencies, tooling pins or public API change in this PR.
The branch is built on its pinned base;
pyproject.tomland.github/workflows/lint.ymlare byte-identical to that base, so a comparison against a later
mainmay show unrelatedtooling differences (a Ruff point-release bump) that this PR does not introduce.
Files:
docs/methodology/papers/deaner-ku-2026-review.md(new, ~1,300 lines): source-pinnedreview with a prospective registry entry, implementation notes, a tuning-parameter table,
a paper-versus-reference-code fidelity list, the approved first-estimator scope, and a
numbered gaps list.
changelog.d/20260905-duration-did-paper-review.md(new): Documentation fragment.ROADMAP.md: the stale "Causal Duration Analysis with DiD" entry (which cited a 2025conference paper and overstated the method as free of hazard assumptions) is removed from
Long-term Research Directions; the estimator is added under Shipping Next with the
approved first scope.
What the review contains
mean parallel trends generally fails for absorbing outcomes (with its stated exception).
Wooldridge 2023's exponential model), the general linear-restriction framework nesting
triple-difference and synthetic-control analogues.
corrected (notably the proportional-hazards constant in (3.5), for which four candidate
estimators are enumerated and their population limits derived).
pre-treatment specification test, with Algorithms 1 and 2 transcribed verbatim, both
printed forms of the test statistic recorded, and a fully written-out p-value proposal
labelled as a library extension (the paper defines none).
balancing (Section 2.2, Theorem 3), staggered adoption (Appendix A.3), the semiparametric
covariate approach (Appendix A.4, Theorem 4), and the proofs (Appendix E).
oracle (a common-dynamics design; a proportional-hazards fixture is required separately),
and the Austrian unemployment-insurance application numbers as replication targets.
the proportional-hazards parameter domain, zero-denominator and zero-bootstrap-SD
policies, invalid-draw handling per bootstrap family, absorbed-time conversion contract,
time-grid and dtype contracts, and minimum data requirements stated as counts over the
observed grid.
reference-code files at a fixed commit and the three dated web snapshots by URL and
SHA-256, and states the fetch-and-hash commands to rebuild the local cache (which is a
git-excluded working directory, not part of the repository).
p-value, exact-zero-survival, zero-SD, invalid-draw and zero-denominator policies, the
diagnostic range, the proportional-hazards domain check) carries the registry-recognised
- **Note:**label, and the copy instruction says how to finalise the wording when theestimator ships.
copies (the MATLAB file does not parse as cached), a code-only one-sided p-value, a
Stata-versus-MATLAB discrepancy at the default burn-in, sampling-weight handling that
differs by language, and the Monte Carlo script's conventions (per-arm sample size,
discretised treatment period, band-based rejection column, two result workbooks).
Approved first-estimator scope (recorded in the review)
Core two-group
DurationDiDwith common treatment timing, both the common-dynamics andproportional-hazards specifications, block-bootstrap inference with pointwise and uniform
bands, and pre-treatment diagnostics. Covariate adjustment, K-group linear restrictions,
Kaplan-Meier censoring input, staggered adoption and repeated-cross-section inference are
deferred to follow-on PRs. Two decisions are marked blocking for the estimator PR's plan:
the proportional-hazards constant formula and the inference construction against the
library's joint-NaN contract; the review records a recommendation and alternatives for each.
Methodology references (required if estimator / math changes)
hazards on counterfactual hazard rates); prospective class
DurationDiD.Diff-in-Diff. arXiv:2405.05220v2, https://arxiv.org/abs/2405.05220v2 (unpublished preprint;
revise-and-resubmit at Quantitative Economics per the authors' pages). Reference code:
https://github.com/ben-deaner-teaching/Duration-DiD at commit
202e92ef(no LICENSEfile; read as a black-box reference only, nothing ported). The PDF, each code file and the
status pages are SHA-256 pinned in the review header.
review is a deliberate exception to the published-source rule, made because no shipped
estimator handles absorbing-state outcomes; every page, equation and algorithm reference
is pinned to arXiv v2 and the header instructs re-checking against the published version.
Source typos and internal inconsistencies are transcribed as printed and catalogued in the
gaps list, never silently corrected. Library-side proposals that go beyond the paper
(the p-value, zero-survival and zero-SD policies, the scaled proportional-hazards slope
as recommended default) are labelled as extensions or decisions, not as paper statements.
Validation
.venv):pytest tests/test_naming_guard.py tests/test_changelog_fragments.py tests/test_tracking_files.py tests/test_docs_ia.py -q- 203 passed on the final bytes.tests/test_doc_deps_integrity.pyandtests/test_v4_matrix.py- 678 passed, 23 skipped.python3 .claude/scripts/changelog_compile.py check- OK.python3 .claude/scripts/premerge_scan.py- no methodology-pattern findings (no Pythonchanged).
find .workflow/sources -type f -exec shasum -a 256 {} +matches the ten inventory digests.
transcription/figure uncertainties alongside the pinned source inventory.
application scripts were read, not executed; statements about which script objects feed
Table 2 are structural readings and are marked as such in the review.
ruff,black,mypy- no Python source changed in this PR.Material limitations
(the MATLAB file is parse-invalid as cached), so it can serve only as an equation-level
reference; any future parity fixture needs a documented, non-distributed extraction.
specification test, and only a sketch of censoring handling. The review distinguishes
proposed library conventions from extensions deferred to later work.
as cached on 2026-09-05.
Security / privacy
personal information; the unlicensed reference code is cited by commit and line, not
copied.
Changelog
changelog.d/20260905-duration-did-paper-review.md(Documentation).