brms徽标Stan标志

业务风险管理系统

R-CMD检查 覆盖率状态 CRAN版本 下载

概述

这个业务风险管理系统该包提供了一个接口,使用Stan拟合贝叶斯广义(非)线性多元多级模型,Stan是一个用于执行完全贝叶斯推断的C++包(请参阅https://mc-stan.org/). 公式语法与包lme4的语法非常相似,为执行回归分析提供了一个熟悉而简单的界面。支持广泛的响应分布,允许用户在多级上下文中拟合线性、稳健线性、计数数据、生存率、响应时间、有序、零膨胀,甚至自定义的混合模型。进一步的建模选项包括非线性和平滑项、自相关结构、删失数据、缺失值插补等。此外,可以预测响应分布的所有参数,以便进行分布回归。也可以拟合多变量模型(即具有多个响应变量的模型)。先前的规范是灵活的,明确鼓励用户应用实际反映其信念的先前发行版。模型拟合可以很容易地与后验预测检验、交叉验证和贝叶斯因子进行评估和比较。

资源

如何使用brms

图书馆(brms)

作为一个简单的例子,我们使用泊松回归对癫痫患者的癫痫发作计数进行建模,以调查治疗(用变量表示Trt公司)可以减少癫痫发作次数,治疗效果是否随治疗前癫痫发作的(标准化)基线次数而变化(可变z基准). 由于我们每个人都有多个观测值,因此会合并一个组级截距,以说明数据中产生的依赖性。

设备1<- 商业风险管理(计数~ z年龄+ z基准* Trt公司+ (1|患者),
            数据=癫痫,家庭= 泊松())

结果(即后牵引)可以使用

总结(适合1)
#>家族:poisson
#>链接:mu=log
#>公式:计数~zAge+zBase*Trt+(1|患者)
#>数据:癫痫(观察次数:236)
#>绘制:4条链,每条链的iter=2000;预热=1000;薄=1;
#>预热后总抽吸=4000
#>
#>多级超参数:
#>~患者(级别数:59)
#>估算估算值。错误l-95%CI u-95%CI Rhat Bulk_ESS Tail_ESS
#>sd(截距)0.59 0.07 0.46 0.74 1.01 566 1356
#>
#>回归系数:
#>估算估算值。错误l-95%CI u-95%CI Rhat Bulk_ESS Tail_ESS
#>截距1.78 0.12 1.55 2.01 1.00 771 1595
#>z年龄0.09 0.09-0.08 0.27 1.00 590 1302
#>z基准0.71 0.12 0.47 0.96 1.00 848 1258
#>Trt1-0.27 0.16-0.60 0.05 1.01 749 1172
#>z基准:Trt1 0.05 0.17-0.30 0.38 1.00 833 1335
#>
#>使用抽样(NUTS)对图纸进行抽样。对于每个参数,Bulk_ESS
#>和Tail_ESS是有效的样本量度量,Rhat是潜在的
#>分裂链上的比例折减系数(收敛时,Rhat=1)。

在输出的顶部,给出了有关模型的一些一般信息,例如族、公式、迭代次数和链。接下来,根据标准偏差和(如果每个分组因子有多个组级效应;此处未显示)组级效应之间的相关性,分别显示每个分组因子的组级效应。在输出的底部,显示了人口层面的影响(即回归系数)。如果合并,还将给出自相关效应和系列特定参数(例如,正常模型中的剩余标准偏差“sigma”)。

通常,使用后验分布的平均值(“估计值”)和标准偏差(“估计误差”)以及基于分位数的双侧95%可信区间(“l-95%置信区间”和“u-95%置信区间”)来总结每个参数。我们看到Trt公司阴性,95%置信区间重叠为零。这表明,平均而言,治疗可能会减少一定数量的癫痫发作次数,但基于数据和应用模型的证据并不十分有力,而且根据标准决策规则,证据仍然不足。此外,我们发现几乎没有证据表明治疗效果随基线发作次数而变化。

最后三个值(“ESS_bulk”、“ESS_tail”和“Rhat”)提供了算法估计该参数后验分布的程度信息。如果“Rhat”大大大于1,则算法尚未收敛,需要运行更多迭代和/或设置更强的先验值。

为了直观地研究链以及后验分布,我们可以使用情节方法。如果我们只想看看Trt公司z基准,我们要

情节(图1,变量= c(“b_Trt1”,“b_zBase”))

可以通过运行以下命令执行更详细的调查launch_shinystan(fit1)为了更好地理解预测因素与反应的关系,我建议条件_效果方法:

情节(条件_效果(图1,效果= “zBase:Trt”))

此方法使用一些幕后预测功能,也可以直接调用。假设我们想预测治疗组中一个人的反应(即癫痫发作次数)(Trt=1)和对照组(Trt=0)平均年龄和以往癫痫发作的平均次数。我们无法使用

新数据<- 数据帧(Trt公司= c(0,1),z年龄= 0,z基准= 0)
预测(图1,新数据=新数据,重新公式= )
#>估算估算值。错误Q2.5 Q97.5
#> [1,]  5.91200  2.494857    2    11
#> [2,]  4.57325  2.166058    1     9

我们需要设置re_formula=不适用为了不受群体层面的影响。预测方法返回响应的预测已安装方法返回回归线的预测。

已安装(图1,新数据=新数据,重新公式= )
#>估算估算值。错误Q2.5 Q97.5
#> [1,] 5.945276 0.7075160 4.696257 7.450011
#> [2,] 4.540081 0.5343471 3.579757 5.665132

这两种方法都返回相同的估计值(直至随机误差),而后者的方差较小,因为回归线中的不确定性小于每个响应中的不确定度。如果我们想预测原始数据的值,只需将新数据参数为空。

假设,我们想调查模型中是否存在过度分散,即响应分布未考虑的剩余变化。为此,我们引入了第二组级截距,以捕获可能的过度分散。

适合2<- 商业风险管理(计数~ z年龄+ z基准* Trt公司+ (1|患者)+ (1|obs),
            数据=癫痫,家庭= 泊松())

然后,我们可以通过近似leave-one-out(LOO)交叉验证继续比较这两个模型。

厕所(图1、图2)
#>型号“fit1”的输出:
#>
#>由4000乘以236对数似然矩阵计算得出。
#>
#>估计SE
#>elpd_loo-671.7 36.6
#>p_loo 94.3第14.2页
#>卢奥1343.4 73.2
#> ------
#>elpd_loo的MCSE为NA。
#>MCSE和ESS估计假定MCMC提取(r_eff in[0.4,2.0])。
#>
#>Paretok诊断值:
#>计数百分比最小ESS
#>(-Inf,0.7](良好)228 96.6%157
#>(0.7,1](不良)7 3.0%<NA>
#>(1,Inf)(非常糟糕)1 0.4%<NA>
#>有关详细信息,请参阅帮助(“Preto-k-diagnostic”)。
#>
#>型号“fit2”的输出:
#>
#>由4000乘以236对数似然矩阵计算得出。
#>
#>估计SE
#>elpd_loo-596.8 14.0
#>p_loo 109.7第7.2页
#>卢奥1193.6 28.1
#> ------
#>elpd_loo的MCSE为NA。
#>MCSE和ESS估计假定MCMC提取(r_eff in[0.4,1.7])。
#>
#>Paretok诊断值:
#>计数百分比最小ESS
#>(-Inf,0.7](良好)172 72.9%83
#>(0.7,1](差)56 23.7%<NA>
#>(1,Inf)(非常糟糕)8 3.4%<NA>
#>有关详细信息,请参阅帮助(“Preto-k-diagnostic”)。
#>
#>模型比较:
#>elpd_diff se_diff
#>适合2 0.0 0.0
#>图1-74.9 27.2

这个厕所比较模型时的输出有点冗长。我们首先看到两个模型的单独LOO摘要,然后是它们之间的比较。自更高埃尔帕德(即,预期的对数后验密度)值表明拟合较好,我们看到模型解释了过度分散(即。,设备2)更适合。然而,我们还发现,在个别LOO输出中,有几个有问题的观测值,其近似值可能并不十分准确。为了恰当地处理这个问题,我们需要回到其他方法,例如重新定位kfold公司但这需要对模型进行多次改装,这对于快速示例来说耗时太长。我们上面展示的后处理方法只是冰山一角。要获得适用于拟合模型对象的完整方法列表,请键入方法(class=“brmsfit”).

开发和维护开放源码软件是对科学进步的一项重要但往往被低估的贡献。因此,无论何时您使用开源软件(或一般软件),请确保适当引用它,以便开发人员的工作得到赞扬。

使用brms时,请引用以下一个或多个出版物:

由于brms是Stan的高级接口,请另外引用Stan(另请参阅https://mc-stan.org/users/citations网站/):

此外,brms依赖于其他几个R包,当然也依赖于R本身。要了解如何引用R及其包,请使用引用功能。brms有一些特定于某些包的功能。这个rstan公司与一起包装卢比使Stan可以在R中方便地访问。可视化和后预测检查基于贝叶斯图ggplot2.近似的留一交叉验证,使用厕所相关方法通过厕所包裹。基于边际似然的方法,如贝叶斯因子通过以下方式实现桥式取样包裹。通过指定的样条曲线t2时间功能依赖于mgcv公司。如果您使用其中一些功能,请考虑引用相关软件包。

常见问题

如何安装brms?

使用CRAN安装最新版本

安装.包(“brms”)

当前的开发版本可以通过以下途径从GitHub下载

如果(requireNamespace(必需命名空间)(“遥控器”)) {
  安装.包(“遥控器”)
}
遥控器::安装github(“保罗-伯克纳/brms”)

因为brms是基于Stan的,所以需要一个C++编译器。程序Rtools(可从https://cran.r-project.org/bin/windows/Rtools/)附带了适用于Windows的C++编译器。在Mac上,您应该安装Xcode。有关如何运行编译器的更多说明,请参阅https://github.com/stan-dev/rstan/wiki/rstan-Getting-Started.

我是新手。我从哪里开始?

详细说明和案例研究在软件包的大量小插曲中给出。请参见渐晕图(package=“brms”)以获取概述。有关公式语法、族和先前发行版的文档,请参阅帮助(“brm”).

我应该在哪里提问、提出新功能或报告错误?

可以在斯坦论坛关于话语。要建议新功能或报告错误,请在上打开问题github.

如何提取生成的Stan代码?

如果您已经安装了模型,请应用支柱方法。如果只想在不进行任何模型拟合的情况下生成Stan代码,请使用支柱方法。

我可以避免编译模型吗?

当您第一次使用brms调整模型时,目前无法避免编译。但是,如果您已经安装好模型并希望再次运行它,例如使用更多绘图,则可以使用更新方法。有关更多详细信息,请参阅帮助(“update.brmsfit”).

brms和rstanam的区别是什么?

rstanam包与brms类似,它还允许使用Stan进行后端估计来拟合回归模型。与brms相反,rstanam附带了预编译代码,以在拟合模型时节省编译时间(以及对C++编译器的需要)。然而,随着brms动态生成其Stan代码,它在模型规范方面比rstanam提供了更多的灵活性。此外,多层模型目前在brms中的拟合效率更高。有关brms与实现多级模型的其他常见R包的详细比较,请参阅渐晕(“brms_multialevel”)渐晕图(“brms_overview”).