v0.0.9
Structural identification, forecast diagnostics and stationarity testing land together in this release, alongside several fixes to inference that was previously silently wrong.
Before you upgrade
Three fixes change numbers you may already have published. None of them raise an error — the old results simply looked fine.
| If you… | …then | What to do |
|---|---|---|
use a custom Cholesky(ordering=...) |
your IRFs, FEVDs and historical decompositions were mislabelled — rows came back in ordering order while being reported as data order (#208) | re-run; identity orderings are byte-identical and unaffected |
fit with exog on the NUTS path |
the B_exog prior was pinned at Normal(0, 1) regardless of regressor scale, crushing coefficients on small-scale regressors — a true coefficient of 50 on a N(0, 0.01²) regressor recovered ≈1 (#237) |
re-fit; the prior now scales as exog_prior_scale · σᵢ / sd(xⱼ), default 100 |
| forecast with multivariate stochastic volatility | every forecast standard deviation sat at exp(-mu_i/2) times the correct scale — the in-sample fit was unaffected, so nothing looked wrong (#241) |
re-run; affects density, conditional and scenario forecasts. AR(1) log-vol dynamics were never affected |
Three further changes reject input that used to be accepted silently: duplicate or overlapping variable names (#206), StudentT.prior_alpha ≤ 1 (#211), and ConjugateVolatility adapters declaring no hyperparameters (#233).
Highlights
-
ZeroSignRestriction— combined zero-and-sign identification via the Arias–Rubio-Ramírez–Waggoner recursive null-space construction (#218). -
LongRunRestriction— Blanchard–Quah identification on cumulative long-run effects (#183). -
FittedVAR.granger_causality()— reports the posterior of the coefficient norm as a magnitude, not a test statistic, so a small effect stays distinguishable from an imprecise one.toda_yamamoto()covers the lag-augmented procedure when integration orders are uncertain (#226). -
Predictive checks —
VAR.prior_predictive()andFittedVAR.posterior_predictive()(#230). -
Stationarity diagnostics —
adf_test,kpss_test,johansen_test,integration_order, behind a new extra (#197):pip install "impulso[diagnostics]==0.0.9" -
Student-t observation errors (#168) and model evidence / Bayes factors on conjugate fits (#160).
Impulso is pre-v0.1 and the public API is still moving; breaking changes ship in minor releases with the rationale recorded in docs/adr/.
What's Changed
🚀 Features
- feat(sv): align SVForecastResult index to calendar dates by @thomaspinder in #158
- feat(conjugate): stamp the Metropolis acceptance rate on the posterior attrs by @thomaspinder in #210
- feat(conjugate): expose model evidence and Bayes-factor comparison by @thomaspinder in #160
- feat(spec): Student-t observation errors and predictive draws by @thomaspinder in #168
- feat(identification): long-run (Blanchard-Quah) structural restrictions by @thomaspinder in #183
- feat(stationarity): ADF, KPSS and Johansen diagnostics with integration-order bookkeeping by @thomaspinder in #197
- feat(identification): combined zero-and-sign restrictions (ARW construction) by @thomaspinder in #218
- feat(predictive): prior_predictive on VAR, posterior_predictive on FittedVAR by @thomaspinder in #230
- feat(granger): Bayesian Granger causality with Toda-Yamamoto robustness by @thomaspinder in #226
🐛 Bug Fixes
- fix(init): module-level lazy-import table and dir by @thomaspinder in #156
- fix(spec): safe default sampler with cores=1 in VAR.fit by @thomaspinder in #157
- fix(identification): weakref-validated posterior cache for ProxySVAR by @thomaspinder in #234
- fix(scenario): finite shock-matrix guard; infer shock order in from_zero_restrictions by @thomaspinder in #223
- fix(stationarity): re-emit non-target KPSS warnings; define p in the Johansen snippet by @thomaspinder in #212
💥 Breaking Changes
- fix(data): reject duplicate and overlapping variable names in VARData by @thomaspinder in #206
- fix(identification): return the ordered Cholesky factor in data row order by @thomaspinder in #208
- fix(conjugate): reject volatility adapters with no hyperparameters to estimate by @thomaspinder in #233
- fix(spec): scale the B_exog prior to the data instead of pinning sigma=1 by @thomaspinder in #237
- fix(observation): prior_alpha > 1 guard and 5-dim innovation-covariance coverage by @thomaspinder in #211
- fix(sv): re-apply the per-variable log-vol level in the SV forecast (#241) by @thomaspinder in #268
📖 Documentation
- docs(reference): conjugate and volatility reference pages by @thomaspinder in #207
- docs: add a Minnesota prior tutorial for new users by @thomaspinder in #117
Full Changelog: v0.0.8...v0.0.9