Schlagen Sie und führen Sie MCMC aus

16

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 EinheitskugelOdO
  • 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.

csgillespie
quelle
1
Ich habe noch nie von diesem Algorithmus gehört, aber er klingt ziemlich interessant. Könnten Sie einen Link zu einer erklärenden Quelle angeben? Vielen Dank !
Steffen
@steffen Hier ist ein Link zum Originalartikel - na ja eigentlich der technische Bericht. Ich habe dieses Verfahren auch noch nie angewendet.
csgillespie
1
Was ist der Vorteil von Hit & Run MCMC gegenüber anderen Methoden? Konvergenzgeschwindigkeit?
RockScience
@fRed: Deshalb habe ich das Kopfgeld angeboten. Ich habe über Hit and Run gelesen, weiß aber nicht, unter welchen Umständen es nützlich wäre.
Csgillespie
3
Verbindung ist jetzt unterbrochen.
Daknowles

Antworten:

11

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 istdpd

x <- rnorm(p)
d <- x/sqrt(sum(x^2))

(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 ).ddd

Angenommen, Sie starten an Position und haben ein akzeptiert , erzeugen Sie einen Vorschlag mitd yxdy

 lambda <- r<SOMEDISTRIBUTION>(foo, bar)
 y <- x + lambda * d

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.ddd


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 .

Fabians
quelle
1
Wenn diese Antwort nicht zufriedenstellend ist, können Sie erklären, warum?
John Salvatier
Ich bin mir bei @fred nicht sicher, aber als ich das Kopfgeld anbot, wollte ich wahrscheinlich ein bisschen mehr Einblick in das erfolgreiche MCMC. Zum Beispiel, für welche Arten von Problemen wäre es am besten geeignet. Natürlich, wenn es keine anderen Antworten gibt, dann würde diese Frage das Kopfgeld gewinnen.
Csgillespie
3
@csgillespie: Ich habe meine Antwort bearbeitet, um Ihrem Interesse besser gerecht zu werden. Es darf nicht gesagt werden, dass ich das Kopfgeld nicht verdient habe. ;)
Fabians
2
Vielen Dank für den Link. Einer der Gründe, warum ich das Kopfgeld ausgab, war, dass meine Google-Suche ein paar mathematische Diskussionen über die Methode ergab, aber wenig praktische Anwendungen. Bitte nehmen Sie es nicht als geringfügig, wenn ich weitere 48 Stunden warte, bevor ich das Kopfgeld
vergebe
4

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 .

Abraham Flachsmann
quelle