Major release. The Polya-Gamma sampler and its native C engine,
DIC-based selectModel(), and the identifiability-aware
convergence diagnostics in this release were contributed by Chris
Kypridemos.
method = "pg", now the
default): a joint Polya-Gamma data-augmentation sampler with exact full
conditionals and no Metropolis tuning. Supports overdispersion,
age/period/cohort heterogeneity and period/cohort covariates natively.
The legacy Taylor sampler remains available via
method = "taylor".pg_engine = "C", the default) with an equivalent pure-R
reference (pg_engine = "R"); the two agree to numerical
tolerance.mcmc.options values number_of_iterations,
burn_in and step may now be set to
"auto" (the default), which chooses the MCMC length from
the rarity of the data. Any value given as a number is used exactly as
before.selectModel(): automatic APC model selection by
DIC.prior_scale argument for
method = "pg".checkConvergence() now assesses the identified
quantities (smoothing precisions, intercept and the fitted linear
predictor per Lexis cell), which are invariant to the age-period-cohort
trend aliasing, rather than the raw effect chains that drift along the
non-identified trend.effects.apc() and plot.apc() gain a
convention argument that fixes the non-identified linear
trend to a chosen display gauge, making the effect curves reproducible
between runs; plot.apc() also handles any number of
quantiles and zero-covariate models.print.apc() now also reports the intercept (5%/50%/95%
quantiles).predict_apc(periods = 0) crash (downward-sequence
off-by-one).predict_apc() logit overflow: use
plogis() instead of exp(x)/(1+exp(x)), which
returned NaN for large forecast logits and crashed
downstream.bamp():
age/period/cohort = NULL is now
accepted (previously errored with “argument is of length zero”).predict_apc(): age-period models without a cohort
effect can now be predicted, and non-integer population/exposure no
longer produces NA.bamp(..., method = "pg"): a chain that fails under
forked parallelism (parallel::mclapply) now reports its
actual error instead of the opaque “subscript out of bounds” that
resulted from silently indexing into the failed chain’s result.bamp()’s convergence warning being tied to
verbose backwards: it now prints the “did not converge”
message when verbose = TRUE and stays silent when
verbose = FALSE, as intended.bamp() and stored in the returned object
(model$effects), so a separate call to
effects.apc() is no longer needed for the default median
summary.effects.apc(): cache check was looking for
x$effect (singular) instead of x$effects
(plural), and referenced an undefined variable in the cache
condition.cohort="rw2+het" was not recognized correctly).period_covariate handling that silently
prevented vector coercion.checkConvergence(): cohort convergence check used
age hyperparameter instead of cohort hyperparameter.checkConvergence() info
output.GetRNGstate/PutRNGstate pairing in
random number generation.mclapply with socket-based
makeCluster/parLapply for reliable parallel
execution on all platforms, including macOS GUI environments (RStudio).
Falls back to sequential if cluster setup fails.bibentry().