Skip to content

Commit a21cd5d

Browse files
igerberclaude
andcommitted
Address PR #372 R10 review (3 P3) + rebase onto main
(Branch rebased onto origin/main first - 5 landed commits replayed cleanly, zero file overlap with the docs-refresh changeset.) P3 - HAD catalog one-liners omit panel-only restriction - Both README.md L113 and diff_diff/guides/llms.txt L64 describe the estimator without noting that the validator rejects repeated cross-section inputs (per REGISTRY L2511-2512 and had.py _validate_had_panel). Append "Panel-only in this release - repeated cross-sections rejected by the validator" so practitioners with RCS data are not misrouted. P3 - api/had.rst inference contract under-specifies mass-point survey vcov rejections - Reviewer caught that the inference contract section says only HC2 / HC2_BM are unsupported, but the shipped code also rejects vcov_type="classical" on: - design="mass_point" + survey= (static and event-study) - design="mass_point" + weights= + aggregate="event_study" + cband=True The HC1-scaled per-unit 2SLS IF would silently target V_HC1 under a classical label. - Add a paragraph to api/had.rst mirroring REGISTRY L2377-L2379 and the front-door NotImplementedError messages at had.py L3360-3380 and L4090-4115 (pointing users to vcov_type="hc1" or robust=True). P3 - REGISTRY checklist disagrees with TODO.md on HAD Phase 5 status - TODO.md L108 says the README catalog / llms.txt / API page / references.rst portion of HAD Phase 5 landed in PR #372, but REGISTRY L2531 still says "Phase 5: Tutorial notebook + llms.txt + llms-full.txt updates" as one undone item. - Split the REGISTRY checklist row: mark the PR #372 portion as [x] with explicit scope (README catalog, bundled llms.txt, docs/api/had.rst, docs/references.rst), keep the remaining tutorial + llms-full.txt work as [ ]. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 916efc6 commit a21cd5d

4 files changed

Lines changed: 16 additions & 3 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ Full guide: `diff_diff.get_llm_guide("practitioner")`.
110110
- [SyntheticDiD](https://diff-diff.readthedocs.io/en/stable/api/estimators.html) - Synthetic DiD combining standard DiD and synthetic control for few treated units
111111
- [TripleDifference](https://diff-diff.readthedocs.io/en/stable/api/triple_diff.html) - triple difference (DDD) estimator for designs requiring two criteria for treatment eligibility
112112
- [ContinuousDiD](https://diff-diff.readthedocs.io/en/stable/api/continuous_did.html) - Callaway, Goodman-Bacon & Sant'Anna (2024) continuous treatment DiD with dose-response curves
113-
- [HeterogeneousAdoptionDiD](https://diff-diff.readthedocs.io/en/stable/api/had.html) - de Chaisemartin, Ciccia, D'Haultfœuille & Knau (2026) for designs where **no unit remains untreated**; local-linear estimator at the dose support boundary returning Weighted Average Slope (WAS) on Design 1' (`d̲ = 0` / QUG) or `WAS_{d̲}` on Design 1 (`d̲ > 0`, continuous-near-d̲ or mass-point), with a multi-period event-study extension (last-treatment cohort, pointwise CIs). Alias `HAD`.
113+
- [HeterogeneousAdoptionDiD](https://diff-diff.readthedocs.io/en/stable/api/had.html) - de Chaisemartin, Ciccia, D'Haultfœuille & Knau (2026) for designs where **no unit remains untreated**; local-linear estimator at the dose support boundary returning Weighted Average Slope (WAS) on Design 1' (`d̲ = 0` / QUG) or `WAS_{d̲}` on Design 1 (`d̲ > 0`, continuous-near-d̲ or mass-point), with a multi-period event-study extension (last-treatment cohort, pointwise CIs). **Panel-only** in this release - repeated cross-sections rejected by the validator. Alias `HAD`.
114114
- [StackedDiD](https://diff-diff.readthedocs.io/en/stable/api/stacked_did.html) - Wing, Freedman & Hollingsworth (2024) stacked DiD with Q-weights and sub-experiments
115115
- [EfficientDiD](https://diff-diff.readthedocs.io/en/stable/api/efficient_did.html) - Chen, Sant'Anna & Xie (2025) efficient DiD with optimal weighting for tighter SEs
116116
- [TROP](https://diff-diff.readthedocs.io/en/stable/api/trop.html) - Triply Robust Panel estimator (Athey et al. 2025) with nuclear norm factor adjustment

diff_diff/guides/llms.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ Full practitioner guide: call `diff_diff.get_llm_guide("practitioner")`
6161
- [SyntheticDiD](https://diff-diff.readthedocs.io/en/stable/api/estimators.html): Synthetic DiD combining standard DiD and synthetic control methods for few treated units
6262
- [TripleDifference](https://diff-diff.readthedocs.io/en/stable/api/triple_diff.html): Triple difference (DDD) estimator for designs requiring two criteria for treatment eligibility
6363
- [ContinuousDiD](https://diff-diff.readthedocs.io/en/stable/api/continuous_did.html): Callaway, Goodman-Bacon & Sant'Anna (2024) continuous treatment DiD with dose-response curves
64-
- [HeterogeneousAdoptionDiD](https://diff-diff.readthedocs.io/en/stable/api/had.html): de Chaisemartin, Ciccia, D'Haultfœuille & Knau (2026) for designs where **no unit remains untreated**; local-linear estimator at the dose support boundary returning Weighted Average Slope (WAS) on Design 1' (`d̲=0` / QUG) or `WAS_{d̲}` on Design 1 (`d̲>0`, continuous-near-d̲ or mass-point), with multi-period event-study extension (last-treatment cohort, pointwise CIs). Alias `HAD`.
64+
- [HeterogeneousAdoptionDiD](https://diff-diff.readthedocs.io/en/stable/api/had.html): de Chaisemartin, Ciccia, D'Haultfœuille & Knau (2026) for designs where **no unit remains untreated**; local-linear estimator at the dose support boundary returning Weighted Average Slope (WAS) on Design 1' (`d̲=0` / QUG) or `WAS_{d̲}` on Design 1 (`d̲>0`, continuous-near-d̲ or mass-point), with multi-period event-study extension (last-treatment cohort, pointwise CIs). **Panel-only** in this release (repeated cross-sections rejected by the validator). Alias `HAD`.
6565
- [StackedDiD](https://diff-diff.readthedocs.io/en/stable/api/stacked_did.html): Wing, Freedman & Hollingsworth (2024) stacked DiD with Q-weights and sub-experiments
6666
- [EfficientDiD](https://diff-diff.readthedocs.io/en/stable/api/efficient_did.html): Chen, Sant'Anna & Xie (2025) efficient DiD with optimal weighting for tighter SEs
6767
- [TROP](https://diff-diff.readthedocs.io/en/stable/api/trop.html): Triply Robust Panel estimator (Athey et al. 2025) with nuclear norm factor adjustment

docs/api/had.rst

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,18 @@ Unit Remains Untreated" (arXiv:2405.04465v6), which:
5858
analytical covariance is not computed in this release; tracked in
5959
``TODO.md``.
6060

61+
**Mass-point ``vcov_type="classical"`` deviation.** The mass-point
62+
``survey=`` paths (static and event-study) and the ``weights=`` +
63+
``aggregate="event_study"`` + ``cband=True`` path reject
64+
``vcov_type="classical"`` with ``NotImplementedError``. The per-unit
65+
2SLS influence function returned by the mass-point fit is HC1-scaled
66+
so that ``compute_survey_if_variance`` and the sup-t bootstrap target
67+
``V_HC1`` consistently; mixing it with a classical analytical SE
68+
would silently report a ``V_HC1``-targeted variance under a
69+
``classical`` label. Use ``vcov_type="hc1"`` (or leave it unset with
70+
the default ``robust=True`` mapping); a classical-aligned IF
71+
derivation is queued for a follow-up PR.
72+
6173
HeterogeneousAdoptionDiD
6274
------------------------
6375

docs/methodology/REGISTRY.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2528,7 +2528,8 @@ Shipped in `diff_diff/had_pretests.py` as `stute_joint_pretest()` (residuals-in
25282528
- [ ] Phase 4: Pierce-Schott (2016) replication harness reproduces Figure 2 values.
25292529
- [ ] Phase 4: Full DGP 1/2/3 coverage-rate reproduction from Table 1.
25302530
- [ ] Phase 5: `practitioner_next_steps()` integration for HAD results.
2531-
- [ ] Phase 5: Tutorial notebook + `llms.txt` + `llms-full.txt` updates (preserving the UTF-8 fingerprint).
2531+
- [x] Phase 5 (partial): README catalog one-liner, bundled `llms.txt` `## Estimators` entry, `docs/api/had.rst` (autoclass for the three classes), and `docs/references.rst` citation landed in PR #372 docs refresh.
2532+
- [ ] Phase 5 (remaining): Tutorial notebook + `llms-full.txt` HeterogeneousAdoptionDiD section (preserving the UTF-8 fingerprint).
25322533
- [ ] Documentation of non-testability of Assumptions 5 and 6.
25332534
- [ ] Warnings for staggered treatment timing (redirect to `ChaisemartinDHaultfoeuille`).
25342535
- [ ] `NotImplementedError` phase pointer when `covariates=` is passed (Theorem 6 future work).

0 commit comments

Comments
 (0)