J'essaie d'implémenter l'algorithme hit and run MCMC, mais j'ai un peu de mal à comprendre comment s'y prendre. L'idée générale est la suivante:
Pour générer un saut de proposition dans MH, nous:
- Générer une direction partir d'une distribution à la surface de la sphère unitaire O
- Générez une distance signée long de l'espace contraint.
Cependant, je n'ai aucune idée de la façon dont je devrais procéder pour l'implémenter dans R (ou tout autre langage).
Quelqu'un at-il un extrait de code qui me dirigerait dans la bonne direction?
BTW, je ne suis pas intéressé par une bibliothèque qui fait cette méthode, je veux essayer de la coder moi-même.
Merci beaucoup.
Réponses:
Je n'ai pas regardé le papier que vous avez fourni, mais laissez-moi quand même essayer:
Si vous avez un espace de paramètres à dimensions, vous pouvez générer une direction aléatoire d uniformément répartie sur la surface de la sphère unitaire avecp d
(cf Wiki ).
Ensuite, utilisez-le pour générer des propositions pour pour l'échantillonnage de rejet (en supposant que vous pouvez réellement évaluer la distribution pour d ).d d
En supposant que vous commencez en position et que vous avez accepté un d , générez une proposition y avecx d y
Ajouté au profit de @ csgillespie:
D'après ce que j'ai pu rassembler par quelques google, le MCMC hit-and-run est utile principalement pour un mixage rapide si vous avez une cible (multivariée) qui a un support borné arbitrairement mais pas nécessairement connecté, car il vous permet de vous déplacer de n'importe quel point dans le soutien à tout autre en une seule étape. Plus ici et ici .
la source
Je suis tombé sur votre question lorsque je cherchais la référence d'origine pour Hit-and-Run. Merci pour ça! Je viens de mettre en place une implémentation de preuve de concept de hit-and-run pour PyMC à la fin de ce blog récent .
la source