首页 > 解决方案 > 分位数类型 2 的问题

问题描述

我不理解以下行为quantile。它应该在type=2不连续处平均,但这似乎并不总是发生。如果我创建一个包含 100 个数字的列表并查看百分位数,那么我不应该取每个百分位数的平均值吗?这种行为发生在一些人身上,但不是对所有人(即第 7 个百分位)。

quantile(seq(1, 100, 1), 0.05, type=2)
# 5%
# 5.5 

quantile(seq(1, 100, 1), 0.06, type=2)
# 6%
# 6.5 

quantile(seq(1, 100, 1), 0.07, type=2)
# 7%
# 8 

quantile(seq(1, 100, 1), 0.08, type=2)
# 8%
# 8.5 

这与浮点问题有关吗?

100*0.06 == 6
#TRUE

100*0.07 == 7 
#FALSE

sprintf("%.20f", 100*0.07)
#"7.00000000000000088818"

标签: rquantile

解决方案


据我所知,它与浮点数有关,因为 0.07 不能完全用浮点数表示。

p <- seq(0, 0.1, by = 0.001)
q <- quantile(seq(1, 100, 1), p, type=2)
plot(p, q, type = "b")
abline(v = 0.07, col = "grey")

在此处输入图像描述

如果您将分位数(类型 2)视为 p 的函数,您将永远不会在 0.07 处准确评估该函数,因此您的结果。尝试例如by在上面减少。从这个意义上说,该函数完全按预期返回。在使用连续数据的实践中,我无法想象它会产生任何后果(但我知道这是一个糟糕的论点)。


推荐阅读