paul-buerkner/brms
brms R package for Bayesian generalized multivariate non-linear multilevel models using Stan
📦 brms – 使用 Stan 的贝叶斯回归模型(R)
是什么
- 一个 R 包,允许你通过编写熟悉的 lme4 风格 公式来拟合贝叶斯广义(非线性)多层模型,并自动将其转换为 Stan 代码。
- Stan 负责繁重的工作:运行哈密顿蒙特卡洛(NUTS)从后验分布中抽取样本。
为何重要
- 为统计学家和数据科学家提供了一个高级、用户友好的接口,无需手动编写 Stan 代码即可进行复杂的贝叶斯推断。
- 支持大量响应分布类型(高斯、泊松、二项、有序、零膨胀、自定义混合等)和模型组件(平滑项、自相关、删失数据、缺失值插补、分布回归、多变量响应)。
- 支持灵活的先验设定,以及内置的模型检查、交叉验证和贝叶斯因子比较工具。
主要功能(如 README 所述)
- 公式语法类似
lme4→ 对 R 用户学习成本低。 - 自动生成 Stan 代码(
stancode方法)并编译。 - 支持任意分组结构的多层(分层)建模。
- 通过 mgcv 支持非线性、样条(
s,t2)和平滑项。 - 后验预测检查、
loo/kfold交叉验证、贝叶斯因子。 - 可视化辅助函数(
plot、conditional_effects,与 bayesplot、ggplot2 集成)。 - 与 rstan、rstanarm、bridgesampling、loo、bayesplot、mgcv 等兼容。
典型工作流程(摘自 README)
library(brms)
# 拟合泊松多层模型
fit1 <- brm(count ~ zAge + zBase * Trt + (1|patient),
data = epilepsy, family = poisson())
# 汇总后验抽样结果
summary(fit1)
# 可视化系数
plot(fit1, variable = c("b_Trt1", "b_zBase"))
# 对新数据进行预测(忽略随机效应)
newdata <- data.frame(Trt = c(0,1), zAge = 0, zBase = 0)
predict(fit1, newdata = newdata, re_formula = NA)
README 还展示了如何使用近似留一交叉验证(loo)比较两个模型。
安装
- 稳定版 CRAN 发布:
install.packages("brms") - 开发版:
remotes::install_github("paul-buerkner/brms") - 需要 C++ 编译器(Windows 使用 Rtools,macOS 使用 Xcode),因为 Stan 需要编译。
文档与学习资源
- 官方网站及教程:https://paulbuerkner.com/brms/
- 入门论文(JSS)和高级多层建模论文(R Journal)。
- 博客文章、Stan Discourse 论坛、GitHub 问题追踪器获取帮助。
引用 使用 brms 时,请引用 2017 年 JSS 论文(Bürkner)和 Stan 论文,以及所用的任何辅助包。
总结
brms 是连接 R 的回归公式生态系统与 Stan 强大贝叶斯推断引擎之间成熟、广泛使用的桥梁,使最先进的贝叶斯多层建模对广大用户可及。
相关
- 项目
- 项目
- 项目
- 项目
- 项目