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.