点击并运行 MCMC

机器算法验证 r 贝叶斯 马尔可夫链蒙特卡罗
2022-01-18 04:33:56

我正在尝试实现命中并运行 MCMC 算法,但我在理解如何去做时遇到了一些麻烦。大体思路,如下:

为了在 MH 中生成提案跳转,我们:

  • 生成方向d从单位球面上的分布
  • 生成有符号距离λ沿着受限空间。

但是,我不知道应该如何在 R(或任何其他语言)中实现它。

有没有人有一段代码可以为我指明正确的方向?

顺便说一句,我对执行此方法的库不感兴趣,我想尝试自己编写代码。

非常感谢。

2个回答

我没有看你提供的文件,但还是让我试试吧:

如果你有一个p- 维度参数空间,您可以生成随机方向d均匀分布在单位球面上

x <- rnorm(p)
d <- x/sqrt(sum(x^2))

(参见维基)。

然后,使用它来生成提案d对于拒绝抽样(假设您实际上可以评估d)。

假设你从位置开始X并接受了d, 生成一个提案是的

 lambda <- r<SOMEDISTRIBUTION>(foo, bar)
 y <- x + lambda * d

并做一个 Metropolis-Hastings-Step 来决定是否搬到是的或不。

当然,这能发挥多大作用将取决于分布d以及在拒绝采样步骤中(反复)评估其密度的成本是多少,但是因为生成建议d很便宜,你可以侥幸逃脱。


为@csgillespie 的好处添加:

从我通过谷歌搜索收集到的信息来看,如果您有一个(多变量)目标具有任意有界但不一定连接支持,则命中运行 MCMC 主要用于快速混合,因为它使您能够从任何点移动在支持任何其他的一步。更多herehere

我在寻找 Hit-and-Run 的原始参考资料时遇到了您的问题。感谢那!我刚刚在最近的这篇博客的末尾为 PyMC 整理了一个 hit-and-run 的概念验证实现