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