第 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

brmsrstanarm 是 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 常见诊断指标

现代贝叶斯软件通常会输出以下诊断:

  1. trace plot。多条链是否充分混合,是否停留在同一区域。
  2. R-hat。比较链内和链间变异,理想情况下接近 1。若明显大于 1,说明链可能尚未收敛。
  3. 有效样本量。考虑自相关后,相当于多少个独立样本。
  4. 发散转移。Stan 中的 HMC 诊断,提示后验几何形状可能难以探索。
  5. 后验预测检查。模型生成的数据是否类似观测数据。

这些指标不是软件附带的装饰,而是贝叶斯结果可信度的重要组成部分。报告后验均值之前,应先确认抽样过程本身没有明显问题。

20.5 一个推荐工作流

贝叶斯建模可以按以下流程组织:

  1. 明确问题:估计、预测、比较模型,还是量化不确定性?
  2. 写出生成模型:包括似然、参数、层次结构和先验。
  3. 先做小模型:用简单模型检查数据、变量尺度和先验是否合理。
  4. 运行多条链:使用不同初始值,设置足够迭代次数。
  5. 检查诊断:R-hat、有效样本量、trace plot、发散信息。
  6. 做后验预测检查:确认模型能再现关键数据特征。
  7. 报告结果:说明数据、模型、先验、计算设置、诊断和结论。

20.6 报告贝叶斯结果时应包含什么

一份本科课程项目中的贝叶斯分析报告,至少应包括:

  1. 数据来源或模拟数据生成过程;
  2. 模型公式和参数含义;
  3. 先验分布及其理由;
  4. 使用的软件和抽样设置;
  5. 收敛诊断和后验预测检查;
  6. 后验均值、中位数、可信区间和关键后验概率;
  7. 面向经济问题的解释,而不是只贴软件输出。

20.7 本章小结

Stan、JAGS、brms 和 rstanarm 让复杂贝叶斯模型变得可操作,但软件不能替代统计思考。理解似然、先验、后验、MCMC 和诊断,才能正确使用这些工具。对于本科阶段,最重要的是形成完整工作流:写清模型,运行可靠计算,检查诊断,再解释结果。

20.8 练习

  1. 查阅 Stan 或 brms 的线性回归示例,指出其中的似然和先验分别是什么。
  2. 解释 R-hat 接近 1 的含义,以及它为什么不能单独保证模型正确。
  3. 思考为什么使用 brms 公式接口时仍然需要报告先验。
  4. 设计一个贝叶斯分析报告目录,主题可以是消费支出、违约风险或就业状态。