一、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 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適用於一些特殊情況下,但不是適用於所有情況的萬能工具。
原創文章,作者:HERJR,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/362659.html