為什麼需要穩健統計?
標準差是一個強大的離散程度量度,但它有一個致命弱點:對離群值極度敏感。一個極端值就能大幅膨脹標準差,導致對典型變異程度的描述失真。
穩健統計提供了能抵抗離群值影響的離散程度量度,對於現實世界中常見的測量誤差、資料輸入錯誤或真實極端案例的資料來說,這些方法不可或缺。
範例:離群值的影響
資料:10, 12, 11, 13, 12, 11, 100(一個離群值)
標準差: 32.4(被離群值主導)
MAD: 1.0(忽略離群值)
IQR: 1.5(忽略離群值)
崩潰點
統計量的“崩潰點”是在該統計量失去意義之前,資料中可以有多少比例的極端值。標準差的崩潰點是 0%(一個離群值就能毀掉它)。MAD 和 IQR 的崩潰點是 50%——即使一半的資料是離群值,它們仍然有效。
中位數絕對偏差 (MAD)
MAD 是最穩健的離散程度量度。它計算各值與中位數之差的絕對值的中位數:
MAD 公式
MAD = median(|xᵢ - median(x)|)
1
計算中位數
計算資料集的中位數。
2
計算偏差
用每個值減去中位數,取絕對值。
3
計算 MAD
計算這些絕對偏差的中位數。
用 MAD 估計 σ: 對於常態分配的資料,MAD ≈ 0.6745 × σ。要從 MAD 估計標準差,乘以 1.4826:
由 MAD 估計標準差
σ̂ = 1.4826 × MAD
為什麼是 1.4826?
這個縮放係數來自常態分配中 MAD 與標準差的關係。它確保經縮放的 MAD 在資料為常態時是真實標準差的不偏估計量。
四分位距 (IQR)
IQR 衡量中間 50% 資料的離散程度——即第 25 百分位數和第 75 百分位數之間的範圍:
IQR 公式
IQR = Q3 - Q1 = 第 75 百分位數 - 第 25 百分位數
IQR 被廣泛使用,因為它簡單易懂、在盒鬚圖中容易視覺化,而且是常見的“1.5×IQR 規則”偵測離群值的基礎。
用 IQR 估計 σ: 對於常態資料,IQR ≈ 1.35 × σ。要從 IQR 估計標準差:
由 IQR 估計標準差
σ̂ = IQR / 1.35 ≈ 0.7413 × IQR
穩健量度比較
標準差
使用所有資料點 · 常態資料效率最高 · 對離群值非常敏感 · 崩潰點:0%
MAD
最穩健的量度 · 使用中位數(非平均數) · 不受任何離群值影響 · 崩潰點:50%
IQR
容易理解 · 用於盒鬚圖 · 忽略最極端的 50% · 崩潰點:25%
何時使用穩健統計
- 探索性分析: 當你不知道是否存在離群值時,先從穩健量度開始
- 資料品質問題: 當資料可能包含錯誤或測量問題時
- 重尾分配: 當極端值是預期中的(金融報酬、保險理賠)
- 小樣本: 當離群值因觀測值少而有過大影響時
- 離群值偵測: 用標準差來偵測離群值是循環論證;改用 IQR 或 MAD
實作範例
Python
import numpy as np
from scipy import stats
def mad(data):
"""Median Absolute Deviation"""
median = np.median(data)
return np.median(np.abs(data - median))
def scaled_mad(data):
"""MAD scaled to estimate SD (for normal data)"""
return 1.4826 * mad(data)
def iqr(data):
"""Interquartile Range"""
return np.percentile(data, 75) - np.percentile(data, 25)
# Compare on data with outlier
data = [10, 12, 11, 13, 12, 11, 100]
print(f"SD: {np.std(data, ddof=1):.2f}")
print(f"MAD: {mad(data):.2f}")
print(f"Scaled MAD: {scaled_mad(data):.2f}")
print(f"IQR: {iqr(data):.2f}")