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

时间:2020-04-23 05:45:37

标签: r

我有一个带有80个值的向量vec,如果我应用了mean(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%,因为这是向量的中值

这是怎么回事?

1 个答案:

答案 0 :(得分:1)

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;这不是一个完整的答案,但希望它仍然可以照亮。