为何收录

做贝叶斯分析的研究者常用 Stan 写概率模型,而数据整理、作图和报告多半在 R 里完成。CmdStanR 把两边接起来:模型在 R 中调用,计算交给独立的 CmdStan 进程,结果再按 posterior 包的格式读回 R。由于 CmdStan 与 R 包分开安装,Stan 发布新版本时,通常升级 CmdStan 即可用上,不必等 R 包跟进。它适合已经用 R 做统计分析、需要自己编写 Stan 模型的研究生和研究人员,也适合用 brms 等上层包拟合多层模型、希望改用 CmdStan 作为计算后端的用户。

与 rstan 的区别

rstan 是 Stan 更早的 R 接口。按官方教程的对比,两者的根本差别在于怎样调用 Stan 的 C++ 代码:rstan 借助 Rcpp 在 R 进程的内存中运行 Stan;CmdStanR 在外部进程中运行 CmdStan,再读取输出文件,只有暴露 Stan 函数、计算对数密度和梯度等可选功能才用到 Rcpp。由此带来几点不同。CmdStanR 一方:升级 Stan 往往只需升级 CmdStan;推断过程与 R 进程隔离,推断中途出错时不容易把整个 R 会话一起带崩;结果先写入 CSV 文件、需要时才读进 R,R 会话的内存占用可能更低;许可证是 BSD 3-Clause,比 rstan 的 GPL(≥3)宽松,与 CmdStan 和 Stan C++ 源码一致。

rstan 一方的长处在安装:CRAN 为 Windows 和 macOS 提供 rstan 的二进制包,基于 rstan 的 R 包还能附带预编译好的模型,用户不装 C++ 工具链也能运行;它也不使用 R6 类,写法对多数 R 用户更熟悉。CmdStanR 用户开发 R 包时,可以用 instantiate 在安装阶段编译模型,但 CRAN 的构建机器上没有 CmdStan,这类包目前需要在装有 CmdStan 和 C++ 工具链的环境中从源码安装。

与 posterior、bayesplot、brms 的配合

CmdStanR 只负责运行算法,汇总和作图交给 Stan 生态里的其他包,官方把这种模块化写进了设计目标。posterior 是它的必需依赖:$summary() 内部调用 posterior::summarise_draws(),默认给出均值、中位数、分位数、R-hat 和有效样本量等指标;$draws() 返回 posterior 定义的 draws_array、draws_df 等格式。bayesplot 和 loo 列为建议依赖:抽样结果可以直接传给 bayesplot 的 mcmc_hist() 等绘图函数,下图就是官方教程这样画出的后验分布;拟合对象的 $loo() 方法则配合 loo 包做近似留一交叉验证,用于模型比较。

bayesplot 的 mcmchist 绘制的伯努利示例模型参数 theta 后验抽样直方图,蓝色柱形显示取值分布

官方入门教程的示例:伯努利模型参数 theta 的后验抽样直方图,由 mcmc_hist(fit$draws("theta")) 绘制。图片:Jonah Gabry、Rok Češnovar、Andrew Johnson / Stan Development Team,来源 CmdStanR 1.0 候选版文档(Getting started with CmdStanR),许可 CC BY 4.0。

brms 用 R 公式语法描述多层回归等模型,再自动生成 Stan 代码。它的 brm() 函数有一个 backend 参数,默认值是 "rstan",设为 "cmdstanr" 就改由 CmdStanR 拟合,也可以用 options(brms.backend = "cmdstanr") 在整个 R 会话中切换;这时传给 Stan 的额外参数会转交 CmdStanR 的 $sample() 或 $variational()。试用候选版要注意版本搭配:公告发布时,与它兼容的是 GitHub 上 brms 的 master 分支(对应 PR #1947),instantiate 已在 CRAN 发布兼容的 0.2.4 版,rethinking 则要安装 PR #477 的分支。公告还提到,新进度条同样适用于 brms 等以 CmdStanR 为后端的包。

局限与验收建议

选用前有几项限制需要确认。第一,必须有可用的 C++ 工具链,每个模型都要先编译成可执行文件才能运行;在无法安装编译环境的机房或教学电脑上,rstan 的二进制包更省事。第二,1.0 目前只是候选版,含有不兼容改动,正式版发布前仍可能调整;已有脚本如果用到 $compile()、compile = FALSE 或未具名的 cpp_options,需要按更新日志改写。新的重新编译逻辑正是候选期的测试重点,团队请用户报告不该重编译却重编译、该重编译却没有重编译的情况,以及与 make/local、用户头文件、#include 路径、R 包内模型相关的问题。第三,部分功能仍属实验性:新进度条目前只支持 MCMC,ADVI 变分推断在 CmdStan 的运行输出中也标注为实验性算法。此外,CmdStanR 用 R6 对象和 $ 调用方法,和常见的 R 函数写法不同,需要适应。

想判断候选版是否适合自己的项目,可以做一个小规模验收(这是建议,本文未执行):在独立的 R 环境里从 v1.0 分支安装,用一个现有的 Stan 模型依次运行 cmdstan_model() 和 $sample(),固定随机种子,对照旧版本检查 $summary() 和 $diagnostic_summary() 的结果;再只改动一个 #include 文件或一项 cpp_options,看再次调用 cmdstan_model() 时是否按预期重新编译。遇到问题时,按公告要求附上 mod$build_info() 的输出,到 GitHub issues 或论坛帖下反馈。

参考文献

  1. Jonah Gabry. CmdStanR 1.0 release candidate is now available. Stan Forums,2026-10-15。

  2. stan-dev/cmdstanr. GitHub,2026-10-21 核验。

  3. LICENSE.md(BSD 3-Clause License). GitHub,2026-10-21 核验。

  4. cmdstanr v0.9.0. GitHub,2025-03-30 发布。

  5. DESCRIPTION(v1.0.0-rc1 标签). GitHub,2026-10-21 核验。

  6. R Interface to CmdStan(1.0 候选版文档). Stan Development Team,2026-10-21 核验。

  7. Jonah Gabry, Rok Češnovar, Andrew Johnson. Getting started with CmdStanR. CmdStanR 1.0 候选版文档,2026-10-21 核验。

  8. brm(): Fit Bayesian Generalized (Non-)Linear Multivariate Multilevel Models. brms 文档,2026-10-21 核验。

  9. CmdStan v2.40.0. GitHub,2026-10-21 核验。

  10. 信息由 Scholay 学术一站式平台 整理并发表,如有侵权请反馈下架。

  11. 信息同步发表于恩特学术,智能时代的学者社区