Σ
SDCalc
FortgeschrittenKonzepte·12 min

Robuste Statistik: MAD, IQR und ausreißerresistente Methoden

Vollständiger Leitfaden zu robusten Statistiken einschließlich der mittleren absoluten Abweichung (MAD) und des Interquartilsabstands (IQR). Erfahren Sie, wann ausreißerresistente Streuungsmaße eingesetzt werden — mit Beispielen und Python-Code.

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

Daten: 10, 12, 11, 13, 12, 11, 100 (ein Ausreißer) Standardabweichung: 32,4 (vom Ausreißer dominiert) MAD: 1,0 (ignoriert den Ausreißer) IQR: 1,5 (ignoriert den Ausreißer)

Bruchpunkt

Der "Bruchpunkt" einer Statistik ist der Anteil der Daten, der extrem sein kann, bevor die Statistik bedeutungslos wird. Die SD hat einen Bruchpunkt von 0 % (ein einziger Ausreißer kann sie zerstören). MAD und IQR haben Bruchpunkte von 50 % — die Hälfte Ihrer Daten kann aus Ausreißern bestehen und sie funktionieren trotzdem.

Mittlere absolute Abweichung (MAD)

Die MAD ist das robusteste Streuungsmaß. Sie berechnet den Median der absoluten Abweichungen vom Median:

MAD-Formel

MAD = median(|xᵢ - median(x)|)
1

Median bestimmen

Berechnen Sie den Median Ihres Datensatzes.
2

Abweichungen berechnen

Subtrahieren Sie den Median von jedem Wert und nehmen Sie den Absolutbetrag.
3

MAD bestimmen

Berechnen Sie den Median dieser absoluten Abweichungen.

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

σ̂ = 1.4826 × MAD

Warum 1,4826?

Dieser Skalierungsfaktor stammt aus der Beziehung zwischen MAD und SD bei Normalverteilungen. Er stellt sicher, dass die skalierte MAD ein erwartungstreuer Schätzer der wahren Standardabweichung ist, wenn die Daten normalverteilt sind.

Interquartilsabstand (IQR)

Der IQR misst die Streuung der mittleren 50 % der Daten — die Spanne zwischen dem 25. und 75. Perzentil:

IQR-Formel

IQR = Q3 - Q1 = 75th percentile - 25th percentile

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

σ̂ = IQR / 1.35 ≈ 0.7413 × IQR

Vergleich robuster Maße

Standardabweichung

Verwendet alle Datenpunkte · Am effizientesten bei Normalverteilung · Sehr empfindlich gegenüber Ausreißern · Bruchpunkt: 0 %

MAD

Robustestes Maß · Verwendet den Median (nicht den Mittelwert) · Immun gegen beliebige Ausreißer · Bruchpunkt: 50 %

IQR

Leicht verständlich · Verwendet in Boxplots · Ignoriert die extremen 50 % · Bruchpunkt: 25 %

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

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}")