R 中位数和 ecdf() 函数给出不同的结果 - 为什么?

  • 本文关键字:结果 ecdf 中位数 函数 r
  • 更新时间 :
  • 英文 :


我有一个有 80 个值的向量 vec,如果我应用 median(vec) 函数,我会得到一个值。然而,我想做的是相反的,给定一个数字估计它所属的百分位数。我找到了 ecdf() 函数,但是我得到了不同的结果。这是一个简化的示例

> vec = c(100,150,150,150,150,150,200)
> median(vec)
# This gives the expected result
[1] 150
# However if I go the other way around, meaning I pass the value and try to return the percentile I get:
rev_med <- ecdf(vec)
rev_med(150)
[1] 0.8571429

!!

我期望的行为是通过 150 并获得 50%,因为这是向量的中位数

这里出了什么问题?

ecdf给出经验CDF,这是一个函数F,其中F(x) = P[X <= x]X是产生输入向量的随机变量vec

这是一个估计器;median是一个不同的估计器。

但你可以看到ecdf给出了一个合理的答案:

mean(vec <= 150)
# [1] 0.8571429

尽管如此,我们可以使用ecdf对象产生 150 作为中位数:

quantile(ecdf(vec), .5)
# 50% 
# 150 

请参阅?ecdf; 这不是一个完整的答案,但希望它无论如何都有启发性。

最新更新