Σ
SDCalc
KözéphaladóFogalmak·12 min

Robusztus statisztika: MAD, IQR és kiugróérték-ellenálló módszerek

Teljes útmutató a robusztus statisztikához: medián abszolút eltérés (MAD) és interkvartilis terjedelem (IQR). Ismerd meg, mikor használj kiugróérték-ellenálló szóródási mutatókat, példákkal és Python kóddal.

Miért robusztus statisztika?

A szórás hatékony szóródási mutató, de van egy kritikus gyengesége: rendkívül érzékeny a kiugró értékekre. Egyetlen szélsőséges érték drasztikusan megnövelheti a szórást, félrevezető képet adva a tipikus változékonyságról.

A robusztus statisztikák olyan szóródási mutatókat kínálnak, amelyek ellenállnak a kiugró értékek hatásának, így nélkülözhetetlenek a valós adatokhoz, ahol a mérési hibák, adatbeviteli tévedések vagy valódi szélsőséges esetek gyakoriak.

Példa: A kiugró érték hatása

Adatok: 10, 12, 11, 13, 12, 11, 100 (egy kiugró érték) Szórás: 32,4 (a kiugró érték uralja) MAD: 1,0 (figyelmen kívül hagyja a kiugrót) IQR: 1,5 (figyelmen kívül hagyja a kiugrót)

Törési pont

Egy statisztika „törési pontja” az adatok azon aránya, amely lehet szélsőséges, mielőtt a statisztika értelmetlenné válna. A szórás törési pontja 0% (egyetlen kiugró érték tönkreteheti). A MAD és az IQR törési pontja 50% – az adataid fele lehet kiugró, és még mindig működnek.

Medián abszolút eltérés (MAD)

A MAD a legrobusztusabb szóródási mutató. A mediántól való abszolút eltérések mediánját számítja ki:

MAD Formula

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

Medián meghatározása

Számítsd ki az adathalmaz mediánját.
2

Eltérések kiszámítása

Vond ki a mediánt minden értékből és vedd az abszolút értéket.
3

MAD meghatározása

Számítsd ki ezeknek az abszolút eltéréseknek a mediánját.

A MAD skálázása σ becsléséhez: Normális eloszlású adatoknál MAD ≈ 0,6745 × σ. A szórás MAD-ból történő becsléséhez szorozd meg 1,4826-tal:

SD Estimate from MAD

σ̂ = 1.4826 × MAD

Miért 1,4826?

Ez a skálázási tényező a MAD és a szórás közötti összefüggésből származik normális eloszlásoknál. Biztosítja, hogy a skálázott MAD torzítatlan becslője legyen a valódi szórásnak, ha az adatok normálisak.

Interkvartilis terjedelem (IQR)

Az IQR az adatok középső 50%-ának szóródását méri – a 25. és 75. percentilis közötti terjedelmet:

IQR Formula

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

Az IQR széles körben használatos, mert könnyen érthető, egyszerűen vizualizálható dobozdiagramokon, és az általános „1,5×IQR szabály” alapját képezi a kiugró értékek felismeréséhez.

Az IQR skálázása σ becsléséhez: Normális adatoknál IQR ≈ 1,35 × σ. A szórás IQR-ből történő becsléséhez:

SD Estimate from IQR

σ̂ = IQR / 1.35 ≈ 0.7413 × IQR

Robusztus mutatók összehasonlítása

Szórás

Minden adatpontot felhasznál · A leghatékonyabb normális adatoknál · Rendkívül érzékeny a kiugró értékekre · Törési pont: 0%

MAD

A legrobusztusabb mutató · Mediánt használ (nem átlagot) · Immunis bármely kiugró értékre · Törési pont: 50%

IQR

Könnyen érthető · Dobozdiagramokon használatos · A szélső 50%-ot figyelmen kívül hagyja · Törési pont: 25%

Mikor használjunk robusztus statisztikát?

  • Feltáró elemzés: Ha nem tudod, hogy vannak-e kiugró értékek, kezdj robusztus mutatókkal
  • Adatminőségi problémák: Ha az adatok hibákat vagy mérési problémákat tartalmazhatnak
  • Vastag szélű eloszlások: Ha szélsőséges értékek várhatók (pénzügyi hozamok, biztosítási kárigények)
  • Kis minták: Ha a kiugró értékek aránytalanul nagy hatással bírnak a kevés megfigyelés miatt
  • Kiugróérték-felismerés: A szórás használata kiugró értékek felismerésére körkörös érvelés; használd helyette az IQR-t vagy a MAD-ot

Implementációs példák

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