Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----setup--------------------------------------------------------------------
library(glmbayes)
if (requireNamespace("bayesrules", quietly = TRUE)) library(bayesrules)
## ----gp-br-data---------------------------------------------------------------
br_y_df <- data.frame(y = c(1, 1, 1, rep(0, 6))) ## n = 9, sum(y) = 3
br_n <- nrow(br_y_df)
br_shape <- 3
br_rate <- 4
## Analytic posterior
post_shape_br <- br_shape + sum(br_y_df$y) ## 3 + 3 = 6
post_rate_br <- br_rate + br_n ## 4 + 9 = 13
## ----gp-br-plot, eval = requireNamespace("bayesrules", quietly = TRUE)--------
library(bayesrules)
plot_gamma_poisson(
shape = br_shape,
rate = br_rate,
sum_y = sum(br_y_df$y),
n = br_n,
prior = TRUE,
likelihood = TRUE,
posterior = TRUE
)
## ----gp-br-summary, eval = requireNamespace("bayesrules", quietly = TRUE)-----
summarize_gamma_poisson(shape = br_shape, rate = br_rate,
sum_y = sum(br_y_df$y), n = br_n)
## ----gp-analytic--------------------------------------------------------------
gp_analytic <- data.frame(
Example = "Bayes Rules! daily counts",
n = br_n,
`sum(y)` = sum(br_y_df$y),
Posterior = sprintf("Gamma(%d, %d)", post_shape_br, post_rate_br),
Mean = post_shape_br / post_rate_br,
SD = sqrt(post_shape_br) / post_rate_br,
check.names = FALSE
)
knitr::kable(gp_analytic, digits = 4,
caption = "Conjugate Gamma--Poisson posterior (Bayes Rules! scenario)")
## ----gp-glmb------------------------------------------------------------------
gp_beta <- matrix(br_shape / br_rate, 1L, 1L, dimnames = list(NULL, "(Intercept)"))
gp_pf <- dGamma(shape = br_shape, rate = br_rate,
beta = gp_beta, Inv_Dispersion = FALSE)
set.seed(2026)
fit_gp <- glmb(
n = 20000,
y ~ 1,
data = br_y_df,
weights = rep(1L, br_n),
family = poisson(link = "identity"),
pfamily = gp_pf
)
print(fit_gp)
## ----gp-compare---------------------------------------------------------------
gp_compare <- data.frame(
Example = "Bayes Rules! daily counts",
Posterior = gp_analytic$Posterior,
`Analytic Mean` = gp_analytic$Mean,
`Analytic SD` = gp_analytic$SD,
`glmb Post.Mean` = fit_gp$coef.means["(Intercept)"],
`glmb Post.Sd` = sd(fit_gp$coefficients[, "(Intercept)", drop = TRUE]),
check.names = FALSE
)
knitr::kable(gp_compare, digits = 4,
caption = "Analytic vs. glmb() posterior mean and SD")
## ----ht-load, eval = requireNamespace("LearnBayes", quietly = TRUE)-----------
library(LearnBayes)
data("hearttransplants")
cat(sprintf("%d hospitals | sum(y) = %d | sum(e) = %.0f\n",
nrow(hearttransplants), sum(hearttransplants$y), sum(hearttransplants$e)))
## ----ht-prior-----------------------------------------------------------------
alpha0_ht <- 16L; beta0_ht <- 15174L
ex_A <- 66L; yobs_A <- 1L
ex_B <- 1767L; yobs_B <- 4L
## ----ht-albert-analytic-------------------------------------------------------
ht_albert <- data.frame(
Hospital = c("A", "B"),
e = c(ex_A, ex_B),
y = c(yobs_A, yobs_B),
Posterior = c("Gamma(17, 15240)", "Gamma(20, 16941)"),
Mean = c(
(alpha0_ht + yobs_A) / (beta0_ht + ex_A),
(alpha0_ht + yobs_B) / (beta0_ht + ex_B)
),
SD = c(
sqrt(alpha0_ht + yobs_A) / (beta0_ht + ex_A),
sqrt(alpha0_ht + yobs_B) / (beta0_ht + ex_B)
),
check.names = FALSE
)
knitr::kable(ht_albert, digits = 6,
caption = "Albert Ch. 3.2: analytic posterior mean and SD (shape--rate Gamma)")
## ----ht-glmb-A, eval = requireNamespace("LearnBayes", quietly = TRUE)---------
ht_beta <- matrix(alpha0_ht / beta0_ht, 1L, 1L, dimnames = list(NULL, "(Intercept)"))
ht_pf <- dGamma(shape = alpha0_ht, rate = beta0_ht,
beta = ht_beta, Inv_Dispersion = FALSE)
set.seed(2026)
fit_A <- glmb(n = 20000, y ~ 1, data = data.frame(y = yobs_A),
weights = ex_A, family = poisson(link = "identity"), pfamily = ht_pf)
print(fit_A)
## ----ht-glmb-B, eval = requireNamespace("LearnBayes", quietly = TRUE)---------
set.seed(2026)
fit_B <- glmb(n = 20000, y ~ 1, data = data.frame(y = yobs_B),
weights = ex_B, family = poisson(link = "identity"), pfamily = ht_pf)
print(fit_B)
## ----ht-glmb-compare, eval = requireNamespace("LearnBayes", quietly = TRUE)----
ht_compare <- data.frame(
Hospital = c("A", "B"),
e = c(ex_A, ex_B),
y = c(yobs_A, yobs_B),
Posterior = c("Gamma(17, 15240)", "Gamma(20, 16941)"),
`Albert Mean` = ht_albert$Mean,
`Albert SD` = ht_albert$SD,
`glmb Post.Mean` = c(fit_A$coef.means["(Intercept)"],
fit_B$coef.means["(Intercept)"]),
`glmb Post.Sd` = c(sd(fit_A$coefficients[, "(Intercept)", drop = TRUE]),
sd(fit_B$coefficients[, "(Intercept)", drop = TRUE])),
check.names = FALSE
)
knitr::kable(ht_compare, digits = 6,
caption = "Albert analytic vs. glmb() posterior mean and SD")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.