Σ
SDCalc
IntermedioConceptos·12 min

Estadística Robusta: MAD, RIC y Métodos Resistentes a Valores Atípicos

Guía completa de estadística robusta incluyendo la Desviación Absoluta de la Mediana (MAD) y el Rango Intercuartílico (RIC). Aprende cuándo usar medidas de dispersión resistentes a valores atípicos con ejemplos y código en Python.

¿Por qué Estadística Robusta?

La desviación estándar es una medida poderosa de dispersión, pero tiene una debilidad crítica: extrema sensibilidad a los valores atípicos. Un solo valor extremo puede inflar dramáticamente la DE, dando una imagen engañosa de la variación típica.

La estadística robusta proporciona medidas de dispersión que resisten la influencia de los valores atípicos, lo que las hace esenciales para datos del mundo real donde los errores de medición, los errores de captura de datos o los casos genuinamente extremos son comunes.

Ejemplo: El Efecto de un Valor Atípico

Datos: 10, 12, 11, 13, 12, 11, 100 (un valor atípico) Desviación Estándar: 32.4 (dominada por el valor atípico) MAD: 1.0 (ignora el valor atípico) RIC: 1.5 (ignora el valor atípico)

Punto de Quiebre

El “punto de quiebre” de un estadístico es la proporción de datos que pueden ser extremos antes de que el estadístico pierda su significado. La DE tiene un punto de quiebre de 0% (un solo valor atípico puede distorsionarla). La MAD y el RIC tienen puntos de quiebre del 50%: la mitad de tus datos pueden ser atípicos y aún así funcionan.

Desviación Absoluta de la Mediana (MAD)

La MAD es la medida de dispersión más robusta. Calcula la mediana de las desviaciones absolutas respecto a la mediana:

MAD Formula

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

Encontrar la Mediana

Calcula la mediana de tu conjunto de datos.
2

Calcular las Desviaciones

Resta la mediana de cada valor y toma los valores absolutos.
3

Encontrar la MAD

Calcula la mediana de estas desviaciones absolutas.

Escalar la MAD para estimar σ: Para datos con distribución normal, MAD ≈ 0.6745 × σ. Para estimar la DE a partir de la MAD, multiplica por 1.4826:

SD Estimate from MAD

σ̂ = 1.4826 × MAD

¿Por qué 1.4826?

Este factor de escala proviene de la relación entre la MAD y la DE para distribuciones normales. Asegura que la MAD escalada sea un estimador insesgado de la verdadera desviación estándar cuando los datos son normales.

Rango Intercuartílico (RIC)

El RIC mide la dispersión del 50% central de los datos, es decir, el rango entre los percentiles 25 y 75:

IQR Formula

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

El RIC se usa ampliamente porque es fácil de entender, se visualiza bien en diagramas de caja y es la base de la regla común de “1.5×RIC” para la detección de valores atípicos.

Escalar el RIC para estimar σ: Para datos normales, RIC ≈ 1.35 × σ. Para estimar la DE a partir del RIC:

SD Estimate from IQR

σ̂ = IQR / 1.35 ≈ 0.7413 × IQR

Comparación de Medidas Robustas

Desviación Estándar

Usa todos los datos · Más eficiente para datos normales · Muy sensible a valores atípicos · Punto de quiebre: 0%

MAD

Medida más robusta · Usa la mediana (no la media) · Inmune a cualquier valor atípico · Punto de quiebre: 50%

RIC

Fácil de entender · Se usa en diagramas de caja · Ignora el 50% extremo · Punto de quiebre: 25%

Cuándo Usar Estadística Robusta

  • Análisis exploratorio: Cuando no sabes si existen valores atípicos, comienza con medidas robustas
  • Problemas de calidad de datos: Cuando los datos pueden contener errores o problemas de medición
  • Distribuciones de colas pesadas: Cuando se esperan valores extremos (rendimientos financieros, reclamaciones de seguros)
  • Muestras pequeñas: Cuando los valores atípicos tienen un impacto desproporcionado debido a pocas observaciones
  • Detección de valores atípicos: Usar la DE para detectar atípicos es circular; utiliza el RIC o la MAD en su lugar

Ejemplos de Implementación

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