diff --git a/CHANGELOG.md b/CHANGELOG.md index cb6ba95e..445f31f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.8.4] - 2026-04-04 + +### Added +- **SDR replicate method** (Phase 8a) — Successive Difference Replication for ACS PUMS users. `SurveyDesign(replicate_method="SDR")` with variance formula `V = 4/R * sum((theta_r - theta)^2)`. +- **FPC support for ImputationDiD and TwoStageDiD** (Phase 8b) — finite population correction now threaded through TSL variance for both estimators. +- **Lonely PSU "adjust" in bootstrap** (Phase 8d) — `lonely_psu="adjust"` now works with survey-aware bootstrap (previously raised `NotImplementedError`). Uses Rust & Rao (1996) grand-mean centering. +- **CV on estimates** (Phase 8e) — `coef_var` property on all results objects (SE/estimate). Handles edge cases (SE=0, estimate=0). +- **Weight trimming utility** (Phase 8e) — `trim_weights(data, weight_col, upper=None, lower=None, quantile=None)` in `prep.py` for capping extreme survey weights. +- **ImputationDiD pretrends + survey** (Phase 8e) — pre-trends F-test now survey-aware using subpopulation approach for correct variance under complex designs. +- Updated ImputationDiD tutorial to demonstrate `pretrends=True` event study +- Updated survey tutorial: narrative improvements, chart rendering fixes + +### Fixed +- Fix survey pretrend F-test df calculation and rank-deficient survey VCV handling +- Fix `trim_weights` NaN poisoning when weight column contains missing values +- Fix single-singleton PSU warning for lonely_psu="adjust" + ## [2.8.3] - 2026-04-02 ### Added @@ -1112,6 +1129,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.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 [2.8.1]: https://github.com/igerber/diff-diff/compare/v2.8.0...v2.8.1 diff --git a/diff_diff/__init__.py b/diff_diff/__init__.py index 1012fa34..423f2386 100644 --- a/diff_diff/__init__.py +++ b/diff_diff/__init__.py @@ -211,7 +211,7 @@ Bacon = BaconDecomposition EDiD = EfficientDiD -__version__ = "2.8.3" +__version__ = "2.8.4" __all__ = [ # Estimators "DifferenceInDifferences", diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 984c4415..1f5f90a5 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.3 +- Version: 2.8.4 - 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 64b8c954..caf8b60d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "diff-diff" -version = "2.8.3" +version = "2.8.4" 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 7fc4ad9b..f8368d1e 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "diff_diff_rust" -version = "2.8.3" +version = "2.8.4" edition = "2021" description = "Rust backend for diff-diff DiD library" license = "MIT"