R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数

Posted 拓端数据部落

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数相关的知识,希望对你有一定的参考价值。

 原文链接:http://tecdat.cn/?p=6690


在最近的一篇文章中,我描述了一个Metropolis-in-Gibbs采样器,用于估计贝叶斯逻辑回归模型的参数。

 

这篇文章就此问题进行了研究,以展示Rcpp如何帮助克服这一瓶颈。  TLDR:只需用C ++编写log-posterior而不是矢量化R函数,我们就可以大大减少运行时间。 


我模拟了与上一篇文章类似的模型中的数据:




对于这个分析,我编写了两个Metropolis-Hastings(MH)采样器:sample_mh()和sample_mh_cpp()。前者使用对数后验编码作为向量化R函数。后者使用C ++(log_post.cpp)中的log-posterior编码,并使用Rcpp编译成R函数。Armadillo库对C ++中的矩阵和向量类很有用。


 因此,在每次迭代中,提出了系数向量。下面用红线表示链,表示生成数据的参数值。

R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数

似乎趋同。平均接受概率在采样运行中收敛到约20%。


那么Rcpp实现与R实现相比如何呢?Rcpp的运行时间明显较低。当log-posterior被编码为矢量化R函数时,采样器相对于Rcpp实现运行速度大约慢7倍(样本大小为100)。下图显示了样本大小为100到5000的相对运行时间,增量为500。

R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数


直观地说,C ++带来了一些效率增益。但很明显,Rcpp是解决代码瓶颈的好方法。


非常感谢您阅读本文,有任何问题请在下面留言!


点击标题查阅往期内容

 

更多内容,请点击左下角“阅读原文”查看

R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数

R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数

R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数


案例精选、技术干货 第一时间与您分享

长按二维码加关注

更多内容,请点击左下角“阅读原文”查看

以上是关于R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数的主要内容,如果未能解决你的问题,请参考以下文章

用 Rcpp 更慢地优化 R 目标函数,为啥?

优化 R 代码 - Rcpp

在构建 R 包时从另一个 Rcpp 函数调用 Rcpp 函数

Rcpp - 在 for 和 while 循环中加速随机正常绘制

在包 BAR 中使用 R 包 FOO 中的 C++ 代码的最佳方法

在迭代算法中使用 Rcpp 加速替换列表和向量的元素是不是合法?