Finden Sie Wahrscheinlichkeitsdichteintervalle


9

Ich habe den Vektor

x <- c(1,2,3,4,5,5,5,6,6,6,6,
       7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
       7,7,7,7,7,7,7,7,8,8,8,8,9,9,9,10)

(mein tatsächlicher Vektor hat eine Länge von> 10.000) und ich möchte die Intervalle finden, in denen 90% der Dichte liegen. Ist quantile(x, probs=c(0.05,0.95), type=5)das am besten geeignet oder gibt es einen anderen Weg?


Ihre Frage ist etwas vage zu "den Intervallen, in denen ..." - es kann mehrere Intervalle geben. Interessieren Sie sich nur für die inneren 90%, dh symmetrisches Trimmen auf jeder Seite? Immerhin werden von der minimalen bis zu 90% ile 90% der Daten erfasst, ähnlich wie bei 10% ile bis zum maximalen Wert.
Iterator

Suchen Sie ein kürzestes Intervall, ein symmetrisches Intervall (gleiche Wahrscheinlichkeit an jedem Ende) oder etwas anderes?
Glen_b -State Monica

Antworten:


19

Wie oben erwähnt, gibt es viele verschiedene Möglichkeiten, ein Intervall zu definieren, das 90% der Dichte enthält. Eines, auf das noch nicht hingewiesen wurde, ist das höchste [hintere] Dichteintervall ( Wikipedia ), das definiert ist als "das kürzeste Intervall, für das die Differenz der empirischen kumulativen Dichtefunktionswerte der Endpunkte die nominelle Wahrscheinlichkeit ist".

library(coda)
HPDinterval(as.mcmc(x), prob=0.9)

3

Es scheint sicherlich der einfachste Ansatz zu sein. Die Funktion ist ziemlich schnell. Ich verwende es ständig für Stichproben, die hunderte Male größer sind als die von Ihnen verwendete, und die Stabilität der Schätzungen sollte bei Ihrer Stichprobengröße gut sein.

Es gibt Funktionen in anderen Paketen, die vollständigere Sätze beschreibender Statistiken bereitstellen. Das Hmisc::describe, was ich benutze, ist , aber es gibt mehrere andere Pakete mit describeFunktionen.


3

Ihr Weg erscheint sinnvoll, insbesondere mit den diskreten Daten im Beispiel,

quantile(x,probs=c(0.05,0.95), type=5)
 5% 95% 
2.8 9.0

Eine andere Möglichkeit wäre die Verwendung eines Kernels mit berechneter Dichte:

dx <- density(x)
dn <- cumsum(dx$y)/sum(dx$y)
li <- which(dn>=0.05)[1]
ui <- which(dn>=0.95)[1]
dx$x[c(li,ui)]
[1] 2.787912 9.163246

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.