numpy.quantile 和 statistics.quantiles 计算不同。哪一个是真的?

numpy.quantile and statistics.quantiles are calculating different. which one is true?

所以,假设我们有一个这样的数组:4,6,9,10,2,25,12,6,9 然后我尝试用 numpy.quantile 和 statistics.quantile

计算分位数
import numpy as np
from statistics import quantiles
arr = np.array([4,6,9,10,2,25,12,6,9,])
np.quantile(arr, (0.25, 0.50, 0.75))
quantiles(arr)

当我用numpy计算结果时: array([ 6., 9., 10.])

当我统计计算结果时: [5.0, 9.0, 11.0]

那么哪个库计算正确?

内置的statistics.quantiles' default method is “exclusive”, however the numpy.quantile是包容性的。如果你写

quantiles(arr, method='inclusive')

你得到的答案与 numpy 的答案相同。您应该阅读文档以找出适合您需要的文档。

事实上,MATLAB 甚至 returns 第三个选项:[5.5 9.0 10.5] 你的问题很有道理:怎么可能?

让我们先回顾一下分位数的定义:

In statistics and probability quantiles are cut points dividing the range of a probability distribution into continuous intervals with equal probabilities (...). q-quantiles are values that partition a finite set of values into q subsets of (nearly) equal sizes. From the introduction of Wikipedia.

问题大小不一 populations/groups。 (这里是 example (Wikipedia)。)您将不得不选择如何处理分数。问题是是否包括划分点。 显然,numpy 选择包括导致较高分位数向上舍入 (ceil) 和较低分位数向下舍入 (floor) 的点;而 statistics 决定不包括边界点; MATLAB 只是提供确切的边界——不一定是集合的一部分。

现在开始真正的问题:什么是正确的? 所有这些。 差异在更大 groups/populations 时可以忽略不计,这是典型的统计数据;)