Ich versuche diese hintere Verteilung zu berechnen:
Das Problem ist, dass der Zähler, der das Produkt einer Reihe von -Wahrscheinlichkeiten ist, zu klein ist. (Mein ist groß, ungefähr 1500).
Daher werden die posterioren Werte für all all zu 0 berechnet (ich berechne in R).
Zur Verdeutlichung hat jedes sein eigenes , zusammen bilden diese einen Vektor von Elementen für . Jedes hat seinen eigenen Element-Vektor von .
BEARBEITEN: Hinzufügen eines Wiedergabebeispiels (für den Zähler)
p <- sample(seq(0,1,by=0.01), 1500, replace=T)
y <- sample(c(0,1), 1500, replace=T)
dbern(y, p) # 1500-element vector, each element is < 1
prod(dbern(y, p)) # produce 0
exp(sum(log(dbern(y, p)))) # produce 0 since the sum is very negative
r
likelihood
posterior
Heisenberg
quelle
quelle
Antworten:
Dies ist ein häufiges Problem bei der Berechnung von Wahrscheinlichkeiten für alle Arten von Modellen. Die üblichen Aufgaben bestehen darin, Protokolle zu bearbeiten und einen gemeinsamen Skalierungsfaktor zu verwenden, der die Werte in einen vernünftigeren Bereich bringt.
In diesem Fall würde ich vorschlagen:
Schritt 1: Wählen Sie eine ziemlich "typischen" , . Teilen Sie die Formel für Zähler und Nenner des allgemeinen Terms durch den Zähler für , um etwas zu erhalten, bei dem die Wahrscheinlichkeit eines Unterlaufs viel geringer ist.θ θ0 θ=θ0
Schritt 2: Arbeiten Sie an der Protokollskala. Dies bedeutet, dass der Zähler eine Exp der Summen der Unterschiede der Protokolle ist und der Nenner eine Summe der Exp der Summen der Unterschiede der Protokolle.
NB: Wenn eines Ihrer Ps 0 oder 1 ist, ziehen Sie diese separat heraus und führen Sie keine Protokolle dieser Begriffe. Sie sind einfach zu bewerten!
[Allgemeiner ausgedrückt kann diese Skalierung und das Arbeiten auf der Protokollskala so gesehen werden, dass sie eine Reihe von Protokollwahrscheinlichkeiten und dies tut: . Eine naheliegende Wahl für besteht darin, den größten Term 0 zu machen, wodurch wir : . Beachten Sie, dass Sie bei einem Zähler und einem Nenner für beide dasselbe , das dann abgebrochen wird. Oben entspricht dies der mit der höchsten Log-Wahrscheinlichkeit.]li log(∑ieli)=c+log(∑ieli−c) c log(∑ieli)=maxi(li)+log(∑ieli−maxi(li)) c θ0
Die üblichen Begriffe im Zähler sind tendenziell moderater, und daher sind in vielen Situationen sowohl der Zähler als auch der Nenner relativ vernünftig.
Wenn der Nenner verschiedene Größen enthält, addieren Sie die kleineren, bevor Sie die größeren addieren.
Wenn nur wenige Begriffe stark dominieren, sollten Sie Ihre Aufmerksamkeit darauf richten, die Berechnung für diese relativ genau durchzuführen.
quelle
Versuchen Sie, die Eigenschaften der Verwendung der Logarithmen und der Summierung zu nutzen, anstatt das Produkt aus Dezimalzahlen zu verwenden. Verwenden Sie nach der Summierung einfach das Anti-Log, um es wieder in Ihre natürlichere Form zu bringen. Ich denke, so etwas sollte den Trick machen
quelle