From aa0510c57058d84009f734eff7e6c8c682dae8e4 Mon Sep 17 00:00:00 2001 From: igerber Date: Thu, 19 Feb 2026 17:36:56 -0500 Subject: [PATCH] Bump version to 2.5.0 Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 17 +++++++++++++++++ diff_diff/__init__.py | 2 +- pyproject.toml | 2 +- rust/Cargo.toml | 2 +- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5aab1f..f38002f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,22 @@ 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.5.0] - 2026-02-19 + +### Added +- Stacked DiD estimator (`StackedDiD`) implementing Wing, Freedman & Hollingsworth (2024) + with corrective Q-weights for compositional balance across event times +- Sub-experiment construction per adoption cohort with clean (never-yet-treated) controls +- IC1/IC2 trimming for compositional balance across event times +- Q-weights for aggregate, population, or sample share estimands (Table 1) +- WLS event study regression via sqrt(w) transformation +- `stacked_did()` convenience function +- R benchmark scripts for Stacked DiD validation (`benchmarks/R/benchmark_stacked_did.R`) +- Comprehensive test suite for Stacked DiD (`tests/test_stacked_did.py`) + +### Fixed +- NaN inference handling in pure Python mode for edge cases + ## [2.4.3] - 2026-02-19 ### Changed @@ -792,6 +808,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.5.0]: https://github.com/igerber/diff-diff/compare/v2.4.3...v2.5.0 [2.4.3]: https://github.com/igerber/diff-diff/compare/v2.4.2...v2.4.3 [2.4.2]: https://github.com/igerber/diff-diff/compare/v2.4.1...v2.4.2 [2.4.1]: https://github.com/igerber/diff-diff/compare/v2.4.0...v2.4.1 diff --git a/diff_diff/__init__.py b/diff_diff/__init__.py index 29fdd25..39545fd 100644 --- a/diff_diff/__init__.py +++ b/diff_diff/__init__.py @@ -153,7 +153,7 @@ load_mpdta, ) -__version__ = "2.4.3" +__version__ = "2.5.0" __all__ = [ # Estimators "DifferenceInDifferences", diff --git a/pyproject.toml b/pyproject.toml index ec450cb..1a1ec6b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "diff-diff" -version = "2.4.3" +version = "2.5.0" 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 6ab6c0d..95a426d 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "diff_diff_rust" -version = "2.4.3" +version = "2.5.0" edition = "2021" description = "Rust backend for diff-diff DiD library" license = "MIT"