贝叶斯分析的最佳软件包

机器算法验证 r 可能性 贝叶斯 推理 错误
2022-03-02 19:12:38

我想知道你们推荐哪个软件统计包来执行贝叶斯推理。

例如,我知道您可以单独运行 openBUGS 或 winBUGS,也可以从 R 中调用它们。但是 R 也有几个自己的包(MCMCPack、BACCO)可以进行贝叶斯分析。

有人对 R 中的哪个贝叶斯统计包最好或其他替代方案(Matlab 或 Mathematica?)有任何建议吗?

我希望比较的主要功能是性能、易用性、稳定性和灵活性

2个回答

外部 BUGS 变体是标准配置。在 R 中工作可能很方便,但如果这些软件包同样成熟并且性能也一样,我会感到惊讶。使用桥接 R 和外部程序的库通常是最常见的折衷方案。

我使用 jags/rjags 组合(jags 可能大致被认为是 bug 的一种方言)。我还没有尝试过其他错误变体,但我听到的报告是,jags 的性能和处理数字问题的能力比其他错误变体要好一些。我发现 jags 很容易使用,但是当然,你需要一些贝叶斯数据分析的知识才能知道如何使用它。

在 3 个 BUGS 变体(openBUGS/winBUGS、jags)中,对于未来的功能开发而言,jags 似乎是最有希望的,而 openBUGS/winBUGS 似乎是死项目。然而,jags 仍然缺少 openBUGS/winBUGS 中的一些细节(也看这里)。另一方面,jags 消除了 WinBUGS 中存在的一些限制,例如:

x ~ dnorm(0, tau) 
tau ~ dgamma(1.0E-3, 1.0E-3) # in WinBUGS, you cannot do this, 1.0E-3 is too small 
                             # for dgamma (use e.g. dgamma(0.01, 0.01))

好消息是,对于大多数模型,您只需进行少量更改即可在所有 3 个工具中运行它们,因此您可以稍后切换到不同的工具而不会出现太多问题(这就是我所做的)。

然而,由于某些原因(例如缺乏并行性和解释器性质),这些 BUGS 变体并不是进行贝叶斯分析的最快方法!事实上,恰恰相反。BUGS 项目非常适合在小型数据集上测试和开发复杂的模型一旦您开发了模型,并且需要在大型数据集上重复运行它,使用不同的工具会更有效。

例如,据说 CppBugs / rcpp 组合比 BUGS 变体快 5-10 倍。原则是你基本上把你的模型编译成一个运行速度更快的 C++ 程序。还可以查看Dirk Eddelbuettel 的 Rcpp 测试博客- 看起来非常快。你也可以玩并行。

您还可以使用bugsparallel在 WinBUGS 中进行并行计算。