查找概率密度区间


9

我有载体

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)

(我的实际向量的长度大于10,000),我想找到90%的密度所在的区间。是quantile(x, probs=c(0.05,0.95), type=5)最合适的还是还有其他方法?


您的问题对“ ...的间隔...”有点含糊-可能有多个间隔。您是否只对内部90%感兴趣,即在两侧对称修剪?毕竟,从最小值到90%ile,将捕获90%的数据,相似地,到最大值的10%ile。
Iterator

您是否正在寻找最短间隔,对称间隔(两端均等概率)或其他?
Glen_b-恢复莫妮卡

Answers:


19

如上所述,有许多不同的方法来定义包括90%的密度的间隔。尚未指出的是最高的后密度间隔维基百科),其定义为“端点的经验累积密度函数值之差为标称概率的最短间隔”。

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

3

当然,这似乎是最直接的方法。功能相当快。我一直在使用比您使用的样本大数百倍的样本,并且估计的稳定性应该在样本大小上很好。

其他软件包中的功能提供了更完整的描述性统计信息集。我使用的是Hmisc::describe,但是还有其他几个带有describe功能的软件包。


3

您的方法似乎很明智,尤其是对于示例中的离散数据而言,

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

但是另一种方法是使用计算密度内核:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.