Wie kann ich eine Schätzung der posterioren Dichte aus einem Prior und einer Wahrscheinlichkeit berechnen?


9

Ich versuche zu verstehen, wie man den Bayes'schen Satz verwendet, um einen Posterior zu berechnen, aber ich bleibe beim Berechnungsansatz hängen, z. B. im folgenden Fall ist mir nicht klar, wie man das Produkt aus dem Prior und der Wahrscheinlichkeit nimmt und dann den berechnet hintere:

In diesem Beispiel bin ich daran interessiert, die hintere Wahrscheinlichkeit von berechnen, und ich verwende einen Standardnormal vor , aber ich möchte es wissen Wie berechnet man den Posterior aus einem Prior auf , der durch eine MCMC-Kette dargestellt wird? Daher werde ich 1000 Stichproben als Ausgangspunkt verwenden.μμ p(μ)N(μ=0,σ=1)μ

  • Probe 1000 vom Vorgänger.

    set.seed(0)
    prior.mu      <- 0
    prior.sigma   <- 1
    prior.samples <- sort(rnorm(1000, prior.mu, prior.sigma))
    
  • Machen Sie einige Beobachtungen:

    observations <- c(0.4, 0.5, 0.8, 0.1)
    
  • und berechne die Wahrscheinlichkeit, zB :p(y|μ,σ)

    likelihood <- prod(dnorm(observations, mean(prior.samplse), sd(prior.samples)))
    

Was ich nicht ganz verstehe ist:

  1. wann / wie multipliziert man den Prior mit der Wahrscheinlichkeit?
  2. wann / wie normalisiert man die posteriore Dichte?

Bitte beachten Sie: Ich interessiere mich für die allgemeine Rechenlösung, bei der es sich um verallgemeinerbare Probleme ohne analytische Lösung handeln könnte


1
Es ist nicht klar, welche unterschiedlichen Verteilungen in Ihrem Beispiel vorliegen. Bitte klären Sie Ihre vorherige / bedingte Verteilung. Weil es sein könnte, dass Sie eine Terminologie verwechselt haben.
Nick Sabbe

@ Nick du bist richtig. Danke für die Bewertung. Ich habe versucht zu klären.
Abe

Antworten:


8

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.


Vielen Dank, dass Sie mir geholfen haben, dies etwas weiter zu klären. Ich habe meine Antwort aktualisiert, obwohl ich immer noch nicht klar bin. Meine Frage ist 'Was ist die beste Schätzung von angesichts des Prior und der Daten?'; Es gibt keine anderen Parameter. μ
Abe

Danke, dass du das für mich aufgeschlüsselt hast. Ich hatte eine harte Zeit, aber das hilft.
Abe
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.