对于许多模型,如物流模型,没有共轭先验 - 所以Gibbs不适用。正如我们在第一篇文章中看到的那样,蛮力网格方法太慢而无法扩展到真实环境。
这篇文章展示了我们如何使用Metropolis-Hastings(MH)从每个被阻挡的Gibbs迭代中的非共轭条件后验中进行采样 - 这是一种比网格方法更好的替代方案。
模型
该示例的模拟数据是
以上,
- 我们有一个二元结果,我们使用非线性链接函数。
- 我们需要调整一个混淆器。
- 我们正在估算更多我们关心的参数。在这种情况下,我们真正关心治疗效果的估计
非标准化的后验条件
让我们来看看这个模型的(非标准化的)条件后验。我不会进行推导,但它遵循我以前的帖子中使用的相同程序。
这里没有共轭!这种条件分布不是已知的分布,因此我们不能简单地使用Gibbs从中进行采样。相反,在每个gibbs迭代中,我们需要另一个采样步骤来从这个条件后验中抽取。第二个采样器将是MH采样器。如果您需要更新Gibbs,请参阅上面链接的上一篇文章。
旁注:条件后验
MH采样
目标是从中抽样
- 制定一个初步的“提案”,
- 从围绕中心的分布画出
- 现在我们从提案分发中抽取新的数据
- 如果该比率大于1,则当前建议的密度高于先前值的密度。所以我们“接受”提案并设定
因此,总是接受产生更高条件后验评估的提议。然而,有时只接受密度评估较低的建议 - 提案的相对密度评估越低,其接受概率越低(直观!)。经过多次迭代,接受来自后部高密度区域的抽取,并且接受的建议序列“爬上”到高密度区域。一旦序列到达这个高密度区域,它往往会留在那里。因此,在许多方面,您可以将MH视为随机“爬山”算法。
- 跳跃分布的方差是一个重要参数。如果方差太小,当前的提议可能会非常接近最后一个值,因此
- 许多“自适应”MH方法是这里描述的基本算法的变体,但包括调谐周期以找到产生最佳接受率的跳跃分布方差。
- MH中计算密集度最高的部分是密度评估。对于每个Gibbs迭代,我们必须两次评估4维密度:一次在当前提案中,一次在先前接受的提议中。
- 虽然符号很容易扩展到高维度,但性能本身在更高的维度上会恶化。原因很简单,但非常有趣。Michael Betancourt的这篇论文 解释了Gibbs和MH在更高维度上的不足,并概述了哈密尔顿蒙特卡罗(HMC)如何克服这些困难。据我所知:在更高的尺寸,密度不等于体积。由于进入高容量区域确实是我们想要的,并且由于标准MH到达高密度区域,因此MH在高维度上无法有效地探索高容量区域。在低尺寸,密度很接近体积,所以这不是一个问题。
结果
还有一些改进的余地:
- 接受率仅为18%,我可以调整跳跃分布协方差矩阵以获得更优的速率。
- 我认为更多的迭代肯定会有所帮助。这些链看起来还不错,但仍然相当自相关。
关于贝叶斯范式的好处是所有推理都是使用后验分布完成的。系数估计现在是对数尺度,但如果我们想要优势比,我们只是对后抽取进行取幂。如果我们想要比值比的区间估计,那么我们可以抓住指数后抽取的2.5和97.5百分位数。就这么简单 - 没有delta-method垃圾。
之前我曾提到MH是昂贵的,因为每次Gibbs迭代必须对log后验进行两次评估。下面是使用R包profviz进行的配置文件分析。for循环运行Gibbs迭代。在每个Gibbs迭代中,我调用函数rcond_post_beta_mh(),它使用MH从参数向量的条件后验产生绘制。请注意,它占用了大部分运行时。
潜入rcond_post_beta_mh(),我们看到子程序log_cond_post_beta()是MH运行的瓶颈。该函数是β向量的对数条件后验密度,其被评估两次。