第 20 章 现代贝叶斯计算工具简介
前几章介绍了网格、Laplace 近似和手写 MCMC。这些内容有助于理解贝叶斯计算的原理。但在真实项目中,复杂模型通常依赖成熟软件完成,例如 Stan、JAGS、brms 和 rstanarm。本章的目标不是把这些工具的语法全部讲完,而是帮助读者理解它们适合什么场景、输出如何解释、诊断为什么重要。
本章代码块主要作为工作流示意,默认不在编译教材时运行。
20.1 Stan 与 Hamiltonian Monte Carlo
Stan 是现代贝叶斯建模中非常常用的工具。用户写出数据、参数和模型,Stan 使用 Hamiltonian MonteCarlo(HMC)及其自适应版本 NUTS 进行后验抽样。
随机游走 Metropolis 像是在参数空间中试探性移动,维度高时效率可能很低。HMC 利用后验密度的梯度信息,沿着更有方向感的路径移动,因此在连续参数模型中通常更高效。对本科生而言,只需把 HMC 理解为“利用梯度信息改进 MCMC 移动方式”的算法即可,不需要掌握物理 Hamiltonian 系统的细节。
一个简单线性回归 Stan 模型大致如下:
data {
int<lower=1> N;
vector[N] y;
vector[N] income;
}
parameters {
real alpha;
real beta;
real<lower=0> sigma;
}
model {
alpha ~ normal(0, 10);
beta ~ normal(0, 10);
sigma ~ exponential(1);
y ~ normal(alpha + beta * income, sigma);
}Stan 的优势是灵活、诊断丰富、适合连续参数模型。限制是模型语法需要学习,离散参数通常要边际化处理。
20.2 JAGS
JAGS 使用图模型语言描述贝叶斯模型,常与 Gibbs 抽样和 Metropolis 步结合。它的语法与 BUGS 系列相近,适合许多层次模型和教育场景。
一个 JAGS 线性回归模型示意如下:
model {
for (i in 1:N) {
y[i] ~ dnorm(mu[i], tau)
mu[i] <- alpha + beta * income[i]
}
alpha ~ dnorm(0, 0.01)
beta ~ dnorm(0, 0.01)
tau ~ dgamma(1, 1)
sigma <- 1 / sqrt(tau)
}JAGS 的优点是模型表达接近概率图,适合教学;缺点是在某些高相关连续参数模型中效率不如 Stan。
20.3 brms 与 rstanarm
brms 和 rstanarm 是 R 中更高层的贝叶斯建模接口。它们允许用户使用类似 lm() 或 glm() 的公式语法拟合贝叶斯模型,底层通常调用 Stan。
例如,使用 brms 拟合消费支出回归可以写成:
library(brms)
fit <- brm(
consumption ~ income + employed,
data = survey,
family = gaussian(),
prior = c(
prior(normal(0, 10), class = "b"),
prior(exponential(1), class = "sigma")
),
chains = 4,
iter = 2000,
seed = 2026
)
summary(fit)
posterior_predict(fit)这类公式接口非常适合应用研究,但也容易让使用者忽略模型细节。因此,即使使用高级接口,也要清楚:响应变量分布是什么、连接函数是什么、先验是什么、抽样诊断是否通过。
20.4 常见诊断指标
现代贝叶斯软件通常会输出以下诊断:
- trace plot。多条链是否充分混合,是否停留在同一区域。
- R-hat。比较链内和链间变异,理想情况下接近 1。若明显大于 1,说明链可能尚未收敛。
- 有效样本量。考虑自相关后,相当于多少个独立样本。
- 发散转移。Stan 中的 HMC 诊断,提示后验几何形状可能难以探索。
- 后验预测检查。模型生成的数据是否类似观测数据。
这些指标不是软件附带的装饰,而是贝叶斯结果可信度的重要组成部分。报告后验均值之前,应先确认抽样过程本身没有明显问题。
20.5 一个推荐工作流
贝叶斯建模可以按以下流程组织:
- 明确问题:估计、预测、比较模型,还是量化不确定性?
- 写出生成模型:包括似然、参数、层次结构和先验。
- 先做小模型:用简单模型检查数据、变量尺度和先验是否合理。
- 运行多条链:使用不同初始值,设置足够迭代次数。
- 检查诊断:R-hat、有效样本量、trace plot、发散信息。
- 做后验预测检查:确认模型能再现关键数据特征。
- 报告结果:说明数据、模型、先验、计算设置、诊断和结论。
20.6 报告贝叶斯结果时应包含什么
一份本科课程项目中的贝叶斯分析报告,至少应包括:
- 数据来源或模拟数据生成过程;
- 模型公式和参数含义;
- 先验分布及其理由;
- 使用的软件和抽样设置;
- 收敛诊断和后验预测检查;
- 后验均值、中位数、可信区间和关键后验概率;
- 面向经济问题的解释,而不是只贴软件输出。