Ich versuche, das 95% glaubwürdige Intervall der folgenden posterioren Verteilung zu berechnen. Ich konnte die Funktion in R dafür nicht finden, aber ist der Ansatz unten korrekt?
x <- seq(0.4,12,0.4)
px <- c(0,0, 0, 0, 0, 0, 0.0002, 0.0037, 0.018, 0.06, 0.22 ,0.43, 0.64,0.7579, 0.7870, 0.72, 0.555, 0.37, 0.24, 0.11, 0.07, 0.02, 0.009, 0.005, 0.0001, 0,0.0002, 0, 0, 0)
plot(x,px, type="l")
mm <- sum(x*px)/sum(px)
var <- (sum((x)^2*px)/sum(px)) - (mm^2)
cat("95% credible interval: ", round(mm -1.96*sqrt(var),3), "-", round(mm + 1.96*sqrt(var),3),"\n")
Antworten:
Wie von Henry bemerkt , gehen Sie von einer Normalverteilung aus und es ist vollkommen in Ordnung, wenn Ihre Daten einer Normalverteilung folgen. Sie sind jedoch falsch, wenn Sie keine Normalverteilung für sie annehmen können. Im Folgenden beschreibe ich zwei verschiedene Ansätze, die Sie für eine unbekannte Verteilung verwenden können, wenn Sie nur Datenpunkte
x
und zugehörige Dichteschätzungen angebenpx
.Als Erstes müssen Sie überlegen, was genau Sie mithilfe Ihrer Intervalle zusammenfassen möchten. Sie könnten beispielsweise an Intervallen interessiert sein, die mit Quantilen erhalten wurden, aber Sie könnten auch an Regionen mit der höchsten Dichte (siehe hier oder hier ) Ihrer Verteilung interessiert sein . Während dies in einfachen Fällen wie symmetrischen, unimodalen Verteilungen nicht viel (wenn überhaupt) ausmachen sollte, wird dies einen Unterschied für "kompliziertere" Verteilungen ausmachen. Im Allgemeinen erhalten Sie durch Quantile ein Intervall mit einer Wahrscheinlichkeitsmasse, die um den Median (die mittleren Ihrer Verteilung) konzentriert ist, während der Bereich mit der höchsten Dichte ein Bereich um die Moden ist100 α % der Verteilung. Dies wird klarer, wenn Sie die beiden Darstellungen auf dem Bild unten vergleichen: Quantile "schneiden" die Verteilung vertikal, während der Bereich mit der höchsten Dichte sie horizontal "schneidet".
Als Nächstes sollten Sie sich überlegen, wie Sie mit der Tatsache umgehen sollen, dass Sie unvollständige Informationen über die Verteilung haben (vorausgesetzt, dass es sich um eine kontinuierliche Verteilung handelt, haben Sie nur eine Reihe von Punkten und keine Funktion). Was Sie dagegen tun können, ist, die Werte "wie sie sind" zu übernehmen oder eine Art Interpolation oder Glättung zu verwenden, um die "Zwischen" -Werte zu erhalten.
Ein Ansatz wäre die Verwendung einer linearen Interpolation (siehe
?approxfun
in R) oder alternativ etwas Glatteres wie Splines (siehe?splinefun
in R). Wenn Sie sich für einen solchen Ansatz entscheiden, müssen Sie berücksichtigen, dass Interpolationsalgorithmen keine Domänenkenntnisse über Ihre Daten haben und ungültige Ergebnisse wie Werte unter Null usw. zurückgeben können.Der zweite Ansatz, den Sie in Betracht ziehen könnten, ist die Verwendung der Verteilung der Kerndichte / -mischung, um Ihre Verteilung anhand der von Ihnen zur Verfügung gestellten Daten zu approximieren. Das Knifflige dabei ist, sich für eine optimale Bandbreite zu entscheiden.
Als nächstes werden Sie die Intervalle von Interesse finden. Sie können entweder numerisch oder durch Simulation vorgehen.
1a) Abtastung, um Quantilintervalle zu erhalten
1b) Abtasten, um den Bereich mit der höchsten Dichte zu erhalten
2a) Finden Sie Quantile numerisch
2b) Ermitteln Sie den Bereich mit der höchsten Dichte numerisch
Wie Sie in den folgenden Diagrammen sehen können, geben beide Methoden bei einer unimodalen, symmetrischen Verteilung dasselbe Intervall zurück.
quelle