R:查找所有值的95%范围的函数?

时间:2011-08-07 22:22:01

标签: r

R语言中是否有函数或优雅方式,以获得最小范围,包括95%的向量中的所有值?

非常欢迎任何建议:)

4 个答案:

答案 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%区间;没有正常假设。

hist of 95% interval

答案 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 hdrcdefunction hdr)。在给定覆盖概率下找到最短区间的更统计方法(涉及一些核密度估计)。

答案 2 :(得分:1)

TeachingDemos包中的emp.hpd函数将在向量中找到包含给定百分比数据(95%)的值,这些值也给出了值之间的最短范围。如果数据大致对称,那么这将接近使用分位数的结果,但如果数据偏斜,那么这将给出更短的范围。

答案 3 :(得分:0)

如果值的分布大致类似于normal distribution,则可以使用标准偏差。首先,计算分布的meanμ和standard deviation。 95%的值将在(μ - ​​1.960 * stdev,μ+ 1.960 * stdev)的区间内。