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

原文出处:拓端数据部落公众号


对于许多模型,例如逻辑模型,没有共轭先验分布。因此,吉布斯采样不适用。

这篇文章展示了我们如何使用Metropolis-Hastings(MH)从每次Gibbs迭代中的非共轭条件后验对象中进行采样–比网格方法更好的替代方法。

我将说明该算法,给出一些R代码结果,然后分析R代码以识别MH算法中的瓶颈。

模型

此示例的模拟数据是包含患者的横截面数据集。有一个二元因变量Y,一个二元处理变量A,一个因子变量age。年龄是具有3个等级的分类变量。我用贝叶斯逻辑回归建模:

对于Metroplis-in-Gibbs吉布斯采样来说,这是一个相当不错的示例:

  1. 我们有一个二进制结果,为此我们采用了非线性链接函数。
  2. 我们有一个需要调整的因素。
  3. 我们正在估计我们关心的更多参数,但肯定会给采样器带来压力。

非规范条件后验

让我们看一下该模型的(非标准化)条件后验。

此条件分布不是已知分布,因此我们不能简单地使用Gibbs从中进行采样。相反,在每个gibbs迭代中,我们需要另一个采样步骤来从该条件后验中提取。第二个采样器将是MH采样器。

Metroplis-in-Gibbs采样

目标是从中取样

MH采样器的工作方式如下:

  1. 开始采样。
  2. 让我们假设将提议分布的方差设置为某个常数。
  3. 我们计算在上一次绘制时评估的非标准化密度与当前提议的比率:   
  4. 如果该比率大于1,则当前提议分布的密度高于先前值的密度。因此,我们“接受”了提议并确定了。然后,我们使用以提议为中心的提议分布重复步骤2-4  ,然后生成新提议。如果该比率小于1,则当前建议值的密度低于先前建议。

因此,总是接受产生更高条件的后验评估的提议。但是,有时仅接受具有较低密度评估的提议-提议的相对密度评估越低,其接受的可能性就越低。

经过多次迭代,从后验的高密度区域开始的抽样被接受,并且被接受的序列“爬升”到高密度区域。一旦序列到达此高密度区域,它将趋于保持在那里。因此,这也类似于模拟退火。

这种表示法很容易扩展到我们的4维示例:提议分布现在是4维多元高斯模型。代替标量方差参数,我们有一个协方差矩阵。因此,我们的建议是系数的向量。从这个意义上讲,我们运行的是Gibbs –使用MH每次迭代绘制整个系数。

  • 跳跃分布的方差是重要的参数。如果方差太小,则当前提议可能会非常接近最后一个值,因此也很可能接近1。因此,我们会非常频繁地接受,但由于接受的值彼此之间非常接近,因此我们会攀升至较高在许多次迭代中慢慢降低密度区域。如果方差太大,则序列到达高密度区域后可能无法保留在该区域。
  • 许多“自适应” MH方法是此处描述的基本算法的变体,但包括调整周期以找到产生最佳接受率的跳跃分布方差。
  • MH中计算量最大的部分是密度评估。对于每个Gibbs迭代,我们必须两次评估4维密度。
  • 尽管很容易扩展到高维度,但性能本身在高维度上会变差。

结果

这是我们感兴趣的4个参数的MCMC链。红线表示真实值。


for(i in 2:gibbs_iter){# 来自 phi 后验分布的样本gibbs_res[i,p+1] <- rcond_post_phi(gibbs_res[i-1,1:p], alpha, gamma, lambda, p)#  来自beta后验分布的样本 ( 使用 Mh )mh_draw <- rcond_post_beta_mh(gibbs_res[i-1,1:p], gibbs_res[i,p+1], lambda, X, Y, mh_trials=5, jump_v=.01)}par(mfrow=c(2,2))
plot(gibbs_res[,1],type='l',xlab='MCMC Iterations',ylab=c('Coefficient Draw'),main='Intercept')
abline(h=-1,col='red')
plot(gibbs_res[,2],type='l',xlab='MCMC Iterations',ylab=c('Coefficient Draw'),main='Age1')# 计算后验分布和置信区间
post_burn_trim<-gibbs_res[seq(1000,gibbs_iter,100),]
colMeans(post_burn_trim)
apply(post_burn_trim, 2, quantile, p=c(.025,.975))

有一些改进的空间:

  • 接受率只有18%,我本可以调整跳跃分布协方差矩阵来获得更好的接受率。
  • 我认为更多的迭代肯定会在这里有所帮助。这些链看起来不错,但仍然是自相关的。

关于贝叶斯范式的好处是,所有推断都是使用后验分布完成的。现在,系数估计值是对数化,但是如果我们需要比值,则只需对后验取幂。如果我们想要对比值进行区间估计,那么我们就可以获取指数后验的2.5%和97.5%。

下面是使用R分析,显示了这一点。for循环运行Gibbs迭代。在每个Gibbs迭代中,我都调用函数使用MH从参数向量的条件后验中得出图形。

我们看到子例程log_cond()是MH运行中的瓶颈。此函数是beta的对数条件后验密度。


最受欢迎的见解

1.使用R语言进行METROPLIS-IN-GIBBS采样和MCMC运行

2.R语言中的Stan概率编程MCMC采样的贝叶斯模型

3.R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样

4.R语言BUGS JAGS贝叶斯分析 马尔科夫链蒙特卡洛方法(MCMC)采样

5.R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归

6.R语言Gibbs抽样的贝叶斯简单线性回归仿真分析

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

8.R语言使用Metropolis- Hasting抽样算法进行逻辑回归

9.R语言中基于混合数据抽样(MIDAS)回归的HAR-RV模型预测GDP增长

拓端tecdat|使用R语言进行Metroplis-in-Gibbs采样和MCMC运行分析相关推荐

  1. 使用R语言进行Metroplis-in-Gibbs采样和MCMC运行分析

    全文链接:http://tecdat.cn/?p=12200 对于许多模型,例如逻辑模型,没有共轭先验分布.因此,吉布斯采样不适用(点击文末"阅读原文"获取完整代码数据). 这篇文 ...

  2. 拓端tecdat荣获掘金社区入驻新人奖

    2021年7月,由掘金发起了"入驻成长礼"颁奖活动.本次活动邀请到知名开发者.服务机构代表等业界人士. 据了解,掘金社区"新入驻创作者礼"主要对已经积累了一定历 ...

  3. 拓端tecdat荣获2022年度51CTO博主之星

    相信技术,传递价值,这是51CTO每一个技术创作者的动力与信念,2022 年度,拓端tecdat 作为新锐的数据分析咨询公司,在51CTO平台上,不断的输出优质的技术文章,分享前沿创新技术,输出最佳生 ...

  4. R语言对推特twitter数据进行文本情感分析

    原文链接:http://tecdat.cn/?p=4012 我们以R语言抓取的推特数据为例,对数据进行文本挖掘,进一步进行情感分析,从而得到很多有趣的信息(点击文末"阅读原文"获取 ...

  5. R语言sample函数数据对象采样实战

    R语言sample函数数据对象采样实战 目录 R语言sample函数数据对象采样实战 #基本语法 #仿真数据

  6. R语言七天入门教程一:配置运行环境

    R语言七天入门教程一:配置运行环境 一.R语言介绍 1.R语言是什么? 参考:R语言教程-R语言介绍 R 语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析.绘图.数据挖掘.R语言有丰富的 ...

  7. R语言中通过鞅残差(martingale residual)分析、可视化自变量与鞅残差的关系判断指定连续变量和风险比HR值是否存在着线性趋势、Cox回归对线性条件的诊断

    R语言中通过鞅残差(martingale residual)分析.可视化自变量与鞅残差的关系判断指定连续变量和风险比HR值是否存在着线性趋势.Cox回归对线性条件的诊断 目录

  8. R语言在气象、水文中数据处理及结果分析、绘图

    R语言是一门由统计学家开发的用于统计计算和作图的语言(a Statistic Language developed for Statistic by Statistician),由S语言发展而来,以统 ...

  9. 2020互联网数据分析师教程视频 统计学分析与数据实战 r语言数据分析实战 python数据分析实战 excel自动化报表分析实战 excel数据分析处理实战

    2020互联网数据分析师教程视频 统计学分析与数据实战 r语言数据分析实战 python数据分析实战 excel自动化报表分析实战 excel数据分析处理实战

  10. 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

    最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...

最新文章

  1. 实验2  使用T-SQL编写程序
  2. 全球Top1000计算机科学家h指数发布,数据院院长Philip S. Yu上榜(附完整名单)...
  3. vim的基本快捷操作(二)——可视模式
  4. 网络游戏红利未减,昆仑万维如何急于转型?
  5. Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
  6. CentOS 6.5 x86_64升级内核到最新版2.6.32-696.1.1.el6.x86_64
  7. 如何处理Global symbol * requires explicit package name编译错误,以及use strict用法
  8. android string数字字符串如何使用科学计数法,JSONObject 偶遇 数字字符串变为科学计数法 如何变为普通数字字符串...
  9. 一个月学会Python,零基础入门数据分析
  10. 根据概率分布随机采样python_PR Sampling Ⅱ:马尔可夫链蒙特卡洛 MCMC及python实现...
  11. java如何调用脚本_Java如何调用脚本的特定功能?
  12. js获取当前日期yyyymmdd
  13. mysql deadlock found_MySQL遇到Deadlock found when trying to get lock,解决方案
  14. 拉格朗日法线性规划求解
  15. Python之路第七天,基础(9)-面向对象(上)
  16. AE2022 Ver22.3内容更新点汇总 一文了解AE2022最新版本
  17. 【点阵显示汉字“王”】C++
  18. 三极管发射极负反馈电阻的原理是什么?为什么就能起到负反馈作用呢
  19. DLMS/COSEM (IEC 62056, EN13757-1)协议简介
  20. 商城项目09_品牌管理菜单、快速显示开关、阿里云进行文件上传、结合Alibaba管理OSS、服务端签名后直传

热门文章

  1. DroidDraw Android 界面设计工具使用
  2. HDOJ---2571 命运[DP]
  3. 软件项目版本号命名规则
  4. 22 模块:宏伟蓝图
  5. GBDT 特征提取(2)
  6. python基础--导入模块
  7. LIS和LCS LCIS
  8. 兰州市智能交通实现智慧城市 智能化立体车库有效缓解停车难
  9. PagerAdapter跟BaseAdapter的覆盖
  10. linux 安装phpMyAdmin