Ein weiteres entmutigendes Problem in der Statistik. Die Frage ist alt, aber die einleitenden Beispiele online sind schwer zu bekommen. Lassen Sie mich zwei großartige Beispiele vereinfachen, nur für den Fall, dass jemand, der dem zufälligen Markov-Rundgang durch PageRank folgt, hier von MCMC verwirrt ist und voller Vorfreude auf eine leicht zu verfolgende Antwort ist. Wie wahrscheinlich? Das könnte eine Folgefrage sein.
FIRST EXAMPLE:
N(0 , 1 )
Die Schwierigkeit besteht darin, zu erkennen, dass es nach Durchlaufen aller mechanischen Schritte nur einen magischen Trick gibt: die binäre Entscheidung , einen vorgeschlagenen Wert zu akzeptieren oder abzulehnen .
xmean
0sd
1rnorm(10000)
eps
ϵxichxi + 1runif(1, - eps, eps)
xich.
Jeder vorgeschlagene Wert würde sich somit zufällig und innerhalb der Grenzen von vom vorherigen Wert unterscheiden [- eps,+ eps]
.
Geben Sie den Markov-Kernel ein . Wir müssen die Wahrscheinlichkeit eines Übergangs auf den neuen vorgeschlagenen Wert in gewisser Weise einschätzen, ähnlich wie in einer Markov-Übergangsmatrix für einen bestimmten Zustand zu einem bestimmten Zeitpunktich erzählt über die Wahrscheinlichkeit des neuen Zustands zum Zeitpunkt i + 1. Wenn Sie Zweifel haben, gehen Sie hierher oder fragen Sie die Oma, die auf all die Fragen geachtet hat: "Wie würden Sie Ihrer Nanna die Quantenphysik erklären?" Art von Fragen (sehen die Matrizen nicht gut aus? ;-)).
Um diese Akzeptanzwahrscheinlichkeit in das Bouquet der ermittelten Werte einzubeziehen, vergleichen wir einfach die Höhe des N( 0 , 1 )Dichte zum vorgeschlagenen neuen Wert (xi + 1) zum vorherigen (bereits akzeptierten Wert), (xich), genau wie dieser:
Und wir nehmen das Verhältnis der beiden Werte: min(1, dnorm(candidate_value)/dnorm(x))
. Da wir eine Wahrscheinlichkeit wollen, kann die resultierende Berechnung nicht übergehen1, das immer dann auftritt, wenn N( 0 , 1 ) p df beim xi + 1 (Kandidatenwert) ist größer als bei xich, was der automatischen Annahme des vorgeschlagenen Wertes gleichkommt und den min(1, ...)
Teil des Codes erklärt. Andernfalls ist die Wahrscheinlichkeit, dass dnorm
der vorgeschlagene Wert akzeptiert wird , umso höher , je näher der Wert am vorherigen Wert liegt.
Wir haben also eine Akzeptanzwahrscheinlichkeit, müssen aber eine binäre Entscheidung treffen (den neuen vorgeschlagenen Wert akzeptieren oder ablehnen). Und hier kommt der Zaubertrick: Wenn die berechnete Wahrscheinlichkeit min(1, dnorm(candidate_value)/dnorm(x))
größer ist als eine runif(1)
einheitliche Auslosung0 zu 1(so nah wie möglich an einem Münzwurf für einen kontinuierlichen Wert), akzeptieren wir den x[i+1]
Eintrag der Kette und füllen ihn mit dem vorgeschlagenen Wert aus . ansonsten füllen wir es mit einer Wiederholung des vorherigen Wertes aus , x[i]
... Die Idee wäre, besser zwei gleiche als einen zu weit in den Schwanz hinein.
Wir machen das tausende Male und wir sammeln alle diese Werte (nur die akzeptierten und wiederholten Werte), und wenn wir das Histogramm zeichnen, erhalten wir eine schöne normale Kurve mit einer sd
Nähe zu1und zentriert bei 0.
Nur ein letzter Punkt: Wo fangen wir an? Wahrscheinlich nicht relevant, aber in der Simulation geben wir den ersten Wert als ein0, x = 0; vec[1] = x
bevor Sie alle übrigen Iterationen durchlaufen und den Prozess seinem Verlauf folgen lassen.
SECOND EXAMPLE:
Dies ist aufregender und bezieht sich auf die Schätzung der Parameter einer linearen Regressionskurve durch Berechnung der logarithmischen Wahrscheinlichkeiten für zufällige Parameter bei gegebenem Datensatz . Die Exegese der Codezeilen wird jedoch in der hier gespeicherten komprimierten Simulation erstellt , wobei sehr ähnliche Schritte wie im ersten Beispiel ausgeführt werden.