python - scipy.stats 是否对 iqr 进行了错误的计算?

标签 python numpy scipy

我正在对数据集 [23,25,28,28,32,33,35] 进行编码

根据 wikiscipy doc

IQR = Q3 - Q1 = 33 - 25 = 8

当我在数据集上运行 IQR 时,结果 (6) 与预期的结果 (8) 不同。

我在 https://stackoverflow.com/a/23229224 中尝试了另一种方法, 结果为 6.

这是我的代码

import numpy as np
from scipy.stats import iqr
x = np.array([23,25,28,28,32,33,35])
print(iqr(x, axis=0))

是什么导致了这个问题?

最佳答案

scipy.stats.iqr 似乎不遵循维基百科中记录的递归算法。相反,它只是执行 np.percentile(x, 75) - np.percentile(x, 25) 这不排除中位数,它包含在内,所以你得到 (32 + 33 )/2 - (25 + 28)/2 = 6

如果您想在维基百科中使用该算法,您需要执行以下操作:

def iqr_(m):
    m = np.array(m)
    n = m.size//2
    m_ = np.partition(m.ravel(), n + 1)
    return np.median(m_[n + m.size%2:]) - np.median(m_[:n])

iqr_([23,25,28,28,32,33,35])
8.0

编辑:在 talk page 上of wikipedia 提出所提供的算法不是确定的,实际上 scipy.stats.iqr 的方法也是可以接受的。参见确定四分位数的三种方法Here

关于python - scipy.stats 是否对 iqr 进行了错误的计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51943661/

相关文章:

python - 美丽汤4 : Need to add inverse paragraphs tags to separate a field into two paragraphs

python - Pandas 按日期范围分组和对多列进行不同的计算

python - 如何通过在 numpy 中广播来防止添加两个数组?

python - 如何为项目列表创建标签列表?

python - scipy curve_fit 提高 "OptimizeWarning: Covariance of the parameters could not be estimated"

machine-learning - 图像归一化

python - Django 是否支持在许多非抽象模型之后继承的模型类?

python - 当字典不存在时设置默认值

python-2.7 - Python从数据中删除异常值

python - 在Python中删除CSR格式矩阵的列