Trova intervalli di densità di probabilità


9

Ho il vettore

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)

(il mio vettore reale ha una lunghezza> 10.000) e vorrei trovare gli intervalli in cui si trova il 90% della densità. È quantile(x, probs=c(0.05,0.95), type=5)il più appropriato o esiste un altro modo?


La tua domanda è un po 'vaga sugli "intervalli in cui ..." - potrebbero esserci più intervalli. Ti interessa solo il 90% interno, ovvero la rifilatura simmetrica su ciascun lato? Dopotutto, dal minimo al 90% ile, il 90% dei dati viene acquisito, analogamente per il 10% ile al valore massimo.
Iteratore

Stai cercando un intervallo più breve, un intervallo simmetrico (uguale probabilità su ciascuna estremità) o qualcos'altro?
Glen_b -Restate Monica

Risposte:


19

Come sottolineato sopra, ci sono molti modi diversi per definire un intervallo che include il 90% della densità. Uno che non è stato ancora sottolineato è l' intervallo di densità [posteriore] più elevato ( wikipedia ), che è definito come "l'intervallo più breve per cui la differenza nei valori della funzione di densità cumulativa empirica degli endpoint è la probabilità nominale".

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

3

Sembra certamente l'approccio più diretto. La funzione è abbastanza veloce. Lo uso sempre su campioni centinaia di volte più grandi di quello che stai usando e la stabilità delle stime dovrebbe essere buona per la dimensione del tuo campione.

Esistono funzioni in altri pacchetti che forniscono set più completi di statistiche descrittive. Quello che uso è Hmisc::describe, ma ci sono molti altri pacchetti con describefunzioni.


3

La tua strada sembra sensata, soprattutto con i dati discreti nell'esempio,

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

ma un altro modo sarebbe usare un kernel a densità calcolata:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.