Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
(`benchmarks/python/coverage_lpdid_ra.py`, ≈0.95 coverage across cluster counts). Confirms
the two previously-provisional REGISTRY notes (RA influence-function variance convention;
pooled fixed-composition estimand) resolve in the library's favour with no estimator change.
- **`LWDiD` (Lee & Wooldridge 2025, 2026 rolling-transformation DiD).** Unit-specific
demean/detrend converts panel to cross-section; supports staggered adoption with
never-treated / not-yet-treated control groups, RA/IPW/IPWRA estimation, and
cluster-robust inference. Alias `LW`.

## [3.6.0] - 2026-06-29

Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ Full guide: `diff_diff.get_llm_guide("practitioner")`.
- [StaggeredTripleDifference](https://diff-diff.readthedocs.io/en/stable/api/staggered.html#staggeredtripledifference) - Ortiz-Villavicencio & Sant'Anna (2025) staggered DDD with group-time ATT
- [WooldridgeDiD](https://diff-diff.readthedocs.io/en/stable/api/wooldridge_etwfe.html) - Wooldridge (2023, 2025) ETWFE: saturated OLS, logit/Poisson QMLE (ASF-based ATT). Alias `ETWFE`.
- [LPDiD](https://diff-diff.readthedocs.io/en/stable/api/lpdid.html) - Dube, Girardi, Jorda & Taylor (2025) Local Projections DiD: per-horizon long-difference event study on clean controls (no negative weighting), variance- or equally-weighted ATT, for absorbing or non-absorbing (reversible) treatment
- [LWDiD](https://diff-diff.readthedocs.io/en/stable/api/lwdid.html) - Lee & Wooldridge (2025, 2026) rolling-transformation DiD: unit-specific demean/detrend converts panel to cross-section, staggered adoption, RA/IPW/IPWRA estimation. Alias `LW`.
- [BaconDecomposition](https://diff-diff.readthedocs.io/en/stable/api/bacon.html) - Goodman-Bacon (2021) decomposition for diagnosing TWFE bias in staggered settings

## Diagnostics & Sensitivity
Expand Down
78 changes: 78 additions & 0 deletions diff_diff/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,43 @@
from diff_diff.wooldridge_results import WooldridgeDiDResults
from diff_diff.lpdid import LPDiD
from diff_diff.lpdid_results import LPDiDResults
from diff_diff.lwdid import LWDiD, lwdid, validate_staggered_data, is_never_treated
from diff_diff.lwdid_results import LWDiDResults
from diff_diff.lwdid_wild_bootstrap import wild_cluster_bootstrap, WildClusterBootstrapResult
from diff_diff.lwdid_randomization import randomization_inference, RandomizationResult
from diff_diff.lwdid_trend_diagnostics import (
test_parallel_trends, diagnose_heterogeneous_trends,
recommend_transformation, ParallelTrendsTestResult,
)
from diff_diff.lwdid_sensitivity import (
sensitivity_analysis, robustness_pre_periods,
sensitivity_no_anticipation, SensitivityResult,
)
from diff_diff.lwdid_visualization import (
plot_cohort_trends, plot_event_study as plot_lwdid_event_study,
plot_sensitivity as plot_lwdid_sensitivity,
plot_bootstrap_distribution,
)
from diff_diff.lwdid_exceptions import (
LWDIDError,
LWDIDWarning,
LWDIDInferenceError,
BootstrapConvergenceError,
RandomizationError,
DiagnosticError,
InsufficientPrePeriodsError,
NumericalWarning,
RandomizationWarning,
DiagnosticWarning,
SensitivityWarning,
VisualizationError,
VisualizationWarning,
)
from diff_diff.lwdid_clustering import (
diagnose_clustering, diagnose_clustering_from_data,
recommend_clustering_level,
ClusteringDiagnostics, ClusteringRecommendation,
)
from diff_diff.utils import (
WildBootstrapResults,
check_parallel_trends,
Expand Down Expand Up @@ -300,6 +337,7 @@
ETWFE = WooldridgeDiD
DCDH = ChaisemartinDHaultfoeuille
HAD = HeterogeneousAdoptionDiD
LW = LWDiD

__version__ = "3.6.0"
__all__ = [
Expand Down Expand Up @@ -386,6 +424,46 @@
# LPDiD (Local Projections DiD)
"LPDiD",
"LPDiDResults",
# LWDiD (Lee & Wooldridge rolling transformation DiD)
"LWDiD",
"LWDiDResults",
"LW",
"wild_cluster_bootstrap",
"WildClusterBootstrapResult",
"randomization_inference",
"RandomizationResult",
"test_parallel_trends",
"diagnose_heterogeneous_trends",
"recommend_transformation",
"ParallelTrendsTestResult",
"sensitivity_analysis",
"robustness_pre_periods",
"sensitivity_no_anticipation",
"SensitivityResult",
"lwdid",
"plot_cohort_trends",
"plot_lwdid_event_study",
"plot_lwdid_sensitivity",
"plot_bootstrap_distribution",
# LWDiD exceptions
"LWDIDError",
"LWDIDWarning",
"LWDIDInferenceError",
"RandomizationError",
"DiagnosticError",
"NumericalWarning",
"DiagnosticWarning",
"SensitivityWarning",
"VisualizationError",
# LWDiD clustering diagnostics
"diagnose_clustering",
"diagnose_clustering_from_data",
"recommend_clustering_level",
"ClusteringDiagnostics",
"ClusteringRecommendation",
# LWDiD utility functions
"validate_staggered_data",
"is_never_treated",
# Visualization
"plot_bacon",
"plot_event_study",
Expand Down
1 change: 1 addition & 0 deletions diff_diff/guides/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ Full practitioner guide: call `diff_diff.get_llm_guide("practitioner")`
- [StaggeredTripleDifference](https://diff-diff.readthedocs.io/en/stable/api/staggered.html#staggeredtripledifference): Ortiz-Villavicencio & Sant'Anna (2025) staggered DDD with group-time ATT
- [WooldridgeDiD](https://diff-diff.readthedocs.io/en/stable/api/wooldridge_etwfe.html): Wooldridge (2023, 2025) ETWFE — saturated OLS, logit/Poisson QMLE (ASF-based ATT). Alias: ETWFE
- [LPDiD](https://diff-diff.readthedocs.io/en/stable/api/lpdid.html): Dube, Girardi, Jorda & Taylor (2025) Local Projections DiD: per-horizon long-difference event study on clean controls (no negative weighting); variance- or equally-weighted ATT, premean differencing, pooled pre/post, fast. Absorbing by default; non-absorbing (reversible) treatment via `non_absorbing="first_entry"` (Eq. 12) or `"effect_stabilization"` (Eq. 13, window `L`).
- **LWDiD** (Lee & Wooldridge 2025, 2026): Rolling-transformation DiD — unit-specific demean/detrend converts panel to cross-section, supports staggered adoption with flexible control groups and estimation (RA/IPW/IPWRA). Alias: `LW`. [API](https://diff-diff.readthedocs.io/en/stable/api/lwdid.html)
- [BaconDecomposition](https://diff-diff.readthedocs.io/en/stable/api/bacon.html): Goodman-Bacon (2021) decomposition for diagnosing TWFE bias in staggered settings

## Diagnostics and Sensitivity Analysis
Expand Down
Loading