Encontre intervalos de densidade de probabilidade

9

Eu tenho o vetor

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)

(meu vetor real tem um comprimento> 10.000) e gostaria de encontrar os intervalos em que estão os 90% da densidade. É quantile(x, probs=c(0.05,0.95), type=5)o mais apropriado ou existe outra maneira?

ECII
fonte
Sua pergunta é um pouco vaga sobre "os intervalos em que ..." - pode haver vários intervalos. Você está interessado apenas nos 90% internos, ou seja, corte simetricamente de cada lado? Afinal, do arquivo mínimo a 90%, 90% dos dados são capturados, da mesma forma que 10% do valor máximo.
Iterator
Você está procurando um intervalo mais curto, um intervalo simétrico (probabilidade igual em cada extremidade) ou algo mais?
Glen_b -Reinstala Monica

Respostas:

19

Como apontado acima, existem muitas maneiras diferentes de definir um intervalo que inclua 90% da densidade. Um que ainda não foi apontado é o maior intervalo de densidade [posterior] ( wikipedia ), que é definido como "o intervalo mais curto para o qual a diferença nos valores da função de densidade cumulativa empírica dos pontos finais é a probabilidade nominal".

library(coda)
HPDinterval(as.mcmc(x), prob=0.9)
Ben Bolker
fonte
3

Certamente parece ser a abordagem mais direta. A função é bastante rápida. Eu o uso o tempo todo em amostras centenas de vezes maiores que a que você está usando, e a estabilidade das estimativas deve ser boa no tamanho da sua amostra.

Existem funções em outros pacotes que fornecem conjuntos mais completos de estatísticas descritivas. O que eu uso é Hmisc::describe, mas existem vários outros pacotes com describefunções.

DWin
fonte
3

Seu caminho parece sensato, especialmente com os dados discretos no exemplo,

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

mas outra maneira seria usar um kernel de densidade computada:

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
fonte
-1

Sim. :-). Você pode achar que a saída stats::densityé mais útil.

Carl Witthoft
fonte