Skip to content

v0.0.9

Choose a tag to compare

@thomaspinder thomaspinder released this 30 Jul 09:07
2fd92a7

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() and FittedVAR.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

Full Changelog: v0.0.8...v0.0.9