Skip to content

Commit 916efc6

Browse files
igerberclaude
andcommitted
Address PR #372 R9 review (1 P3): HAD WAS vs WAS_{d̲} estimand distinction
P3 - HAD summary copy compressed both Design 1' and Design 1 into "targets WAS", but the shipped class contract distinguishes them: - Design 1' (`d̲ = 0`, `continuous_at_zero` path): identifies the original Weighted Average Slope (WAS, paper Equation 2). `target_parameter == "WAS"` on the result class. - Design 1 (`d̲ > 0`, `continuous_near_d_lower` or `mass_point` paths): identifies `WAS_{d̲}` under Assumption 6 (or sign identification only under Assumption 5; both are non-testable via pre-trends). `target_parameter == "WAS_d_lower"` on the result class. Rewrite the HAD summaries in three places (docs/api/had.rst, README.md catalog one-liner, diff_diff/guides/llms.txt one-liner) to surface the distinction explicitly. The api/had.rst summary also flags that callers can key on the resolved `target_parameter` attribute, and that Design 1 identification requires the additional non-testable assumption beyond parallel trends. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent c834cab commit 916efc6

3 files changed

Lines changed: 14 additions & 7 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 targeting the Weighted Average Slope (WAS) at the dose support boundary (Design 1' with `d̲ = 0` and Design 1 with `d̲ > 0`), 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). 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 targeting Weighted Average Slope (WAS) at the dose support boundary (Design 1' with `d̲=0` and Design 1 with `d̲>0`), 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). 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 & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,18 @@ This module implements the methodology from de Chaisemartin, Ciccia,
1010
D'Haultfœuille & Knau (2026), "Difference-in-Differences Estimators When No
1111
Unit Remains Untreated" (arXiv:2405.04465v6), which:
1212

13-
1. **Targets the Weighted Average Slope (WAS)** as the identified parameter
14-
when no untreated comparison group exists (paper Equation 2).
15-
2. **Estimates WAS via local-linear regression at the dose support boundary**
16-
for both Design 1' (the QUG / Quasi-Untreated-Group case where the support
17-
infimum ``d̲ = 0``) and Design 1 (no QUG, ``d̲ > 0``).
13+
1. **Targets WAS or WAS_{d̲} depending on design path:** Design 1' (the
14+
QUG / Quasi-Untreated-Group case with ``d̲ = 0``) identifies the
15+
Weighted Average Slope (WAS, paper Equation 2); Design 1 (no QUG,
16+
``d̲ > 0``) identifies ``WAS_{d̲}`` under Assumption 6, or sign
17+
identification only under Assumption 5 (neither additional assumption
18+
is testable via pre-trends). The shipped result classes expose
19+
``target_parameter == "WAS"`` versus ``"WAS_d_lower"`` so callers can
20+
key on the resolved estimand.
21+
2. **Estimates the target via local-linear regression at the dose support
22+
boundary**, with three concrete fit paths: ``continuous_at_zero`` for
23+
Design 1', and ``continuous_near_d_lower`` or ``mass_point`` for
24+
Design 1 (auto-detected from the dose distribution).
1825
3. **Provides bias-corrected confidence intervals** ported from the
1926
``nprobust`` machinery for the continuous-dose paths, and a
2027
structural-residual 2SLS sandwich for the mass-point path.

0 commit comments

Comments
 (0)