Multi-response lmb():
lmb() now handles both univariate and
multivariate responses with a single unified interface, mirroring the
behaviour of R’s lm(). When the response
has a single column the result is an lmb
object (unchanged from prior releases). When the formula specifies
multiple response columns (e.g. cbind(y1, y2) ~ x),
lmb() fits a separate Bayesian linear
model per response column and returns a named list with class
mlmb. For the multi-response case,
pfamily must be a list of
pfamily objects with exactly one entry per
response column; passing a single pfamily
object is an error. Summary, print, and coefficient methods for
mlmb objects are included.
Conjugate GLM priors (Poisson, binomial, Gamma):
New closed-form IID sampling paths for intercept-only models with
identity links. dBeta() with
rBeta_reg() supports
Beta–Binomial(identity) conjugate updates;
dGamma(Inv_Dispersion = FALSE) with
rGamma_Conjugate_reg() supports
Gamma–Poisson(identity) and Gamma–Gamma(identity) rate priors.
Prior_Setup() can calibrate conjugate
hyperparameters for these families (weighted Poisson rate and binomial
probability defaults). See ?dBeta,
?dGamma, and the Chapter 02 / Chapter
07–11 vignettes.
Vignette structure: Reworked Chapter
00 as a roadmap across five main parts plus technical
appendices. Chapter 02 is now a conceptual introduction
to single-parameter conjugacy; worked examples move to Chapter
02-S01 through Chapter 02-S05 (Beta–Binomial,
Normal–Normal, Gamma–Poisson, exposure-weighted Poisson, and related
topics). A Companion textbooks section in Chapter 00
indexes optional Bayes Rules! and LearnBayes appendices
tied to the main GLM chapters.
opencltools import: Core
host/runtime OpenCL discovery and diagnostics (detect_*,
PATH helpers, environment checks) now live in the
opencltools package (Imports,
>= 0.8.0). glmbayes keeps package-specific entry
points (has_opencl(), diagnose_glmbayes())
that report compile-time OpenCL status for this build while delegating
shared GPU/runtime checks—reducing duplicated maintenance in
glmbayes.
Bayes Rules! companion examples: Optional
vignette appendices reproduce book datasets and published posterior
summaries using lmb(),
glmb(),
Prior_Setup(), and
dNormal() (suggested package
bayesrules for data only). Coverage
includes bikes (Ch. 03),
weather_perth (Ch. 08–09),
equality_index (Ch. 10), Gamma–Poisson
conjugacy (Ch. 02-S04), and a scope note for Gamma regression (Ch. 11).
Comparison tables use printed book values, not live
rstanarm fits. See Chapter
00 § Companion textbooks.
LearnBayes examples:
Chapter 02-S04, Appendix A, maps the
hearttransplants example from Albert
(2009) / LearnBayes (exposure-weighted Gamma–Poisson
conjugacy) to glmb() with analytic Albert
posteriors for verification (suggested package
LearnBayes).
Prior-vs-data guard for
dIndependent_Normal_Gamma sampling:
rindepNormalGamma_reg() now rejects calls
where the Gamma (precision) part of the prior carries more effective
prior observations than the data supply: inverting the
Prior_Setup() calibration
shape = (n_prior + 1 + p)/2, sampling requires
n_prior <= n_w = sum(weights) (equivalently a prior
weight pwt <= 0.5). Rationale: the dispersion envelope
caps its log-tilt at n_w/2 - the data contribution
to the posterior Gamma shape (Remark 4.1.3 of the ING vignette) - a
strengthening of the validity condition lm_log2 < shape2
that presumes a likelihood-dominated regime. Prior-dominated calls could
previously bind that cap on every envelope build (console
UB3A mean slope warnings) and silently degrade the
envelope. Note that n_prior here is the effective sample
size of the Gamma component specifically; under the
Prior_Setup() calibration the Gamma and coefficient parts
share a common n_prior, so the two are not fully
independent.
Expanded testthat coverage for
dBeta() / binomial(identity) conjugate
paths and related glmb()
integration.
skip_on_cran() (in addition to
skip_if_no_opencl()), consistent with
existing Boston/Cleveland OpenCL tests. OpenCL coverage remains for
local checks and source builds with OpenCL; CRAN checks avoid
parallel/GPU-heavy tests that could trigger CPU time vs elapsed
time NOTES.Vignettes: A vignette that previously used the
notangle engine now uses the standard R Markdown vignette
machinery (knitr / rmarkdown::html_vignette),
so builds align with CRAN expectations and vignette index ordering
should be consistent with the rest of the package.
OpenCL sources (inst/cl): Removed
unused or superseded material, consolidated kernels and library
fragments, and aligned .cl layout and dependency tagging
with the conventions used in ‘openclport’ and ‘nmathopencl’ (prelude,
shims, nmath/ stems, family kernels under
src/). See inst/cl/README.md for how the
assembled program is stitched.
OpenCL program assembly: Reworked loading so the
full OpenCL program is built from explicit fragments (global header,
nmath closure, family/link kernels) rather than ad hoc
concatenation—clearer ownership of what enters GPU compilation and
easier parity with CPU paths.
Tests: Added and expanded testthat coverage aimed at OpenCL code paths (including binomial examples that exercise GPU envelope evaluation), complementing existing Cleveland-style checks.
Bug fix — binomial OpenCL: Binomial
f2_f3 OpenCL kernels now evaluate the data log-likelihood
with the same proportion × trial-count semantics as
dbinom_glmb on the CPU (round
successes and trials, clamped probability). This fixes envelope / PLSD
failures for aggregated binomial data
(e.g. cbind(successes, failures) /
MASS::menarche) where the previous kernels treated
y like a raw success count.
\donttest{} for
CRAN compliance.First CRAN submission. This release is a stable pre-release with a near-complete feature set relative to earlier development builds.
glmb() is a Bayesian analog for the classical
glm() function while lmb() covers Gaussian
models. Calls largely mirror those for the classical functions but
leverage pfamilies for prior specifications. Method functions largely
mirror those for the classical functions. Samples generated by the
functions are largely iid samples (no MCMC convergence dignostics are
needed).
Most of the families implemented in the glm() function
are also implemented in the glmb() function (the
lmb() function covers only gaussian() families). Link
functions that lead to log-concave likelihood functions are generally
implemented. Specifically, we have the following:
Supported likelihoods: gaussian (identity), Poisson / quasi-Poisson (log), binomial / quasi-binomial (logit, probit, cloglog), Gamma (log).
pfamily constructors are used to specify priors and play
the same kind of role for the prior specifications as
family constructors and link functions play
for the likelihoods. Specifically, we have the following:
Supported Priors: Normal (all families/links), Normal–Gamma and independent Normal–Gamma (gaussian families), and Gamma-on-precision (gaussian and Gamma families).
The package comes with a convenient Prior_Setup()
function that provides default prior input parameters for each of the
implemented models. Basic calls (without tailoring) mirror traditional
calls to the glmb() and lmb() functions
respectively and only require the user to provide the model formula and
(if not the gaussian family) the family/link function.
The function can also be used to easily adjust prior specifications (see documentation for details).
The package comes with extensive method functions that mirror those
for the classical functions. These include dedicated
print(), summary(), predict() and
simulate() functions.
The package comes with lower level modeling/simulation functions that
advanced users can use to implement block Gibbs samplers. These
generally come with less overhead than the glmb() and
lmb() functions and are called internally by the the higher
level modeling functions.
Some of the simulation functions comes with use_parallel and use_opencl options that speed up simulation for higher dimensional models.
The package also comes with extensive help files for the varios functions that are complemented with a rich set of vignettes. A large number of examples and demos are also availabel (see the READM.md file for a sample).
The notes below summarize major work during the initial development series before the 0.9.0 pre-release.
Prior_Setup() to support family-specific prior
construction.lmb(), rlmb(), and
OpenCL models.