Skip to content

Commit 96eb711

Browse files
igerberclaude
andcommitted
Address PR #389 R7 P3: clustered weighted mass-point combinations rejected outright
The R6 wording said `cluster=` + `aggregate="event_study"` + `cband=True` on mass-point could be made to work via `vcov_type="hc1"` / `robust=True`. Per `had.py:4059-4095` and `had.py:3399-3447` (also documented in REGISTRY:2380-2382) that path is rejected outright regardless of `vcov_type`, and `survey_design=` + `cluster=` on weighted mass-point is similarly rejected. The error is about variance-family mixing in the sup-t bootstrap / Binder-TSL composition, not about the classical-default trap. - `docs/api/had.rst` inline weights= shortcut summary: narrowed the CR1 qualifier - "rejected outright regardless of `vcov_type`" + cross-link to a new sibling deviation note. - `docs/api/had.rst` new "Mass-point cluster-combination deviation" note beside the existing classical-default note: enumerates the two rejected combinations (survey_design= + cluster= static and event-study; weights= + cluster= + cband=True event-study) with the implementation's own workaround language (cband=False / drop cluster= / cluster= alone / weights= + cluster=). - `docs/choosing_estimator.rst` SE Methods row: dropped the misleading "requires explicit hc1/robust=True" implication; says rejected outright for both the weighted shortcut + cluster= + event_study cband and the survey_design= + cluster= mass-point combination. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent f43d737 commit 96eb711

2 files changed

Lines changed: 25 additions & 9 deletions

File tree

docs/api/had.rst

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,12 @@ Unit Remains Untreated" (arXiv:2405.04465v6), which:
4949
- **``weights=np.ndarray`` shortcut (deprecated)** - continuous paths
5050
reuse the CCT-2014 SE; the mass-point path uses an analytical
5151
weighted 2SLS sandwich (``classical`` / ``hc1``; CR1 when
52-
``cluster=`` is supplied; ``hc2`` / ``hc2_bm`` raise
53-
``NotImplementedError`` pending a 2SLS-specific leverage
54-
derivation). The mass-point + ``aggregate="event_study"`` +
55-
``cband=True`` sub-path additionally rejects an effective
56-
``classical`` vcov (so plain ``cluster=`` with the default
57-
``robust=False`` triggers the classical-default trap below;
58-
pass ``vcov_type="hc1"`` or ``robust=True`` to use CR1 there).
59-
Yields ``variance_formula="pweight"`` / ``"pweight_2sls"``.
52+
``cluster=`` is supplied, except ``cluster=`` +
53+
``aggregate="event_study"`` + ``cband=True`` is rejected outright
54+
regardless of ``vcov_type`` per the cluster-combination deviation
55+
below; ``hc2`` / ``hc2_bm`` raise ``NotImplementedError`` pending a
56+
2SLS-specific leverage derivation). Yields
57+
``variance_formula="pweight"`` / ``"pweight_2sls"``.
6058
- **``survey_design=SurveyDesign(weights="col", ...)``** (canonical;
6159
accepts strata / PSU / FPC) - both paths compose Binder (1983)
6260
Taylor-series linearization with ``df_survey`` threaded into
@@ -100,6 +98,24 @@ Unit Remains Untreated" (arXiv:2405.04465v6), which:
10098
``vcov_type="classical"``, which triggers the guard); a
10199
classical-aligned IF derivation is queued for a follow-up PR.
102100

101+
**Mass-point cluster-combination deviation.** On
102+
``design="mass_point"``, two clustered weighted paths are rejected
103+
outright regardless of ``vcov_type``:
104+
105+
- ``survey_design=SurveyDesign(...)`` + ``cluster=`` (static and
106+
event-study): the survey path composes Binder-TSL variance, which
107+
would silently override the CR1 cluster-robust sandwich.
108+
Workarounds: ``cluster=`` alone (unweighted CR1), or ``weights=``
109+
+ ``cluster=`` (weighted-CR1 pweight sandwich), or
110+
``survey_design=`` alone (Binder-TSL). Combined cluster-robust +
111+
survey inference is queued for a follow-up PR.
112+
- Deprecated ``weights=`` shortcut + ``cluster=`` +
113+
``aggregate="event_study"`` + ``cband=True``: the sup-t bootstrap
114+
normalizes HC1-scale perturbations by the CR1 analytical SE,
115+
mixing variance families. Workarounds: pass ``cband=False`` (keeps
116+
weighted-CR1 per-horizon), or drop ``cluster=`` (keeps
117+
weighted-HC1 sup-t).
118+
103119
HeterogeneousAdoptionDiD
104120
------------------------
105121

docs/choosing_estimator.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -664,7 +664,7 @@ differences helps interpret results and choose appropriate inference.
664664
- Uses influence-function-based SEs by default. Use ``n_bootstrap=199`` (or higher) for multiplier bootstrap inference with proper CIs.
665665
* - ``HeterogeneousAdoptionDiD``
666666
- Path-dependent (CCT-2014 / 2SLS / Binder TSL)
667-
- Three SE regimes per :doc:`api/had`. **Unweighted**: continuous-dose paths use the CCT-2014 weighted-robust SE from the in-house ``lprobust`` port; mass-point uses a 2SLS sandwich. **Deprecated ``weights=`` shortcut**: continuous reuses CCT-2014; mass-point uses analytical weighted 2SLS (``classical`` / ``hc1``; CR1 when ``cluster=`` is supplied, except mass-point + ``aggregate="event_study"`` + ``cband=True`` requires explicit ``vcov_type="hc1"`` or ``robust=True`` per the classical-default exception in :doc:`api/had`); yields ``variance_formula="pweight"`` / ``"pweight_2sls"``. **``survey_design=SurveyDesign(weights="col", ...)``**: both paths compose Binder (1983) Taylor-series linearization (``"survey_binder_tsl"`` / ``"survey_binder_tsl_2sls"``). The two weighted families differ on this estimator until the next-minor unification lands. Per-horizon CIs are pointwise; sup-t bands available only on the weighted event-study path via ``cband=True``.
667+
- Three SE regimes per :doc:`api/had`. **Unweighted**: continuous-dose paths use the CCT-2014 weighted-robust SE from the in-house ``lprobust`` port; mass-point uses a 2SLS sandwich. **Deprecated ``weights=`` shortcut**: continuous reuses CCT-2014; mass-point uses analytical weighted 2SLS (``classical`` / ``hc1``; CR1 when ``cluster=`` is supplied, except mass-point + ``cluster=`` + ``aggregate="event_study"`` + ``cband=True`` is rejected outright - see :doc:`api/had` for the cluster-combination deviation note); yields ``variance_formula="pweight"`` / ``"pweight_2sls"``. **``survey_design=SurveyDesign(weights="col", ...)``**: both paths compose Binder (1983) Taylor-series linearization (``"survey_binder_tsl"`` / ``"survey_binder_tsl_2sls"``); mass-point + ``survey_design=`` + ``cluster=`` is also rejected outright (combined survey + cluster inference is deferred). The two weighted families differ on this estimator until the next-minor unification lands. Per-horizon CIs are pointwise; sup-t bands available only on the weighted event-study path via ``cband=True``.
668668
* - ``SunAbraham``
669669
- Cluster-robust (unit level)
670670
- Clusters at unit level by default. Specify ``cluster`` to override. Use ``n_bootstrap`` for pairs bootstrap inference.

0 commit comments

Comments
 (0)