原文链接:http://tecdat.cn/?p=27228
原文出处:拓端数据部落公众号
[]()
最近咱们被客户要求撰写对于MCMC Metropolis-Hastings采样的钻研报告,包含一些图形和统计输入。
作为先决条件,咱们将应用几行代码,在代码中,咱们创立了一些测试数据,其中因变量 y 线性依赖于自变量 x(预测变量);定义线性模型拟合数据的可能性和先验;并实现一个简略的 Metropolis-Hastings MCMC 从该模型的后验散布中采样。
x = (-(sleze-1)/2):((sple-1)/2)y = treA * x + tuB + rnorm(n=sapeize,mean=0,sd=tuSd)
所以,让咱们运行 MCMC:
stavalue = c(4,2,8)cn = rmtrisMCC(avae, 10000)
由 coda 促成的链的一些简略总结
好吧,coda 是一个 R 包,它提供了许多用于绘制和剖析后验样本的规范函数。为了使这些性能起作用,您须要将输入作为“mcmc”或“mcmc.list”类的对象,咱们将在前面探讨。
领有一个 coda 对象的益处是咱们通常想要用链做的很多事件都曾经实现了,所以例如咱们能够简略地 summary() 和 plot() 输入
summary(chn)plot(cn)
它提供了一些对于控制台的有用信息和一个大抵如下所示的图:
图: 一个 coda 对象的 plot() 函数的后果
对 plot() 函数的后果:每一行对应一个参数,因而每个参数有两个图。右边的图称为轨迹图——它显示了参数在链运行时所取的值。右图通常称为边际密度图。基本上,它是轨迹图中值的(平滑的)直方图,即参数值在链中的散布。
边际密度暗藏了相关性
边际密度是参数取值与所有其余“边缘化”参数的平均值,即其余参数依据其后验概率具备任何值。通常,边际密度被视为贝叶斯剖析的次要输入(例如,通过报告它们的均值和标准差),但我强烈建议不要进一步剖析这种做法。起因是边际密度“暗藏”了参数之间的相关性,如果存在相关性,参数的不确定性在边际中仿佛要大得多。
Plot(data.frame(can))
在咱们的例子中,应该没有大的相关性,因为我以这种形式设置了示例
x = (-(samee-1)/2):((smeie-1)/2) + 20
再次运行 MCMC 并查看相关性应该会给你一个齐全不同的画面。
图: 不均衡 x 值拟合的边际密度(对角线)、配对密度(下图)和相关系数(上图)
您能够看到第一个和第二个参数(斜率和截距)之间的强相关性,并且您还能够看到每个参数 X2 的边际不确定性减少了。
请留神,咱们在这里只查看了配对相关性,可能依然有更高阶的交互不会呈现在这样的剖析中,所以你可能依然脱漏了一些货色。
收敛诊断
当初,到收敛:一个 MCMC 从后验散布创立一个样本,咱们通常想晓得这个样本是否足够靠近后验以用于剖析。有几种规范办法能够查看这一点,但我倡议应用 Gelman-Rubin 诊断。
cha2 = runmeooi_MCMC(arvue, 10000)cominchns = mcmc.list(cai, ain2)plot(coinchns)
后果图应该是这样的
图: 后果
diag 为您提供每个参数的比例缩减因子。因子 1 意味着方差和链内方差相等,较大的值意味着链之间依然存在显着差别。
改善收敛/混合
那么,如果还没有收敛怎么办?当然,你总是能够让 MCMC 运行更长时间,但另一个抉择是让它收敛得更快。可能会产生两件事:
- 与咱们从中抽样的散布相比,您的提议函数很窄——承受率高,但咱们没有失去任何后果,混合不好
- 与咱们从中抽样的散布相比,您的提议函数太宽了——承受率低,大部分工夫咱们都呆在原地
最受欢迎的见解
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增长回归的HAR-RV模型预测GDP增长")