我有一个带有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%,因为这是向量的中值
这是怎么回事?
答案 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
;这不是一个完整的答案,但希望它仍然可以照亮。