Ich versuche, den Hit-and-Run-MCMC-Algorithmus zu implementieren, habe jedoch einige Probleme, die Vorgehensweise zu verstehen. Die allgemeine Idee ist wie folgt:
Um einen Vorschlagssprung in MH zu generieren, gehen wir wie folgt vor:
- Erzeuge eine Richtung aus einer Verteilung auf der Oberfläche der EinheitskugelO
- Erzeugen Sie einen vorzeichenbehafteten Abstand entlang des eingeschränkten Raums.
Ich habe jedoch keine Ahnung, wie ich dies in R (oder einer anderen Sprache) umsetzen soll.
Hat jemand einen Codeausschnitt, der mich in die richtige Richtung weisen würde?
Übrigens, ich bin nicht so an einer Bibliothek interessiert, die diese Methode ausführt, ich möchte versuchen, sie selbst zu codieren.
Danke vielmals.
Antworten:
Ich habe mir das von Ihnen gelieferte Papier nicht angesehen, aber ich möchte es trotzdem versuchen:
Wenn Sie einen dimensionalen Parameterraum haben, können Sie mit eine zufällige Richtung erzeugen, die gleichmäßig auf der Oberfläche der Einheitskugel verteilt istdp d
(vgl. Wiki ).
Verwenden Sie diese Option, um Vorschläge für für die Zurückweisungsstichprobe zu generieren (vorausgesetzt, Sie können die Verteilung für tatsächlich auswerten ).dd d
Angenommen, Sie starten an Position und haben ein akzeptiert , erzeugen Sie einen Vorschlag mitd yx d y
und mache einen Metropolis-Hastings-Schritt, um zu entscheiden, ob du nach oder nicht.y
Wie gut dies funktionieren kann, hängt natürlich von der Verteilung von und davon, wie teuer es ist, seine Dichte (wiederholt) im Abstoßungsabtastschritt zu bewerten, aber da das Generieren von Vorschlägen für billig ist, können Sie damit durchkommen.dd d
Zum Nutzen von @ csgillespie hinzugefügt:
Nach dem, was ich durch ein wenig googeln feststellen konnte, ist das Hit-and-Run-MCMC in erster Linie zum schnellen Mischen nützlich, wenn Sie ein (multivariates) Ziel haben, das eine willkürlich begrenzte, aber nicht unbedingt verbundene Unterstützung hat, da Sie sich von jedem Punkt aus bewegen können in der Unterstützung zu einem anderen in einem Schritt. Mehr hier und hier .
quelle
Ich bin auf Ihre Frage gestoßen, als ich nach der Originalreferenz für Hit-and-Run gesucht habe. Dank dafür! Ich habe gerade am Ende dieses Blogs eine Proof-of-Concept-Implementierung von Hit-and-Run für PyMC zusammengestellt .
quelle