在过去的几天里,我一直在试图了解Markov Chain Monte Carlo(MCMC)的工作方式。特别是,我一直在尝试理解和实现Metropolis-Hastings算法。到目前为止,我认为我对该算法有一个整体的了解,但是有些事情我还不清楚。我想使用MCMC使某些模型适合数据。因此,我将描述我对Metropolis-Hastings算法的理解,该算法用于将直线拟合到一些观测数据D:
1)制作为初始猜测。将此a设置为我们的当前a(a 0)。还要在马尔可夫链(C)的末尾添加a。
2)重复以下步骤。
3)评估当前似然()给出一个0和d。
4)通过从正态分布取μ = a 0和σ = s t e p s i z e来提出新的(a 1)。现在,š 吨È p 小号我Ž ê是恒定的。
5)评估新的可能性()给定的一个1和d。
6)如比更大大号0,接受一个1作为新的一个0,将其追加在年底Ç并转到步骤2。
7)如果小于L 0,则从均匀分布生成范围[0,1] 的数字(U)
8)如果比两个似然性(之间的差较小的大号1 - 大号0),接受一个1作为新的一个0,将其追加在年底Ç并转到步骤2。
10)重复结束。
现在,我对上述步骤有一些疑问:
- 这是Metropolis-Hastings算法的正确实现吗?
- 在步骤7中选择随机数生成方法如何改变结果?
注释/信用:上述算法的主要结构基于MPIA Python Workshop的代码。