调试MCMC程序非常困难。出现此困难的原因是几个问题,其中一些是:
(a)算法的循环性质
我们迭代绘制以所有其他参数为条件的参数。因此,如果实现不能正常工作,则很难隔离错误,因为问题可能存在于迭代采样器中的任何地方。
(b)正确答案不一定是已知的。
我们无法告诉我们是否已经实现融合。在某种程度上,可以通过在模拟数据上测试代码来缓解这种情况。
鉴于上述问题,我想知道是否存在可用于调试MCMC程序的标准技术。
编辑
我想分享我用来调试自己的程序的方法。我当然会做PeterR提到的所有事情。除此之外,我还使用模拟数据执行以下测试:
从真实值开始所有参数,并查看采样器是否偏离真实值太远。
我在迭代采样器中具有每个参数的标志,这些标志确定我是否在迭代采样器中绘制该参数。例如,如果将标志“ gen_param1”设置为true,则在迭代采样器中从其完整条件中提取“ param1”。如果将其设置为false,则将'param1'设置为其真实值。
完成采样器的编写后,我将使用以下配方测试程序:
- 将一个参数的generate标志设置为true,将其他所有参数设置为false,并评估关于真实值的收敛性。
- 结合第一个参数设置另一个参数的generate标志,然后再次评估收敛性。
以上步骤对我非常有用。