Le débogage des programmes MCMC est notoirement difficile. La difficulté survient en raison de plusieurs problèmes dont certains sont:
a) Nature cyclique de l'algorithme
Nous dessinons itérativement des paramètres conditionnels à tous les autres paramètres. Ainsi, si une implémentation ne fonctionne pas correctement, il est difficile d'isoler le bogue car le problème peut se trouver n'importe où dans l'échantillonneur itératif.
b) La bonne réponse n'est pas nécessairement connue.
Nous n'avons aucun moyen de dire si nous avons atteint la convergence. Dans une certaine mesure, cela peut être atténué en testant le code sur des données simulées.
À la lumière des problèmes ci-dessus, je me demandais s'il existe une technique standard qui peut être utilisée pour déboguer les programmes MCMC.
Éditer
Je voulais partager l'approche que j'utilise pour déboguer mes propres programmes. Je fais, bien sûr, toutes les choses que PeterR a mentionnées. En dehors de ceux-ci, j'effectue les tests suivants en utilisant des données simulées:
Démarrez tous les paramètres à partir des valeurs vraies et voyez si l'échantillonneur diverge trop loin des valeurs vraies.
J'ai des drapeaux pour chaque paramètre dans mon échantillonneur itératif qui détermine si je dessine ce paramètre dans l'échantillonneur itératif. Par exemple, si un indicateur 'gen_param1' est défini sur true, je dessine 'param1' de son conditionnel complet dans l'échantillonneur itératif. Si ce paramètre est défini sur false, «param1» est défini sur sa valeur vraie.
Une fois que j'ai fini d'écrire l'échantillonneur, je teste le programme en utilisant la recette suivante:
- Définissez l'indicateur de génération pour un paramètre sur true et tout le reste sur false et évaluez la convergence par rapport à la valeur vraie.
- Définissez l'indicateur de génération pour un autre paramètre conjointement avec le premier et évaluez à nouveau la convergence.
Les étapes ci-dessus m'ont été extrêmement utiles.