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 強大貝葉斯推論引擎之間成熟且廣泛使用的橋樑,使最先進的貝葉斯多層建模對廣大使用者可及。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案