量子化类型2的问题

问题描述 投票:0回答:1

我不明白以下行为与 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"
r quantile
1个回答
2
投票

据我所知,这与浮点数有关,因为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")

enter image description here

如果你把分位数(类型2)看作是p的函数,你永远不会在0.07时精确地评估函数,因此你的结果。by 中的。 从这个意义上说,函数的返回结果完全符合预期。在实际使用连续数据时,我无法想象它会有任何后果(但我知道这是个糟糕的论点)。

© www.soinside.com 2019 - 2024. All rights reserved.