我正在参加一些与 MCMC 相关的讲座。但是,我没有找到一个很好的例子来说明它是如何使用的。谁能给我一个具体的例子。我所看到的只是他们运行马尔可夫链并说它的平稳分布是所需的分布。
我想要一个很难从所需分布中采样的好例子。所以我们创建了一个马尔可夫链。我想知道如何选择转移矩阵,使其马尔可夫链的平稳分布成为目标分布谢谢
我正在参加一些与 MCMC 相关的讲座。但是,我没有找到一个很好的例子来说明它是如何使用的。谁能给我一个具体的例子。我所看到的只是他们运行马尔可夫链并说它的平稳分布是所需的分布。
我想要一个很难从所需分布中采样的好例子。所以我们创建了一个马尔可夫链。我想知道如何选择转移矩阵,使其马尔可夫链的平稳分布成为目标分布谢谢
很难从中采样的分布的一个很好的例子是硬核模型,请参阅此页面以获取概述:
http://www.mathematik.uni-ulm.de/stochastik/lehre/ss06/markov/skript_engl/node34.html
该模型为一些固定定义了网格上的分布,其中在网格中的每个点处,您可以具有 1 或 0 的值。为了在硬核模型下允许网格,网格上没有两个相邻点的值都为 1。
下图显示了硬核模型下网格的示例可接受配置。在此图像中,一个显示为黑点,零显示为白色。请注意,不是两个黑点是相邻的。
我相信这个模型的灵感来自物理学,你可以把网格中的每个位置想象成一个粒子,那个位置的值代表电荷或自旋。
我们希望从允许网格的总体中均匀抽样,也就是说,如果是允许网格的集合,我们希望对进行抽样,使得
其中是所有可能的允许配置的数量。
这已经提出了一个挑战,鉴于我们正在考虑网格,我们如何确定允许的网格数?
MCMC 的优点之一是它允许您从难以或无法评估归一化常数的分布中进行采样。
我将让您阅读有关如何针对此问题实施 MCMC 的详细信息的论文,但它相对简单。
统计中的另一个令人生畏的问题。这个问题很老,但是网上的介绍性例子很难找到。因此,让我简化两个很好的例子,以防万一有人跟随PageRank的马尔可夫随机游走,在这里被 MCMC 弄糊涂了,并且对一个易于理解的答案充满期待。可能性有多大?这可能是一个后续问题。
FIRST EXAMPLE:
该帖子使用 Metropolis - Hastings 算法重新创建标准正态分布远非一个具有挑战性的案例,而是一个很好的剖析案例。为了方便和注释,我从这里的帖子中收集了代码。
困难在于,在经历了所有机械步骤之后,只有一个神奇的技巧:接受或拒绝提议值的二元决策。
请记住,我们想要的是生成一堆值 ( ),当绘制在直方图上时,它们看起来像钟形曲线,以 ( ) 为中心 ( ) 为,标准偏差 ( ) 为。问题是我们没有预先确定的参数;这太容易了,只需按照.mean
sd
rnorm(10000)
我们通过使用伪随机数生成器采取微小(或更大,它不会改变结果太多)随机随机步骤来做到这一点。在示例中,步长的大小由 设置eps
,它确定 )向左或向右的步长大小。这将是生成新提议值以填充“链”的下一个“链接”的过程中的起始行。好的,我说的是生成减去或添加到。runif(1, - eps, eps)
因此,每个提议的值都会以随机方式与先前的值不同,并且在 的边界内[- eps,+ eps]
。
进入马尔可夫内核。我们需要以某种方式评估转换到新提议值的概率,就像在时间 i 上给定状态的转换马尔可夫矩阵中,时间时新状态的概率。如果有疑问,请到这里,或者问一直关注所有“你会如何向你的奶奶解释量子物理学?”的奶奶。问题类型(矩阵看起来不好吗?;-))。
为了让这个被剔除值的接受概率,我们简单地将提议的新值(密度的高度与之前的(已经接受的值)进行比较,(),就像这样:
我们取这两个值的比率:min(1, dnorm(candidate_value)/dnorm(x))
。由于我们想要一个概率,因此结果计算不能超过,每当处(候选值)大于处时,就会发生这种情况,相当于自动接受建议的值,并解释代码的一部分。否则,提议值的值越接近之前的值,被接受的几率就越高。 min(1, ...)
dnorm
所以我们确实有接受的概率,但我们需要做出二元决定(接受新提议的值,或者拒绝它)。魔术技巧来了:如果计算的概率min(1, dnorm(candidate_value)/dnorm(x))
大于到runif(1)
的均匀平局(尽可能接近连续值的掷硬币),我们接受,并用建议值;否则,我们用重复之前的值来填充它,......这个想法是,两个相同的比一个太远的尾巴更好。x[i+1]
x[i]
我们这样做了数千次,并收集了所有这些值(仅接受和重复的值),当我们绘制直方图时,我们得到了一条sd
接近并以为中心的漂亮正态曲线。
最后一点:我们从哪里开始?可能不相关,但在模拟中,我们将第一个值填充为, 然后循环所有其余的迭代,并让过程顺其自然。x = 0; vec[1] = x
SECOND EXAMPLE:
这更令人兴奋,并参考了通过计算给定数据集的随机参数的对数似然来估计线性回归曲线的参数。但是,代码行的解释是在此处保存的压缩模拟中构建的,其步骤与第一个示例非常相似。
这段 Youtube 视频很好地展示了一个使用 MCMC 解决的简单问题。
感兴趣的分布是线性回归中可能的斜率和截距的后验分布(右上图)。斜率和截距的某些组合非常可能(即它们很可能产生观察到的数据点并且与我们的先验预期一致),因此应该经常对它们进行采样。其他组合是不可能的(例如,如果它们对应于不穿过数据点云的蓝线),应该减少采样频率。
左下角的大面板显示了马尔可夫链通过斜率和截距的二维空间所采用的路径。直方图显示了迄今为止链进展的一维摘要。一旦链运行足够长,我们就可以很好地估计斜率和截距的可能值的分布。
在这种情况下,MCMC 有点矫枉过正,但有些问题很难写出解决方案,用马尔可夫链探索可能性而不是试图直接解决它是很有意义的。