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