diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ab1828b..50e8f99c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,13 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.9.0] - 2026-04-04 + ### Added - **WooldridgeDiD (ETWFE)** estimator — Extended Two-Way Fixed Effects from Wooldridge (2025, 2023). Supports OLS, logit, and Poisson QMLE paths with ASF-based ATT and delta-method SEs. Four aggregation types (simple, group, calendar, event) matching Stata `jwdid_estat`. Alias: `ETWFE`. (PR #216, thanks @wenddymacro) +- **EfficientDiD survey + covariates** — doubly robust covariate path now threads survey weights through all four nuisance estimation stages (outcome regression, propensity ratio sieve, inverse propensity sieve, kernel-smoothed conditional Omega*). Previously raised `NotImplementedError`. - **Survey real-data validation** (Phase 9) — 15 cross-validation tests against R's `survey` package using three real federal survey datasets: - **API** (R `survey` package): TSL variance with strata, FPC, subpopulations, covariates, and Fay's BRR replicates - **NHANES** (CDC/NCHS): TSL variance with strata + PSU + nest=TRUE, validating the ACA young adult coverage provision DiD - **RECS 2020** (U.S. EIA): JK1 replicate weight variance with 60 pre-computed replicate columns - ATT, SE, df, and CI match R to machine precision (< 1e-10) where directly comparable; known deviations documented in REGISTRY.md (TWFE SE differs due to unit FE absorption; subpopulation df differs due to strata preservation) +- **Label-gated CI** — test workflows now require `ready-for-ci` label before running, reducing wasted CI during AI review rounds. AI review workflow always runs. +- **Documentation dependency map** (`docs/doc-deps.yaml`) — maps source files to impacted documentation. New `/docs-impact` skill flags which docs need updating when source files change. + +### Changed +- WooldridgeDiD: full interacted covariate basis (D_g × X, f_t × X) for OLS path +- `/submit-pr`, `/push-pr-update`, `/pre-merge-check`, `/docs-check` skills updated for label-gated CI and doc-deps workflow + +### Fixed +- Fix WooldridgeDiD OLS unbalanced demeaning and nonlinear never-treated identification +- Fix WooldridgeDiD Poisson dropped-cell bug and anticipation propagation +- Fix EfficientDiD IF-scale mismatch in survey aggregation and zero-weight never-treated guard +- Fix bootstrap clustering and delta-method reduced space in WooldridgeDiD ## [2.8.4] - 2026-04-04 @@ -1137,6 +1152,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `to_dict()` and `to_dataframe()` export methods - `is_significant` and `significance_stars` properties +[2.9.0]: https://github.com/igerber/diff-diff/compare/v2.8.4...v2.9.0 [2.8.4]: https://github.com/igerber/diff-diff/compare/v2.8.3...v2.8.4 [2.8.3]: https://github.com/igerber/diff-diff/compare/v2.8.2...v2.8.3 [2.8.2]: https://github.com/igerber/diff-diff/compare/v2.8.1...v2.8.2 diff --git a/diff_diff/__init__.py b/diff_diff/__init__.py index 2fe60801..99a7e27f 100644 --- a/diff_diff/__init__.py +++ b/diff_diff/__init__.py @@ -214,7 +214,7 @@ EDiD = EfficientDiD ETWFE = WooldridgeDiD -__version__ = "2.8.4" +__version__ = "2.9.0" __all__ = [ # Estimators "DifferenceInDifferences", diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 1f5f90a5..d45b2c8c 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -2,7 +2,7 @@ > A Python library for Difference-in-Differences causal inference analysis. Provides sklearn-like estimators with statsmodels-style output for econometric analysis. -- Version: 2.8.4 +- Version: 2.9.0 - Repository: https://github.com/igerber/diff-diff - License: MIT - Dependencies: numpy, pandas, scipy (no statsmodels dependency) diff --git a/pyproject.toml b/pyproject.toml index 7c3890c6..18a0f74e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "diff-diff" -version = "2.8.4" +version = "2.9.0" description = "Difference-in-Differences causal inference with sklearn-like API. Callaway-Sant'Anna, Synthetic DiD, Honest DiD, event studies, parallel trends." readme = "README.md" license = "MIT" diff --git a/rust/Cargo.toml b/rust/Cargo.toml index f8368d1e..e9269d79 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "diff_diff_rust" -version = "2.8.4" +version = "2.9.0" edition = "2021" description = "Rust backend for diff-diff DiD library" license = "MIT"