[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 セッションのグローバル環境で評価されるため、副作用が以降のチャンクに残る。 ## 関連ノート なし