La depuración de programas MCMC es notoriamente difícil. La dificultad surge debido a varios problemas, algunos de los cuales son:
(a) Naturaleza cíclica del algoritmo
Dibujamos iterativamente parámetros condicionales a todos los demás parámetros. Por lo tanto, si una implementación no funciona correctamente, es difícil aislar el error ya que el problema puede estar en cualquier parte del muestreador iterativo.
(b) La respuesta correcta no se conoce necesariamente.
No tenemos forma de saber si hemos logrado la convergencia. Hasta cierto punto, esto puede mitigarse probando el código en datos simulados.
A la luz de los problemas anteriores, me preguntaba si existe una técnica estándar que pueda usarse para depurar programas MCMC.
Editar
Quería compartir el enfoque que uso para depurar mis propios programas. Yo, por supuesto, hago todas las cosas que PeterR mencionó. Además de eso, realizo las siguientes pruebas utilizando datos simulados:
Inicie todos los parámetros a partir de valores verdaderos y vea si la muestra diverge demasiado de los valores verdaderos.
Tengo banderas para cada parámetro en mi muestra iterativa que determina si estoy dibujando ese parámetro en la muestra iterativa. Por ejemplo, si un indicador 'gen_param1' se establece en verdadero, entonces dibujo 'param1' de su condicional completo en el muestreador iterativo. Si esto se establece en falso, entonces 'param1' se establece en su valor verdadero.
Una vez que termine de escribir la muestra, pruebo el programa usando la siguiente receta:
- Establezca el indicador de generación para un parámetro en verdadero y todo lo demás en falso y evalúe la convergencia con respecto al valor verdadero.
- Establezca el indicador de generación para otro parámetro junto con el primero y nuevamente evalúe la convergencia.
Los pasos anteriores me han sido increíblemente útiles.