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?

ECII
quelle
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)
Ben Bolker
quelle
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.

DWin
quelle
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
James
quelle
-1

Ja. :-). Möglicherweise ist die Ausgabe von stats::densitynützlicher.

Carl Witthoft
quelle