In den letzten Tagen habe ich versucht zu verstehen, wie Markov Chain Monte Carlo (MCMC) funktioniert. Insbesondere habe ich versucht, den Metropolis-Hastings-Algorithmus zu verstehen und zu implementieren. Bisher denke ich, dass ich den Algorithmus allgemein verstehe, aber es gibt ein paar Dinge, die mir noch nicht klar sind. Ich möchte MCMC verwenden, um einige Modelle an Daten anzupassen. Aus diesem Grund werde ich mein Verständnis des Metropolis-Hastings-Algorithmus zum Anpassen einer geraden Linie an einige beobachtete Daten D beschreiben :
1) Machen Sie eine erste Vermutung für . Setzen Sie dies a als unser aktuelles a ( a 0 ). Füge auch ein am Ende der Markov-Kette hinzu ( C ).
2) Wiederholen Sie die folgenden Schritte mehrmals.
3) Auswertung gegenwärtiges Likelihood ( ) gegeben ein 0 und D .
4) Schlagen Sie ein neues ( a 1 ) durch Abtasten aus einer Normalverteilung mit μ = a 0 und σ = s t e p s i z e vor . Fürs Erste s t e p s i z e konstant.
5) Berechnen neuer Likelihood ( ) gegeben ein 1 und D .
6) Wenn größer als L 0 ist , akzeptiere eine 1 als die neue a 0 und füge sie am Ende von und fahren Sie mit Schritt 2 fort.
7) Wenn kleiner als L 0 ist erzeugen Sie eine Zahl ( ) im Bereich [0,1] aus einer gleichmäßigen Verteilung
8) Wenn kleiner ist als die Differenz zwischen den beiden Wahrscheinlichkeiten ( L 1 - L 0 ), akzeptiere eine 1 als die neue a 0 und füge sie am Ende von C an und fahren Sie mit Schritt 2 fort.
9) Wenn größer ist als die Differenz zwischen den beiden Wahrscheinlichkeiten ( L 1 - L 0 ), fügen Sie am Ende von C die a 0 hinzu und verwenden Sie weiterhin dieselbe a 0 , und fahren Sie mit Schritt 2 fort.
10) Ende der Wiederholung.
11) Entfernen Sie einige Elemente vom Anfang von (Einbrennphase).
12) Nehmen Sie nun den Durchschnitt der Werte in . Dieser Durchschnitt ist der geschätzte a .
Jetzt habe ich einige Fragen zu den oben genannten Schritten:
- Wie konstruiere ich die Wahrscheinlichkeitsfunktion für aber auch für eine beliebige Funktion?
- Ist dies eine korrekte Implementierung des Metropolis-Hastings-Algorithmus?
- Wie kann die Auswahl der Zufallszahlengenerierungsmethode in Schritt 7 die Ergebnisse ändern?
- Wie wird sich dieser Algorithmus ändern, wenn ich mehrere Modellparameter habe? Wenn ich zum Beispiel das Modell .
Anmerkungen / Credits: Die Hauptstruktur des oben beschriebenen Algorithmus basiert auf dem Code eines MPIA Python-Workshops.