[brms](https://paulbuerkner.com/brms/) は、[[Stan]] を裏で呼び出してベイズ回帰モデルを推定する [[R]] パッケージである。`lm()` / `glm()` / `lme4::lmer()` と同じ [[formula 構文]] でモデルを記述でき、[[頻度論]] モデルからの移行コストが低い。
Paul-Christian Bürkner が頻度論ユーザーのベイズ移行を意図して 2017 年に公開した。rstanarm と並ぶ高水準フロントエンドで、階層モデル / 一般化線形モデル / 順序回帰 / 生存分析 / ゼロ過剰モデルなど広いモデルクラスをサポートする。
## インストール
brms の [[MCMC バックエンド]] は [[CRAN]] 配布の rstan か、[[r-universe]] 配布の cmdstanr のどちらかを選べる。rstan は brms と一緒に入る標準だがコンパイル時間が長く、R コミュニティでも近年は高速な cmdstanr が広く採用されている。
cmdstanr は R 側のラッパーで、C++ 製の MCMC エンジンである CmdStan を別途手元でビルドして組み合わせる。
brms と cmdstanr はプロジェクトの [[renv]] 配下に置き、CmdStan は `~/.cmdstan/` にグローバルにインストールして全プロジェクトから共有する。
### 1. リポジトリの登録
プロジェクトの `.Rprofile` に r-universe を追加する。
```r
options(
repos = c(
CRAN = "https://cloud.r-project.org",
STAN = "https://stan-dev.r-universe.dev"
)
)
```
> [!warning]
> `options(repos = ...)` は既存の repos を置き換える挙動。`STAN` だけ指定すると `CRAN` が失われ、CRAN 上のパッケージが取得できなくなるため、両方を明示する。
### 2. R パッケージのインストール
R を再起動して `.Rprofile` を反映させたのち、[[renv]] 配下でパッケージをインストールする。
```r
renv::install(c("cmdstanr", "brms", "tidybayes", "bayesplot"))
renv::snapshot()
```
> [!note]
> `tidybayes` と `bayesplot` は brms の周辺パッケージで、事後サンプルの操作と可視化で一緒に使うことが多いため、一緒に入れておく。
### 3. CmdStan 本体のビルド
ソースから C++ バイナリをビルドする。並列度は手元のコア数に合わせて調整する。
```r
cmdstanr::install_cmdstan(cores = 4)
```
### 4. 動作確認
`brm()` で 1 つモデルを走らせ、サンプリングの進捗が表示されればセットアップは完了である。バックエンドは `brm()` の `backend` 引数で指定する。
```r
library(brms)
fit <- brm(mpg ~ wt, data = mtcars, chains = 2, iter = 1000, backend = "cmdstanr")
```
> [!note]
> 多くの R パッケージは `packageVersion()` などで存在確認すれば済む。brms は内部で cmdstanr → CmdStan → コンパイル → MCMC と多段で連携するため、各単体の確認では結合部の問題(バックエンド設定の反映漏れ等)を見逃す。
>
> 最小モデルを 1 度走らせれば、パイプライン全体を 1 コマンドで検証できる。
> [!note]
> `.Rprofile` で `options(brms.backend = "cmdstanr")` をグローバルに固定する方法もあるが、Quarto レンダリング時に knitr / renv の初期化と読み込み順がぶつかり、設定が反映されないことがある。
>
> Quarto で固定したい場合は setup チャンクで `options(brms.backend = "cmdstanr")` を呼ぶ。`.Rprofile` と違いチャンクは knitr セッションのグローバル環境で評価されるため、副作用が以降のチャンクに残る。
## 関連ノート
なし