Mengapa Statistik Teguh?
Sisihan piawai ialah ukuran serakan yang berkuasa, tetapi ia mempunyai kelemahan kritikal: kepekaan melampau terhadap pencilan. Satu nilai melampau tunggal boleh meningkatkan SD secara dramatik, memberikan gambaran yang mengelirukan tentang variasi tipikal.
Statistik teguh menyediakan ukuran serakan yang menahan pengaruh pencilan, menjadikannya penting untuk data dunia sebenar di mana ralat pengukuran, kesilapan kemasukan data, atau kes melampau yang tulen adalah biasa.
Contoh: Kesan Pencilan
Titik Pecah
Sisihan Mutlak Median (MAD)
MAD ialah ukuran serakan yang paling teguh. Ia mengira median sisihan mutlak daripada median:
MAD Formula
Cari Median
Kira Sisihan
Cari MAD
Menskala MAD untuk menganggar σ: Untuk data bertaburan normal, MAD ≈ 0.6745 × σ. Untuk menganggar SD daripada MAD, darabkan dengan 1.4826:
SD Estimate from MAD
Mengapa 1.4826?
Julat Antara Kuartil (IQR)
IQR mengukur serakan 50% data di tengah—julat antara persentil ke-25 dan ke-75:
IQR Formula
IQR digunakan secara meluas kerana ia mudah difahami, senang divisualisasikan dalam plot kotak, dan membentuk asas peraturan “1.5×IQR” yang biasa untuk pengesanan pencilan.
Menskala IQR untuk menganggar σ: Untuk data normal, IQR ≈ 1.35 × σ. Untuk menganggar SD daripada IQR:
SD Estimate from IQR
Membandingkan Ukuran Teguh
Sisihan Piawai
MAD
IQR
Bila Menggunakan Statistik Teguh
- Analisis penerokaan: Apabila anda tidak tahu sama ada pencilan wujud, mulakan dengan ukuran teguh
- Isu kualiti data: Apabila data mungkin mengandungi ralat atau masalah pengukuran
- Taburan ekor berat: Apabila nilai melampau dijangka (pulangan kewangan, tuntutan insurans)
- Sampel kecil: Apabila pencilan mempunyai kesan luar biasa kerana bilangan cerapan yang sedikit
- Pengesanan pencilan: Menggunakan SD untuk mengesan pencilan adalah membulat; gunakan IQR atau MAD sebagai ganti
Contoh Pelaksanaan
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}")