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

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

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

介绍

Metropolis Hastings 算法是一种非常简单的算法,用于从难以采样的分布中生成样本。

假设我们要从分布 π 中进行采样,我们将其称为“目标”分布。为简单起见,我们假设 π是实线上的一维分布,尽管它很容易扩展到一维以上(见下文)。

MH 算法通过模拟马尔可夫链来工作,其平稳分布为 π。这意味着,从长远来看,来自马尔可夫链的样本看起来像来自 π的样本。正如我们将看到的,该算法非常简单和灵活。


MH算法

转移核

要实现 MH 算法,用户必须提供一个“转移核”Q。转移核只是一种在 给定当前位置(例如 x)的情况下随机移动到空间中新位置(例如 y)的方式。也就是说,Q 是给定 x 在 y 上的分布,我们将其写成 Q(y|x)。在许多应用中,Q将是一个连续分布,在这种情况下 Q(y|x) 将是 y 上的密度,因此∫Q(y|x)dy=1(对于所有 x)。

例如,从当前位置 x 生成新位置 y 的一种非常简单的方法是向 x添加一个 N(0,1) 随机数。即设置y=x+N(0,1),或者转移y|x∼N(x,1)。所以

image.png

这种在当前位置x加上一些随机数得到y的核,在实际中经常使用,被称为“随机游走”核。

MH算法

使用转移核 Q 从目标分布 π 中采样的 MH 算法包括以下步骤:

  • 初始化,X1=x1 。
  • 对于 t=1,2,…
  • 从 Q(y|xt)中采样 y。将 y 视为 xt+1 的“建议”值。
  • 计算
  • image.png
  • A通常被称为“接受概率”。
  • 以概率 A“接受”提议的值,并设置 xt+1=y。否则设置 xt+1=xt。
  • Metropolis 算法
    请注意,上面给出的示例随机游走建议 Q 对于所有 x,y 满足 Q(y|x)=Q(x|y) 任何满足这一点的建议都称为“对称”。当 Q 是对称时,MH 算法中 A 的公式 简化为:
    image.png

该算法的这种特殊情况,具有 Q 对称,首先由 Metropolis 等人在 1953 年提出,因此它有时被称为“Metropolis 算法”。

示例

为了帮助理解 MH 算法,我们现在做一个简单的例子:我们实现算法以从指数分布中采样:

image.png

当然,以其他方式从指数分布中采样会容易得多;我们只是用它来说明算法。

请记住,π 被称为“目标”分布,因此我们调用函数来计算 π  target

现在我们实现 MH 算法,使用上面提到的简单正态随机游走转移核 Q。

这是代码:

x = rep(0,10000)
x1
1 = 3     #初始化;我任意地将其设置为3
for(i in 2:10000){
  if(){
    xi
i = proposed_x       # 以最小(1,A)的概率接受移动。
  } else {
    xii
i = current_x        # 否则就 "拒绝 "移动,并留在原地。
  }
}

运行此代码后,我们可以绘制马尔可夫链 x 访问的位置(有时称为轨迹图)。

image.png



请记住,我们设计此算法是为了从指数分布中采样。这意味着(只要我们运行算法足够长的时间!)x 的直方图应该看起来像一个指数分布。在这里我们检查一下:

hist(x)
lines

image.png

x 中的值的直方图确实提供了与指数分布的紧密拟合。

结束语

MH 算法的一个特别有用的特性是,即使 只知道π 是一个常数,它也可以实现:也就是说,对于一些已知的 f,π(x)=cf(x) , 但未知常数 c。这是因为该算法仅通过比率 image.png 依赖于π 。

这个问题出现在贝叶斯应用中,其中后验分布与先验概率成正比,但比例常数通常是未知的。因此,MH 算法对于从后验分布进行采样以执行难以解析的贝叶斯计算特别有用。

目录
打赏
0
1
1
0
111
分享
相关文章
R语言基础可视化:使用ggplot2构建精美图形的探索
【8月更文挑战第29天】 `ggplot2`是R语言中一个非常强大的图形构建工具,它基于图形语法提供了一种灵活且直观的方式来创建各种统计图形。通过掌握`ggplot2`的基本用法和美化技巧,你可以轻松地将复杂的数据转化为直观易懂的图形,从而更好地理解和展示你的数据分析结果。希望本文能够为你探索`ggplot2`的世界提供一些帮助和启发。
R语言高级可视化技巧:使用Plotly与Shiny制作互动图表
【8月更文挑战第30天】通过使用`plotly`和`shiny`,我们可以轻松地创建高度互动的数据可视化图表。这不仅增强了图表的表现力,还提高了用户与数据的交互性,使得数据探索变得更加直观和高效。本文仅介绍了基本的使用方法,`plotly`和`shiny`还提供了更多高级功能和自定义选项,等待你去探索和发现。希望这篇文章能帮助你掌握使用`plotly`和`shiny`制作互动图表的技巧,并在你的数据分析和可视化工作中发挥更大的作用。
【优秀python web系统毕设】基于python的全国招聘数据分析可视化系统,包括随机森林算法
本文介绍了一个基于Python的全国招聘数据分析可视化系统,该系统利用数据挖掘技术、随机森林算法和数据可视化技术,从招聘网站抓取数据,进行处理、分析和预测,帮助用户洞察招聘市场,为求职者和企业提供决策支持。
470 2
蓄水池抽样算法详解及Python实现
蓄水池抽样是一种适用于从未知大小或大数据集中高效随机抽样的算法,确保每个元素被选中的概率相同。本文介绍其基本概念、工作原理,并提供Python代码示例,演示如何实现该算法。
84 1
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
65 0
R语言可视化设计原则:打造吸引力十足的数据可视化
【8月更文挑战第30天】R语言可视化设计是一个综合性的过程,需要综合运用多个设计原则来创作出吸引力十足的作品。通过明确目标、选择合适的图表类型、合理运用色彩与视觉层次、明确标注与引导视线以及引入互动性与动态效果等原则的应用,你可以显著提升你的数据可视化作品的吸引力和实用性。希望本文能为你提供一些有益的启示和帮助。
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
129 3
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等