Warum robuste Statistik?
Die Standardabweichung ist ein leistungsfähiges Streuungsmaß, hat aber eine kritische Schwäche: extreme Empfindlichkeit gegenüber Ausreißern. Ein einzelner Extremwert kann die SD dramatisch aufblähen und ein irreführendes Bild der typischen Variation erzeugen.
Robuste Statistiken liefern Streuungsmaße, die dem Einfluss von Ausreißern widerstehen, und sind daher unverzichtbar für reale Daten, bei denen Messfehler, Eingabefehler oder echte Extremfälle häufig vorkommen.
Beispiel: Der Ausreißereffekt
Bruchpunkt
Mittlere absolute Abweichung (MAD)
Die MAD ist das robusteste Streuungsmaß. Sie berechnet den Median der absoluten Abweichungen vom Median:
MAD-Formel
Median bestimmen
Abweichungen berechnen
MAD bestimmen
MAD zur Schätzung von σ skalieren: Für normalverteilte Daten gilt MAD ≈ 0,6745 × σ. Um SD aus MAD zu schätzen, multiplizieren Sie mit 1,4826:
SD-Schätzung aus MAD
Warum 1,4826?
Interquartilsabstand (IQR)
Der IQR misst die Streuung der mittleren 50 % der Daten — die Spanne zwischen dem 25. und 75. Perzentil:
IQR-Formel
Der IQR wird häufig verwendet, weil er einfach zu verstehen ist, in Boxplots leicht visualisiert werden kann und die Grundlage der verbreiteten "1,5×IQR-Regel" zur Ausreißererkennung bildet.
IQR zur Schätzung von σ skalieren: Für normalverteilte Daten gilt IQR ≈ 1,35 × σ. Um SD aus IQR zu schätzen:
SD-Schätzung aus IQR
Vergleich robuster Maße
Standardabweichung
MAD
IQR
Wann robuste Statistik verwenden
- Explorative Analyse: Wenn Sie nicht wissen, ob Ausreißer existieren, beginnen Sie mit robusten Maßen
- Datenqualitätsprobleme: Wenn Daten Fehler oder Messprobleme enthalten können
- Schwerschwänzige Verteilungen: Wenn Extremwerte erwartet werden (Finanzrenditen, Versicherungsansprüche)
- Kleine Stichproben: Wenn Ausreißer aufgrund weniger Beobachtungen überproportional wirken
- Ausreißererkennung: Die Verwendung der SD zur Erkennung von Ausreißern ist zirkulär; verwenden Sie stattdessen IQR oder MAD
Implementierungsbeispiele
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}")