微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – scipy.stats是否为iqr做了错误的计算?

我在数据集上编码[23,25,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,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,35])
8.0

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

原文地址:https://www.jb51.cc/python/438912.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐