You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|`visualization/`| 4172 | Subpackage (split across 7 files) — OK |
41
44
42
45
---
43
46
@@ -49,20 +52,13 @@ Deferred items from PR reviews that were not addressed before merge.
49
52
50
53
| Issue | Location | PR | Priority |
51
54
|-------|----------|----|----------|
52
-
| ImputationDiD dense `(A0'A0).toarray()` scales O((U+T+K)^2), OOM risk on large panels |`imputation.py`|#141| Medium (deferred — only triggers when sparse solver fails; fixing requires sparse least-squares alternatives) |
53
-
| EfficientDiD: API docs / tutorial page for new public estimator |`docs/`|#192| Medium |
55
+
| ImputationDiD dense `(A0'A0).toarray()` scales O((U+T+K)^2), OOM risk on large panels |`imputation.py`|#141| Medium (deferred — only triggers when sparse solver fails) |
54
56
| Multi-absorb weighted demeaning needs iterative alternating projections for N > 1 absorbed FE with survey weights; unweighted multi-absorb also uses single-pass (pre-existing, exact only for balanced panels) |`estimators.py`|#218| Medium |
55
-
| Replicate-weight survey df — **Resolved**. `df_survey = rank(replicate_weights) - 1` matching R's `survey::degf()`. For IF paths, `n_valid - 1` when dropped replicates reduce effective count. |`survey.py`|#238| Resolved |
| CallawaySantAnna survey + covariates + IPW/DR: DRDID panel nuisance-estimation IF corrections not implemented. Currently gated with NotImplementedError. Regression method with covariates works (has WLS nuisance IF correction). |`staggered.py`|#233| Medium |
| EfficientDiD hausman_pretest() clustered covariance stale `n_cl` — **Resolved**. Recompute `n_cl` and remap indices after `row_finite` filtering via `np.unique(return_inverse=True)`. |`efficient_did.py`|#230| Resolved |
60
-
| EfficientDiD `control_group="last_cohort"` trims at `last_g - anticipation` but REGISTRY says `t >= last_g`. With `anticipation=0` (default) these are identical. With `anticipation>0`, code is arguably more conservative (excludes anticipation-contaminated periods). Either align REGISTRY with code or change code to `t < last_g` — needs design decision. |`efficient_did.py`|#230| Low |
61
-
| TripleDifference power: `generate_ddd_data` is a fixed 2×2×2 cross-sectional DGP — no multi-period or unbalanced-group support. Add a `generate_ddd_panel_data` for panel DDD power analysis. |`prep_dgp.py`, `power.py`|#208| Low |
62
-
| ContinuousDiD event-study aggregation anticipation filter — **Resolved**. `_aggregate_event_study()` now filters `e < -anticipation` when `anticipation > 0`, matching CallawaySantAnna behavior. Bootstrap paths also filtered. |`continuous_did.py`|#226| Resolved |
63
-
| Survey design resolution/collapse patterns are inconsistent across panel estimators — ContinuousDiD rebuilds unit-level design in SE code, EfficientDiD builds once in fit(), StackedDiD re-resolves on stacked data; extract shared helpers for panel-to-unit collapse, post-filter re-resolution, and metadata recomputation |`continuous_did.py`, `efficient_did.py`, `stacked_did.py`|#226| Low |
| TROP: `fit()` and `_fit_global()` share ~150 lines of near-identical data setup (panel pivoting, absorbing-state validation, first-treatment detection, effective rank, NaN warnings). Both bootstrap methods also duplicate the stratified resampling loop. Extract shared helpers to eliminate cross-file sync risk. |`trop.py`, `trop_global.py`, `trop_local.py`| — | Low |
57
+
| CallawaySantAnna survey + covariates + IPW/DR: DRDID panel nuisance-estimation IF corrections not implemented. Currently gated with NotImplementedError. Regression method with covariates works. |`staggered.py`|#233| Medium — tracked in Survey Phase 7a |
58
+
| EfficientDiD `control_group="last_cohort"` trims at `last_g - anticipation` but REGISTRY says `t >= last_g`. With `anticipation=0` (default) these are identical. Needs design decision for `anticipation>0`. |`efficient_did.py`|#230| Low |
59
+
| TripleDifference power: `generate_ddd_data` is a fixed 2×2×2 cross-sectional DGP — no multi-period or unbalanced-group support. |`prep_dgp.py`, `power.py`|#208| Low |
| TROP: `fit()` and `_fit_global()` share ~150 lines of near-identical data setup. Extract shared helpers to eliminate cross-file sync risk. |`trop.py`, `trop_global.py`, `trop_local.py`| — | Low |
66
62
67
63
#### Performance
68
64
@@ -75,12 +71,11 @@ Deferred items from PR reviews that were not addressed before merge.
75
71
76
72
| Issue | Location | PR | Priority |
77
73
|-------|----------|----|----------|
74
+
| Plotly renderers silently ignore styling kwargs (marker, markersize, linewidth, capsize, ci_linewidth) that the matplotlib backend honors; thread them through or reject when `backend="plotly"`|`visualization/_event_study.py`, `_diagnostic.py`, `_power.py`|#222| Medium |
78
75
| R comparison tests spawn separate `Rscript` per test (slow CI) |`tests/test_methodology_twfe.py:294`|#139| Low |
79
76
| CS R helpers hard-code `xformla = ~ 1`; no covariate-adjusted R benchmark for IRLS path |`tests/test_methodology_callaway.py`|#202| Low |
80
-
|~376 `duplicate object description` Sphinx warnings — caused by autodoc `:members:` on dataclass attributes within manual API pages (not from autosummary stubs); fix requires restructuring `docs/api/*.rst` pages to avoid documenting the same attribute via both `:members:` and inline `autosummary` tables |`docs/api/*.rst`| — | Low |
81
-
| Plotly renderers silently ignore styling kwargs (marker, markersize, linewidth, capsize, ci_linewidth) that the matplotlib backend honors; thread them through or reject when `backend="plotly"`|`visualization/_event_study.py`, `_diagnostic.py`, `_power.py`|#222| Medium |
82
-
| Survey bootstrap test coverage — **Resolved**. Added FPC census zero-variance, single-PSU NaN, full-design bootstrap for CS/ContinuousDiD/EfficientDiD, and TROP Rao-Wu vs block bootstrap equivalence tests. |`tests/test_survey_phase*.py`| — | Resolved |
83
-
| Doc-snippet smoke tests only cover `.rst` files; new `.txt` AI guides are outside CI validation |`tests/test_doc_snippets.py`|#239| Low |
0 commit comments