R语言中是否有函数或优雅方式,以获得最小范围,包括95%的向量中的所有值?
非常欢迎任何建议:)
答案 0 :(得分:14)
95%的数据将介于2.5百分位数和97.5百分位数之间。您可以按如下方式在R中计算该值:
x <- runif(100)
quantile(x,probs=c(.025,.975))
为了了解正在发生的事情,这是一个情节:
qts <- quantile(x,probs=c(.05,.95))
hist(x)
abline(v=qts[1],col="red")
abline(v=qts[2],col="red")
注意这是确切的/经验的95%区间;没有正常假设。
答案 1 :(得分:1)
编写这样的函数并不困难:
find_cover_region <- function(x, alpha=0.95) {
n <- length(x)
x <- sort(x)
k <- as.integer(round((1-alpha) * n))
i <- which.min(x[seq.int(n-k, n)] - x[seq_len(k+1L)])
c(x[i], x[n-k+i-1L])
}
功能将找到最短的间隔。如果首先有相同长度的间隔(来自-Inf
)将会被选中。
find_cover_region(1:100, 0.70)
# [1] 1 70
find_cover_region(rnorm(10000), 0.9973) # three sigma, approx (-3,3)
# [1] -2.859 3.160 # results may differ
您还可以查看最高密度区域(例如package hdrcde,function hdr
)。在给定覆盖概率下找到最短区间的更统计方法(涉及一些核密度估计)。
答案 2 :(得分:1)
TeachingDemos包中的emp.hpd函数将在向量中找到包含给定百分比数据(95%)的值,这些值也给出了值之间的最短范围。如果数据大致对称,那么这将接近使用分位数的结果,但如果数据偏斜,那么这将给出更短的范围。
答案 3 :(得分:0)
如果值的分布大致类似于normal distribution,则可以使用标准偏差。首先,计算分布的meanμ和standard deviation。 95%的值将在(μ - 1.960 * stdev,μ+ 1.960 * stdev)的区间内。