diff --git a/CHANGELOG.md b/CHANGELOG.md index 486284f7..3ec3d2b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,28 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.1.4] - 2026-01-20 + +### Added +- **Development checklists and workflow improvements** in `CLAUDE.md` + - Estimator inheritance map showing class hierarchy for `get_params`/`set_params` + - Test writing guidelines for fallback paths, parameters, and warnings + - Checklists for adding parameters and warning/error handling +- **R-style rank deficiency handling** across all estimators + - `rank_deficient_action` parameter: "warn" (default), "error", or "silent" + - Dropped columns have NaN coefficients (like R's `lm()`) + - VCoV matrix has NaN for rows/cols of dropped coefficients + - Propagated to all estimators: DifferenceInDifferences, MultiPeriodDiD, TwoWayFixedEffects, CallawaySantAnna, SunAbraham, TripleDifference, TROP, SyntheticDiD + +### Fixed +- `get_params()` now includes `rank_deficient_action` parameter (fixes sklearn cloning) +- NaN vcov fallback in Rust backend for rank-deficient matrices +- MultiPeriodDiD vcov/df computation for rank-deficient designs +- Average ATT inference for rank-deficient designs + +### Changed +- Rank tolerance aligned with R's `lm()` default for consistent behavior + ## [2.1.3] - 2026-01-19 ### Fixed @@ -470,6 +492,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.1.4]: https://github.com/igerber/diff-diff/compare/v2.1.3...v2.1.4 [2.1.3]: https://github.com/igerber/diff-diff/compare/v2.1.2...v2.1.3 [2.1.2]: https://github.com/igerber/diff-diff/compare/v2.1.1...v2.1.2 [2.1.1]: https://github.com/igerber/diff-diff/compare/v2.1.0...v2.1.1 diff --git a/diff_diff/__init__.py b/diff_diff/__init__.py index 35d33f5b..55b426c5 100644 --- a/diff_diff/__init__.py +++ b/diff_diff/__init__.py @@ -136,7 +136,7 @@ load_mpdta, ) -__version__ = "2.1.3" +__version__ = "2.1.4" __all__ = [ # Estimators "DifferenceInDifferences", diff --git a/pyproject.toml b/pyproject.toml index b3ee8e38..7ebbc10b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "diff-diff" -version = "2.1.3" +version = "2.1.4" description = "A library for Difference-in-Differences causal inference analysis" readme = "README.md" license = "MIT" diff --git a/rust/Cargo.toml b/rust/Cargo.toml index ab2268cf..557a5850 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "diff_diff_rust" -version = "2.1.3" +version = "2.1.4" edition = "2021" description = "Rust backend for diff-diff DiD library" license = "MIT"