Γιατί Ανθεκτική Στατιστική;
Η τυπική απόκλιση είναι ένα ισχυρό μέτρο διασποράς, αλλά έχει μια κρίσιμη αδυναμία: εξαιρετική ευαισθησία στις ακραίες τιμές. Μια μόνο ακραία τιμή μπορεί να διογκώσει δραματικά την ΤΑ, δίνοντας παραπλανητική εικόνα της τυπικής μεταβλητότητας.
Η ανθεκτική στατιστική παρέχει μέτρα διασποράς που αντιστέκονται στην επίδραση ακραίων τιμών, καθιστώντας τα απαραίτητα για πραγματικά δεδομένα όπου σφάλματα μέτρησης, λάθη καταχώρησης ή γνήσιες ακραίες περιπτώσεις είναι συνηθισμένα.
Παράδειγμα: Η Επίδραση Ακραίας Τιμής
Σημείο Θραύσης
Διάμεση Απόλυτη Απόκλιση (MAD)
Η MAD είναι το πιο ανθεκτικό μέτρο διασποράς. Υπολογίζει τη διάμεσο των απόλυτων αποκλίσεων από τη διάμεσο:
MAD Formula
Εύρεση Διαμέσου
Υπολογισμός Αποκλίσεων
Εύρεση MAD
Κλιμάκωση MAD για εκτίμηση σ: Για κανονικά κατανεμημένα δεδομένα, MAD ≈ 0,6745 × σ. Για εκτίμηση ΤΑ από MAD, πολλαπλασιάστε με 1,4826:
SD Estimate from MAD
Γιατί 1,4826;
Ενδοτεταρτημοριακό Εύρος (IQR)
Το IQR μετρά τη διασπορά του μεσαίου 50% των δεδομένων — το εύρος μεταξύ 25ου και 75ου εκατοστημορίου:
IQR Formula
Το IQR χρησιμοποιείται ευρέως επειδή είναι απλό στην κατανόηση, εύκολο στην οπτικοποίηση σε θηκογράμματα (box plots) και αποτελεί τη βάση του κοινού κανόνα “1,5×IQR” για ανίχνευση ακραίων τιμών.
Κλιμάκωση IQR για εκτίμηση σ: Για κανονικά δεδομένα, IQR ≈ 1,35 × σ. Για εκτίμηση ΤΑ από IQR:
SD Estimate from IQR
Σύγκριση Ανθεκτικών Μέτρων
Τυπική Απόκλιση
MAD
IQR
Πότε να Χρησιμοποιείτε Ανθεκτική Στατιστική
- Διερευνητική ανάλυση: Όταν δεν ξέρετε αν υπάρχουν ακραίες τιμές, ξεκινήστε με ανθεκτικά μέτρα
- Θέματα ποιότητας δεδομένων: Όταν τα δεδομένα μπορεί να περιέχουν σφάλματα ή προβλήματα μέτρησης
- Βαρυουρές κατανομές: Όταν αναμένονται ακραίες τιμές (χρηματοοικονομικές αποδόσεις, ασφαλιστικές αξιώσεις)
- Μικρά δείγματα: Όταν οι ακραίες τιμές έχουν δυσανάλογη επίδραση λόγω λίγων παρατηρήσεων
- Ανίχνευση ακραίων τιμών: Η χρήση ΤΑ για ανίχνευση ακραίων τιμών είναι κυκλική· χρησιμοποιήστε IQR ή MAD
Παραδείγματα Υλοποίησης
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}")