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 交叉验证、贝叶斯因子。
  • 可视化辅助函数(plotconditional_effects,与 bayesplotggplot2 集成)。
  • rstanrstanarmbridgesamplingloobayesplotmgcv 等兼容。

典型工作流程(摘自 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 强大贝叶斯推断引擎之间成熟、广泛使用的桥梁,使最先进的贝叶斯多层建模对广大用户可及。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目