我有矢量图
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)
最合适的还是有其他方法?
我有矢量图
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% 密度的区间。尚未指出的是最高 [后] 密度区间(维基百科),它被定义为“端点的经验累积密度函数值的差异是名义概率的最短区间”。
library(coda)
HPDinterval(as.mcmc(x), prob=0.9)
您的方式似乎很明智,尤其是对于示例中的离散数据,
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
这似乎是最直接的方法。该功能相当快。我一直在比您使用的样本大数百倍的样本上使用它,并且估计的稳定性应该适合您的样本量。
其他包中的一些函数可以提供更完整的描述性统计数据集。我使用的是Hmisc::describe
,但还有其他几个具有describe
功能的包。