Commit 6c4ab94
ConleySpatialHAC methodology-review-tracker promotion + Bertanha-Imbens 2014 citation correction
Three bundled changes:
1. ConleySpatialHAC methodology-review-tracker promotion (In Progress → Complete).
- METHODOLOGY_REVIEW.md L91 + L1262-1290 flipped Complete with full
Verified Components / Test Coverage / R Comparison Results inline
table / Corrections Made / Deviations / Outstanding Concerns
structure, with Last Review = 2026-05-26.
- New tests/test_methodology_conley.py (~1600 LoC; 10 classes;
60 tests, 5 of them @pytest.mark.slow). Paper-equation-numbered
Verified Components walk-through covering:
* Eq. 4.2 cross-sectional sandwich (pairwise-distance
specialization; Eq. 3.13 is the lattice-indexed form reserved
for grid coordinates)
* Eq. 4.2 HC0 + rank-1 limits + K(0) = 1 diagonal contribution
* Andrews (1991) HAC lag truncation matching
conleyreg::time_dist.cpp
* Haversine convention with Earth radius 6371.01 km (matches
conleyreg::haversine_dist)
* Phase 2 panel block-decomposed sandwich at atol=1e-12 (internal
cross-check vs hand-coded reference + cluster time-invariance
contract)
* Wave A igerber#120 sparse k-d-tree numerical correctness (sparse-vs-
dense bit-identity at atol=1e-10 on cross-sectional, panel,
and sparse-with-cluster paths)
* R conleyreg v0.1.9 parity at atol=1e-6 on 6 fixtures
(3 cross-sectional + 3 panel) + sparse-forced cross-sectional
+ sparse-forced panel + time-asymmetric kernel literal-matching
Three dedicated deviations-area classes:
* TestConleyLibraryExtensions (6 tests, no R correspondence):
combined spatial+cluster product kernel Wave A igerber#119 (two
limit-fixture anchors), callable conley_metric validation
Wave A igerber#123, sparse k-d-tree activation Wave A igerber#120,
indefiniteness guard on Bartlett + uniform kernels.
* TestConleyDeviationsFromR (3 tests): 1-D radial Bartlett vs
paper's 2-D separable Eq. 3.14, time-label normalization,
independent temporal kernel deferred.
* TestConleyDeferrals (5 tests): fail-closed NotImplementedError
/ TypeError contracts for LinearRegression + survey_design,
DiD/MPD/TWFE + survey_design (estimator-level via
conley.py::_validate_conley_estimator_inputs), Conley +
weights (rejected for any weight_type — pweight, aweight,
fweight), SyntheticDiD + Conley (TypeError), wild_bootstrap
+ Conley.
- tests/test_conley_vcov.py extracted 1135+ LoC out (4248 → 3113);
defensive surface preserved (input validation, NaN/inf guards,
dispatch-level validity, estimator-level integration smoke tests,
set_params atomicity, sparse-path activation thresholds + density-
gate fallback). Module docstring refreshed to describe its current
defensive-regression role.
2. Stale priority-queue cleanup at METHODOLOGY_REVIEW.md L1386:
- PreTrendsPower removed (already Complete since 2026-05-19).
- ConleySpatialHAC removed (this PR).
- Substantive-review-blocked renumbered igerber#2-igerber#5 → igerber#1-igerber#4.
- Consolidation-pass-blocked renumbered igerber#6-igerber#8 → igerber#5-igerber#6.
3. Bertanha-Imbens 2014 citation correction across 16 sites:
- linalg.py × 8, conley.py × 1, llms-full.txt × 2, REGISTRY.md × 4,
spillover.rst × 1.
- NBER w20773 is on FRD external validity, NOT weighted spatial-HAC.
- The boundary is now framed as a tri-part contract:
* Shipped — SpilloverDiD + Conley + survey via Wave E.1/E.2/E.3
(PR igerber#468/igerber#474/igerber#482, stratified-Conley sandwich on PSU totals
with within-PSU serial Bartlett HAC for lag_cutoff > 0);
TwoStageDiD + Conley + survey via Wave E.3 parity (PR igerber#485).
* Deferred (generic linalg surface, any weight_type) — DiD/MPD/
TWFE/LinearRegression generic path + Conley + survey_design;
LinearRegression / compute_robust_vcov Conley + weights rejected
for pweight, aweight, AND fweight (weighted Conley is not
implemented on the generic linalg surface).
* Open methodological question (subset) — the pweight /
survey_design portion of the deferral additionally lacks a
canonical methodological extension of Conley (1999) for weighted
spatial-HAC under probability sampling.
- REGISTRY sites use canonical `**Note (open methodological
question):**` label wrapper per CLAUDE.md "Documenting Deviations".
- Historical CHANGELOG entries (pre-[Unreleased]) intentionally
retain Bertanha-Imbens 2014 attribution as accurate records of
past release claims.
Verification:
- pytest tests/test_methodology_conley.py: 60 tests (55 unit + 5 slow)
pass.
- pytest tests/test_methodology_conley.py + tests/test_conley_vcov.py:
176 pass + 5 slow deselected (preserves pre-edit baseline coverage
176 vs original 175 + 1 new uniform-kernel indefiniteness guard).
- grep -rn "Bertanha" diff_diff/ docs/ benchmarks/: 0 hits.
- black + ruff clean.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 2656e44 commit 6c4ab94
9 files changed
Lines changed: 1962 additions & 1289 deletions
File tree
- diff_diff
- guides
- docs
- api
- methodology
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
10 | 13 | | |
11 | 14 | | |
12 | 15 | | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
13 | 19 | | |
14 | 20 | | |
15 | 21 | | |
| |||
0 commit comments