iqr怎么算

发布时间:2023-05-22

一、iqr的定义

iqr(InterQuartile Range)即四分位间距,是一种衡量数据波动程度的方法。它是剔除最小25%和最大25%后剩余数据的中位数与第一四分位数的差值。也就是Q3-Q1,Q1是数据的低四分位数,Q3是数据的高四分位数。 代码如下:

def iqr(data):
    # 计算第一、三四分位数
    q1 = np.percentile(data, 25)
    q3 = np.percentile(data, 75)
    # 计算iqr
    iqr = q3 - q1
    return iqr

二、iqr的应用

iqr常用于箱线图(boxplot)中,箱线图以iqr为基础计算出箱体的位置,将数据分为四个部分:上界(Q3 + 1.5×iqr)、下界(Q1 - 1.5×iqr)、iqr范围内的中位数、iqr范围内的第一四分位数和第三四分位数。 iqr也常用于异常值的检测,将超出iqr范围的数据视为异常值。 代码如下:

def detect_outlier(data):
    # 计算第一、三四分位数
    q1 = np.percentile(data, 25)
    q3 = np.percentile(data, 75)
    # 计算iqr和上、下边界
    iqr = q3 - q1
    lower_bound = q1 - 1.5 * iqr
    upper_bound = q3 + 1.5 * iqr
    # 将超出范围的视为异常值
    outlier = [x for x in data if x < lower_bound or x > upper_bound]
    return outlier

三、iqr与标准差的比较

iqr与标准差都是用来衡量数据波动程度的方法,但有一些区别:

  1. iqr只考虑25%~75%数据的范围,更加稳健,不易受极值的影响;而标准差考虑了全部数据,受极值的影响更大。
  2. 标准差是对数据分布的测量,与数据本身有关,而iqr是对数据的排序结果的测量,与具体数据数值无关。 因此,iqr适用于数据有异常值的情况下,标准差适用于数据呈正态分布的情况下。 代码如下:
def std_iqr(data):
    # 计算标准差和iqr
    std = np.std(data)
    q1 = np.percentile(data, 25)
    q3 = np.percentile(data, 75)
    iqr = q3 - q1
    return std, iqr

四、iqr的局限性

iqr虽然稳健、不易受极值影响,但也有其局限性:

  1. iqr只考虑了25%~75%范围的数据,对于较短尾的数据分布可能有些欠缺。
  2. iqr无法度量非对称分布的波动情况,如偏态分布。
  3. iqr只关注数据的排序,无法反映数据值本身所含信息。 综上,iqr适用于一些特殊情况下,但不是适用于所有情况的万能工具。