分位数类型 2 的问题

Issue with quantile type 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"

据我所知,它与浮点数有关,因为 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 处评估该函数,因此您的 results.Try 例如在上面减少 by。从这个意义上说,函数 returns 完全符合预期。在连续数据的实践中,我无法想象它会产生任何后果(但我知道这是一个糟糕的论点)。