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.
Bons conseils dans la réponse de PeterR; Je n'ai pas d'autres conseils pour le débogage, mais j'ai trouvé une procédure très utile pour tester si votre code pouvait avoir un bogue. Il est décrit dans cet article:
http://pubs.amstat.org/doi/abs/10.1198/016214504000001132
L'idée est essentiellement d'avoir deux simulations: l'une étant votre MCMC pour déduire (vraisemblablement) les paramètres de votre modèle. Le deuxième simulateur échantillonne simplement les paramètres de l'ancien. Ils génèrent des données à partir des paramètres des deux simulateurs et calculent une statistique de test comparant les distributions conjointes des paramètres et des données. Si le code MCMC échantillonne correctement les paramètres de la partie postérieure, alors la statistique de test aura une distribution de N (0,1). Le code pour calculer la statistique de test est disponible.
la source