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

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

对于许多模型,例如逻辑模型,没有共轭先验分布。因此,吉布斯采样不适用点击文末“阅读原文”获取完整代码数据)。

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

相关视频

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

模型

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

4f48dac67fb4306634db966ebf309492.png

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

  1. 我们有一个二进制结果,为此我们采用了非线性链接函数。

  2. 我们有一个需要调整的因素。

  3. 我们正在估计我们关心的更多参数,但肯定会给采样器带来压力。

非规范条件后验

让我们看一下该模型的(非标准化)条件后验。
75c0481293d4c4d3942955dc325b0a92.png
此条件分布不是已知分布,因此我们不能简单地使用Gibbs从中进行采样。相反,在每个gibbs迭代中,我们需要另一个采样步骤来从该条件后验中提取。第二个采样器将是MH采样器。

Metroplis-in-Gibbs采样

目标是从中取样cc9aa2c6bf4c847c2ffe27b5428319fc.png

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

  1. 开始采样。

  2. 让我们假设将提议分布的方差设置为某个常数。

  3. 我们计算在上一次绘制时评估的非标准化密度与当前提议的比率:   4891ac4bc1261042b7466e6ee5c6065a.png

  4. 如果该比率大于1,则当前提议分布的密度高于先前值的密度。因此,我们“接受”了提议并确定了44a7909e591353cfb24805d578425a0e.png。然后,我们使用以提议为中心的提议分布重复步骤2-4  ,然后生成新提议。如果该比率小于1,则当前建议值的密度低于先前建议。

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

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

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

  • 跳跃分布的方差是重要的参数。如果方差太小,则当前提议可能会非常接近最后一个值,因此![R也很可能接近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))

d13d5b3220636f874d219606de7b2ca1.png


点击标题查阅往期内容

d2232dd0c958cfd2156daa83ae75371a.jpeg

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

outside_default.png

左右滑动查看更多

outside_default.png

01

df72dfddc2a41aef5d1e154ad14f05d3.png

02

44f1b16070348e52c216585acdf1d3d7.png

03

e9154cefdf30722371972aae8f62bba7.png

04

47a670c750adb7845a47e4fc73895f34.png

有一些改进的空间:

  • 接受率只有18%,我本可以调整跳跃分布协方差矩阵来获得更好的接受率。

  • 我认为更多的迭代肯定会在这里有所帮助。这些链看起来不错,但仍然是自相关的。

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

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

e1198bdc64b71307b46a7320225e727c.png

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

8ed96c75a9db198b37df742c3331cbae.png


341fbf95376d5a522989a901130812fa.jpeg

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《使用R语言进行Metroplis-in-Gibbs采样和MCMC运行分析》。

点击标题查阅往期内容

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

R语言MCMC:Metropolis-Hastings采样用于回归的贝叶斯估计

Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法

R语言贝叶斯METROPOLIS-HASTINGS GIBBS 吉布斯采样器估计变点指数分布分析泊松过程车站等待时间

R语言马尔可夫MCMC中的METROPOLIS HASTINGS,MH算法抽样(采样)法可视化实例

python贝叶斯随机过程:马尔可夫链Markov-Chain,MC和Metropolis-Hastings,MH采样算法可视化

Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现

Metropolis Hastings采样和贝叶斯泊松回归Poisson模型

Matlab用BUGS马尔可夫区制转换Markov switching随机波动率模型、序列蒙特卡罗SMC、M H采样分析时间序列

R语言RSTAN MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据

R语言BUGS序列蒙特卡罗SMC、马尔可夫转换随机波动率SV模型、粒子滤波、Metropolis Hasting采样时间序列分析

R语言Metropolis Hastings采样和贝叶斯泊松回归Poisson模型

R语言贝叶斯MCMC:用rstan建立线性回归模型分析汽车数据和可视化诊断

R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例

R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数

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

R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病

R语言中贝叶斯网络(BN)、动态贝叶斯网络、线性模型分析错颌畸形数据

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

Python贝叶斯回归分析住房负担能力数据集

R语言实现贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析

Python用PyMC3实现贝叶斯线性回归模型

R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

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

R语言和STAN,JAGS:用RSTAN,RJAG建立贝叶斯多元线性回归预测选举数据

R语言基于copula的贝叶斯分层混合模型的诊断准确性研究

R语言贝叶斯线性回归和多元线性回归构建工资预测模型

R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例

R语言stan进行基于贝叶斯推断的回归模型

R语言中RStan贝叶斯层次模型分析示例

R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化

R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型

WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较

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

R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例

R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化

视频:R语言中的Stan概率编程MCMC采样的贝叶斯模型

R语言MCMC:Metropolis-Hastings采样用于回归的贝叶斯估计

8374564e19ed348ca03194e38495eb53.png

221afb568f66eaa0f5e8d329a77969b4.jpeg

03fd88d002402da5cfa8fe8d7c6c8876.png

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值