Waarom robuuste statistiek?
Standaardafwijking is een krachtige spreidingsmaat, maar heeft een kritieke zwakte: extreme gevoeligheid voor uitschieters. Een enkele extreme waarde kan de SD dramatisch opblazen en een misleidend beeld geven van de typische variatie.
Robuuste statistiek biedt spreidingsmaten die de invloed van uitschieters weerstaan, waardoor ze essentieel zijn voor praktijkgegevens waar meetfouten, invoerfouten of werkelijk extreme gevallen veel voorkomen.
Voorbeeld: het uitschieterseffect
Instortpunt
Mediaan absolute afwijking (MAD)
MAD is de meest robuuste spreidingsmaat. Het berekent de mediaan van de absolute afwijkingen ten opzichte van de mediaan:
MAD-formule
Bepaal de mediaan
Bereken afwijkingen
Bepaal MAD
MAD schalen om σ te schatten: Voor normaal verdeelde gegevens geldt MAD ≈ 0,6745 × σ. Om SD te schatten vanuit MAD, vermenigvuldig met 1,4826:
SD-schatting vanuit MAD
Waarom 1,4826?
Interkwartielafstand (IQR)
IQR meet de spreiding van de middelste 50% van de gegevens—het bereik tussen het 25e en 75e percentiel:
IQR-formule
IQR wordt veel gebruikt omdat het eenvoudig te begrijpen is, gemakkelijk te visualiseren in boxplots en de basis vormt van de gangbare “1,5×IQR-regel” voor uitschietersdetectie.
IQR schalen om σ te schatten: Voor normale gegevens geldt IQR ≈ 1,35 × σ. Om SD te schatten vanuit IQR:
SD-schatting vanuit IQR
Robuuste maten vergelijken
Standaardafwijking
MAD
IQR
Wanneer robuuste statistiek gebruiken
- Verkennende analyse: Wanneer u niet weet of er uitschieters zijn, begin met robuuste maten
- Gegevenskwaliteitsproblemen: Wanneer gegevens fouten of meetproblemen kunnen bevatten
- Zwaartstaartverdelingen: Wanneer extreme waarden verwacht worden (financiële rendementen, verzekeringsschaden)
- Kleine steekproeven: Wanneer uitschieters buitensporige impact hebben door weinig waarnemingen
- Uitschietersdetectie: SD gebruiken om uitschieters te detecteren is circulair; gebruik in plaats daarvan IQR of MAD
Implementatievoorbeelden
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}")