Mengapa Statistik Robust?
Simpangan baku adalah ukuran sebaran yang kuat, tetapi memiliki kelemahan kritis: sangat sensitif terhadap pencilan. Satu nilai ekstrem dapat meningkatkan SD secara dramatis, memberikan gambaran variasi tipikal yang menyesatkan.
Statistik robust menyediakan ukuran sebaran yang tahan terhadap pengaruh pencilan, menjadikannya penting untuk data dunia nyata di mana kesalahan pengukuran, kesalahan entri data, atau kasus ekstrem yang asli adalah hal umum.
Contoh: Efek Pencilan
Titik Kerusakan
Deviasi Absolut Median (MAD)
MAD adalah ukuran sebaran paling robust. Ini menghitung median deviasi absolut dari median:
Rumus MAD
Cari Median
Hitung Deviasi
Cari MAD
Menskalakan MAD untuk mengestimasi σ: Untuk data berdistribusi normal, MAD ≈ 0,6745 × σ. Untuk mengestimasi SD dari MAD, kalikan dengan 1,4826:
Estimasi SD dari MAD
Mengapa 1,4826?
Rentang Interkuartil (IQR)
IQR mengukur sebaran 50% tengah data—rentang antara persentil ke-25 dan ke-75:
Rumus IQR
IQR digunakan secara luas karena sederhana dipahami, mudah divisualisasikan dalam diagram kotak, dan menjadi dasar “aturan 1,5×IQR” yang umum untuk deteksi pencilan.
Menskalakan IQR untuk mengestimasi σ: Untuk data normal, IQR ≈ 1,35 × σ. Untuk mengestimasi SD dari IQR:
Estimasi SD dari IQR
Membandingkan Ukuran Robust
Simpangan Baku
MAD
IQR
Kapan Menggunakan Statistik Robust
- Analisis eksploratori: Ketika Anda tidak tahu apakah pencilan ada, mulai dengan ukuran robust
- Masalah kualitas data: Ketika data mungkin mengandung kesalahan atau masalah pengukuran
- Distribusi berekor tebal: Ketika nilai ekstrem diharapkan (imbal hasil keuangan, klaim asuransi)
- Sampel kecil: Ketika pencilan memiliki dampak berlebih karena sedikit pengamatan
- Deteksi pencilan: Menggunakan SD untuk mendeteksi pencilan bersifat sirkuler; gunakan IQR atau MAD sebagai gantinya
Contoh Implementasi
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}")