This is the release archived for the JOSS review of StatsPAI: A Unified,
Agent-Native Python Toolkit for Causal Inference and Applied Econometrics
(openjournals/joss-reviews#10604).
⚠️ Correctness
Sixteen estimator-level correctness fixes land in this release. Anyone holding
results from an earlier version for the affected calls should re-run them. The
full reasoning, reference comparisons and tolerances for each are in
CHANGELOG.md.
Difference-in-differences
sp.did_imputationanalytic standard errors were built from an approximation
and were materially too small (36% on the headline ATT in one fixture).sp.did_imputationpre-treatment event-study coefficients were misaligned.sp.did(..., weights=)silently returned the unweighted estimand.sp.didsilently swallowed unknown keyword arguments.- Callaway–Sant'Anna:
estimator="dr","ipw"and"ipw_abadie"standard
errors were each understated (up to 89% foripw, ~34% foripw_abadie). - Callaway–Sant'Anna clustered multiplier-bootstrap standard errors were wrong.
anticipation > 0placed the pre-treatment placebos incorrectly.sp.drdid'smethod=argument had no effect on repeated cross sections.
Instrumental variables and GMM
sp.iv(absorb=..., cluster=...)crashed when the clustering variable was
itself absorbed.- Absorbed-IV standard errors charged degrees of freedom for absorbed fixed
effects, so inference disagreed withivreghdfe. - Cluster-robust GMM used a heteroskedasticity-only meat matrix.
- Over-identification tests ignored the variance assumption.
- Kleibergen–Paap rk statistics were not robust to the fitted vcov.
- The augmented-diagnostics path dropped a control from the reduced form.
Other changes
New parity modules pin the dynamic TWFE event study and the full
Callaway–Sant'Anna aggregation vectors three ways (StatsPAI, R and Stata), and
the reference-claim audit now scores the group and calendar aggregations.
The citation surface was rebuilt for the JOSS submission: paper.bib gained 31
verified DOIs, every entry that has none now records why, and the
@software{wang2026statspai} entry is emitted identically by paper.bib,
sp.citation(), both READMEs and the documentation.
See CHANGELOG.md for the complete list.