J'ai essayé de comprendre l'algorithme de Metropolis-Hastings afin d'écrire un code pour estimer les paramètres d'un modèle (ie ). Selon la bibliographie, l'algorithme de Metropolis-Hastings comprend les étapes suivantes:
- Générer
Comment je voudrais poser quelques questions:
- La bibliographie indique que si est une distribution symétrique, le rapport devient 1 et l'algorithme est appelé Metropolis. Est-ce exact? La seule différence entre Metropolis et Metropolis-Hastings est que la première utilise une distribution symétrique? Qu'en est-il de la "Random Walk" Metropolis (-Hastings)? En quoi diffère-t-il des deux autres?
- La plupart des exemples de code que je trouve en ligne utilisent une distribution de proposition gaussienne et donc où est le rapport de vraisemblance. Et si la distribution de la proposition est une distribution de Poisson? Je pense que je comprends rationnellement pourquoi ce rapport ne devient pas 1 lorsque j'utilise une distribution asymétrique, mais je ne suis pas sûr de bien le comprendre mathématiquement ou comment l'implémenter avec du code. Quelqu'un pourrait-il me donner un exemple de code simple (C, python, R, pseudo-code ou tout ce que vous préférez) de l'algorithme Metropolis-Hastings utilisant une distribution de proposition non symétrique?
mcmc
metropolis-hastings
AstrOne
la source
la source
Réponses:
Oui, c'est correct. L'algorithme Metropolis est un cas particulier de l'algorithme MH.
Dans une marche aléatoire, la distribution de la proposition est recentrée après chaque étape à la dernière valeur générée par la chaîne. Généralement, dans une marche aléatoire, la distribution de la proposition est gaussienne, auquel cas cette marche aléatoire satisfait l'exigence de symétrie et l'algorithme est une métropole. Je suppose que vous pourriez effectuer une marche "pseudo" aléatoire avec une distribution asymétrique qui ferait dériver trop les propositions dans la direction opposée de l'inclinaison (une distribution asymétrique à gauche favoriserait les propositions vers la droite). Je ne sais pas pourquoi vous le feriez, mais vous pourriez et ce serait un algorithme de hastings de métropole (c'est-à-dire nécessiter le terme de ratio supplémentaire).
Dans un algorithme de marche non aléatoire, les distributions de proposition sont fixes. Dans la variante de marche aléatoire, le centre de la distribution de proposition change à chaque itération.
Ensuite, vous devez utiliser MH au lieu de simplement métropole. Vraisemblablement, cela consisterait à échantillonner une distribution discrète, sinon vous ne voudriez pas utiliser une fonction discrète pour générer vos propositions.
Dans tous les cas, si la distribution d'échantillonnage est tronquée ou si vous avez une connaissance préalable de son asymétrie, vous souhaiterez probablement utiliser une distribution d'échantillonnage asymétrique et devrez donc utiliser des métropoles-hastings.
Voici la métropole:
Essayons de l'utiliser pour échantillonner une distribution bimodale. Voyons d'abord ce qui se passe si nous utilisons une marche aléatoire pour notre proposition:
Essayons maintenant d'échantillonner en utilisant une distribution de proposition fixe et voyons ce qui se passe:
Cela semble correct au premier abord, mais si nous examinons la densité postérieure ...
nous verrons qu'il est complètement bloqué au maximum local. Ce n'est pas tout à fait surprenant puisque nous avons en fait centré notre distribution de propositions là-bas. La même chose se produit si nous centrons cela sur l'autre mode:
Nous pouvons essayer de laisser tomber notre proposition entre les deux modes, mais nous devrons régler la variance très haut pour avoir une chance d'explorer l'un d'eux
Remarquez comment le choix du centre de distribution de notre proposition a un impact significatif sur le taux d'acceptation de notre échantillonneur.
Nous encore coincés dans le plus proche des deux modes. Essayons de le déposer directement entre les deux modes.
Enfin, nous nous rapprochons de ce que nous recherchions. Théoriquement, si nous laissons l'échantillonneur fonctionner suffisamment longtemps, nous pouvons obtenir un échantillon représentatif de l'une de ces distributions de proposition, mais la marche aléatoire a produit un échantillon utilisable très rapidement, et nous avons dû tirer parti de notre connaissance de la façon dont le postérieur était supposé chercher à régler les distributions d'échantillonnage fixes pour produire un résultat utilisable (ce qui, à vrai dire, nous ne l'avons pas encore tout à fait
y_trace4
).Je vais essayer de mettre à jour avec un exemple de hastings métropole plus tard. Vous devriez être en mesure de voir assez facilement comment modifier le code ci-dessus pour produire un algorithme de hastings de métropole (indice: il vous suffit d'ajouter le rapport supplémentaire dans le
logR
calcul).la source
R=exp(logR)
par ceci:R=exp(logR)*(dnorm(y[t-1],y.prop,my_sigma)/dnorm(y.prop,y[t-1],my_sigma))
pour la marche aléatoire et non aléatoire MH. Est-ce exact?