Sie haben mehrere Dinge durcheinander. Die Theorie spricht über die Multiplikation der vorherigen Verteilung und der Wahrscheinlichkeit, nicht über Stichproben aus der vorherigen Verteilung. Es ist auch nicht klar, wovon Sie den Prior haben. Ist dies ein Prior für den Mittelwert von etwas? oder etwas anderes?
Dann haben Sie die Wahrscheinlichkeit umgekehrt. Ihre Beobachtungen sollten x sein, entweder mit vorherigen Ziehungen oder bekannten festen Konstanten als Mittelwert und Standardabweichung. Und selbst dann wäre es wirklich das Produkt von 4 Aufrufen, um mit jeder Ihrer Beobachtungen als x und dem gleichen Mittelwert und der gleichen Standardabweichung zu dnormieren.
Was wirklich nicht klar ist, ist, was Sie versuchen zu tun. Was ist deine Frage? Für welche Parameter interessieren Sie sich? Welche Prioritäten haben Sie für diese Parameter? Gibt es andere Parameter? Haben Sie Prioritäten oder feste Werte für diese?
Der Versuch, die Dinge so zu machen, wie Sie es derzeit sind, wird Sie nur noch mehr verwirren, bis Sie genau herausfinden, was Ihre Frage ist, und von dort aus arbeiten.
Das Folgende wird nach der Bearbeitung der ursprünglichen Frage hinzugefügt.
Ihnen fehlen noch einige Teile und Sie verstehen wahrscheinlich nicht alles, aber wir können dort beginnen, wo Sie sich gerade befinden.
Ich denke, Sie verwirren einige Konzepte. Es besteht die Wahrscheinlichkeit, dass die Beziehung zwischen den Daten und den Parametern angezeigt wird. Sie verwenden die Normalen mit zwei Parametern, dem Mittelwert und der Standardabweichung (oder Varianz oder Genauigkeit). Dann gibt es die vorherigen Verteilungen für die Parameter. Sie haben einen normalen Prior mit Mittelwert 0 und SD 1 angegeben, aber dieser Mittelwert und diese Standardabweichung unterscheiden sich vollständig vom Mittelwert und der Standardabweichung der Wahrscheinlichkeit. Um vollständig zu sein, müssen Sie entweder die Wahrscheinlichkeits-SD kennen oder der Wahrscheinlichkeits-SD einen Vorrang einräumen. Der Einfachheit halber (aber weniger real) gehe ich davon aus, dass wir wissen, dass die Wahrscheinlichkeits-SD (kein guter Grund, außer dass es funktioniert und sich von unterscheidet 1).12
So können wir ähnlich wie Sie beginnen und aus dem vorherigen generieren:
> obs <- c(0.4, 0.5, 0.8, 0.1)
> pri <- rnorm(10000, 0, 1)
Jetzt müssen wir die Wahrscheinlichkeiten berechnen. Dies basiert auf den vorherigen Ziehungen des Mittelwerts, der Wahrscheinlichkeit mit den Daten und dem bekannten Wert der SD. Die dnorm-Funktion gibt uns die Wahrscheinlichkeit eines einzelnen Punktes, aber wir müssen die Werte für jede der Beobachtungen multiplizieren. Hier ist eine Funktion, um dies zu tun:
> likfun <- function(theta) {
+ sapply( theta, function(t) prod( dnorm(obs, t, 0.5) ) )
+ }
Jetzt können wir die Wahrscheinlichkeit für jede Ziehung aus dem Prior für den Mittelwert berechnen
> tmp <- likfun(pri)
Um nun den hinteren Teil zu erhalten, müssen wir eine neue Art der Ziehung durchführen. Ein Ansatz, der der Ablehnungsstichprobe ähnlich ist, besteht darin, aus den vorherigen mittleren Ziehungen eine Stichprobe zu erstellen, die proportional zur Wahrscheinlichkeit für jede vorherige Ziehung ist (dies ist der nächste Multiplikationsschritt, den Sie waren Fragen über):
> post <- sample( pri, 100000, replace=TRUE, prob=tmp )
Jetzt können wir uns die Ergebnisse der hinteren Zeichnungen ansehen:
> mean(post)
[1] 0.4205842
> sd(post)
[1] 0.2421079
>
> hist(post)
> abline(v=mean(post), col='green')
und vergleiche die obigen Ergebnisse mit den Werten der geschlossenen Form aus der Theorie
> (1/1^2*mean(pri) + length(obs)/0.5^2 * mean(obs))/( 1/1^2 + length(obs)/0.5^2 )
[1] 0.4233263
> sqrt(1/(1+4*4))
[1] 0.2425356
Keine schlechte Annäherung, aber es würde wahrscheinlich besser funktionieren, ein eingebautes McMC-Werkzeug zu verwenden, um von hinten zu zeichnen. Die meisten dieser Werkzeuge probieren jeweils einen Punkt aus, nicht in Chargen wie oben.
Realistischer würden wir die SD der Wahrscheinlichkeit nicht kennen und würden auch dafür einen Prior benötigen (oft ist der Prior für die Varianz ein oder Gamma), aber dann ist die Berechnung komplizierter (McMC ist praktisch ) und es gibt keine geschlossene Form zum Vergleichen.χ2
Die allgemeine Lösung besteht darin, vorhandene Tools für die McMC-Berechnungen wie WinBugs oder OpenBugs (BRugs in R bietet eine Schnittstelle zwischen R und Bugs) oder Pakete wie LearnBayes in R zu verwenden.