我有一个有 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
; 这不是一个完整的答案,但希望它无论如何都有启发性。