post_sim() returns an
"acpbvar_post", sign_restrict() an
"acpbvar_signs", collect_irfs() an
"acpbvar_irf", each with a print() method;
summary() on impulse responses gives the quantiles by
horizon for selected variables and shocks; plot() on
impulse responses selects panels. The objects remain the documented
lists and arrays, so existing code is unaffected; subsetting an
"acpbvar_irf" with [ returns a plain
array.collect_irfs() carries variable names (from
post_sim()) and shock names (from the rows of
S) as dimnames.plot_irfs() gains vars and
shocks to select panels, ref to overlay a
second set of responses (dashed median, dotted band), xlab
and mfrow; with a single shock the panel titles are the
variable names.simulate_var_example(): the impact matrix is recentred
so that the true responses are typical elements of the sign-identified
set (same signs and persistence as before).monetary help page of
bsvarSIGNs mislabels it); the sample ends in November 2007.monetary data shipped by bsvarSIGNs (in Suggests),
with a comparison of impulse responses and timings against
bsvarSIGNs.sign_restrict() gains
method = c("per_draw", "joint"): the joint accept-reject of
Chan’s replication code (one rotation per posterior draw) is available
next to the default per-draw search.build_s2() computes the AR(4) residual variances by OLS
(mean of squared residuals), as in Chan’s get_resid_var.m,
instead of stats::arima().compute_irf() uses the VMA recursion instead of
companion-matrix powers (identical output, much faster for large
n * p).sign_restrict() gains horizons: sign
restrictions can be imposed on the impulse responses at horizons
0, ..., horizons, with the same matrix at every horizon or
a 3-d array with one sign matrix per horizon.Initial release (package formerly named
samplerChan).
Fixes relative to the development version of May 2026:
check_sign() now checks every variable under partial
identification (it previously looped over the number of shocks), and
sign_restrict() defaults n_id to
nrow(S).sign_restrict() records the posterior draws for which
no rotation was found within max_tries (attribute
failed_draws) and warns when any.optim_hyper() no longer imposes a discontinuous
kappa < 1 penalty; post_sim() stores the
optimiser convergence code in spec$convergence and warns on
non-convergence.R/validate.R).rgamma() and one triangular solve. Same
draws for the same seed, roughly 200x faster for 50 variables and 4
lags.