Diagnóstico: residuales, outliers, leverage

r
estadistica
Los 4 gráficos de plot(lm), residuales vs ajustados para detectar no-linealidad, QQ-plot para normalidad de residuos, scale-location para homocedasticidad y Cook’s distance para puntos influyentes.

Por qué diagnosticar

Un modelo de regresión solo es válido si sus supuestos se cumplen razonablemente:

  1. Linealidad: la relación entre predictores y respuesta es lineal.
  2. Normalidad de los residuos.
  3. Homocedasticidad: la varianza de los residuos es constante en todo el rango.
  4. Independencia: las observaciones no están correlacionadas entre sí.
  5. Ausencia de puntos altamente influyentes que distorsionen los coeficientes.

R te da los gráficos diagnósticos clásicos en una línea: plot(modelo). Vamos a leer cada uno.

Los 4 gráficos de plot(lm)

modelo <- lm(mpg ~ wt + hp, data = mtcars)

par(mfrow = c(2, 2))   # 4 gráficos en una rejilla 2x2
plot(modelo)

Salen cuatro paneles. Cada uno responde una pregunta concreta sobre los supuestos.

Panel 1: Residuals vs Fitted: ¿hay patrón sistemático?

Eje X: valores predichos por el modelo. Eje Y: residuos (observado − predicho).

Lo que quieres ver: una nube de puntos sin patrón claro, con la línea roja de suavizado aproximadamente horizontal en cero.

Lo que es problema:

  • Curva en U o ∩: la relación verdadera no es lineal. El modelo lineal se equivoca sistemáticamente. Considera añadir términos polinómicos (I(x^2)) o transformar Y.
  • Forma de embudo (más dispersión a un lado): heterocedasticidad, la varianza no es constante. Considera transformación log o ponderación.

Si ves curva, el modelo lineal no está bien especificado. Si ves embudo, los errores estándar y p-values del modelo son sospechosos.

Panel 2: QQ-plot de residuos: ¿son normales?

Eje X: cuantiles teóricos de una normal estándar. Eje Y: cuantiles observados de los residuos estandarizados.

Lo que quieres ver: puntos cayendo sobre la diagonal.

Lo que es problema:

  • Colas largas (puntos divergen en los extremos): residuos con outliers. Afecta a los IC y p-values.
  • Curva en S: distribución sesgada. Transformar Y puede ayudar.

Recordatorio del tutorial de distribuciones: no uses Shapiro-Wilk para “validar” normalidad. Mira el QQ-plot y razona sobre tamaño muestral. Con n ≥ 30, los t-tests de los coeficientes son robustos a desviaciones moderadas (CLT).

Panel 3: Scale-Location: ¿es constante la varianza?

Eje X: valores predichos. Eje Y: raíz cuadrada del valor absoluto de los residuos estandarizados.

Lo que quieres ver: una nube sin tendencia clara, línea roja aproximadamente horizontal.

Lo que es problema:

  • Línea ascendente o descendente: heterocedasticidad confirmada. Los grupos con valores predichos altos tienen residuos más dispersos (o al revés).

Si el panel 1 muestra forma de embudo y este panel muestra tendencia clara, la heterocedasticidad es seria. Opciones: transformar Y, modelos con varianza ponderada, o errores estándar robustos (sandwich::vcovHC).

Panel 4: Residuals vs Leverage: puntos influyentes

Eje X: leverage (qué tan extremo es el valor del predictor para esa observación). Eje Y: residuo estandarizado.

Lo que quieres ver: todos los puntos lejos de las líneas rojas de Cook’s distance (las curvas en los bordes).

Lo que es problema:

  • Puntos fuera de las curvas de Cook’s distance (especialmente Cook’s d > 0.5 o > 1): observaciones que influyen desproporcionadamente en los coeficientes. Cambiar el dataset eliminándolas modificaría visiblemente el modelo.

Estos puntos NO son automáticamente errores ni outliers a eliminar. Son observaciones que importan. Hay que examinarlas.

Cook’s distance: la métrica de influencia

Para extraer Cook’s distance de cada observación:

cooks <- cooks.distance(modelo)

# Las 5 observaciones más influyentes
sort(cooks, decreasing = TRUE)[1:5]

Heurísticas para Cook’s d:

  • < 0.5: influencia normal.
  • 0.5 - 1: revisable.
  • > 1: punto altamente influyente, examina.

Una observación con Cook’s d alto tiene dos características simultáneamente:

  1. Residuo grande (el modelo predice mal su valor).
  2. Leverage alto (su X está lejos del centro de los datos).

Si solo tiene una de las dos, no es influyente. Si tiene ambas, sí.

Qué hacer con outliers (casi nunca eliminarlos)

Esta es la sección más malinterpretada de la estadística aplicada. “Tengo un outlier, lo elimino” es casi siempre la respuesta incorrecta.

Pasos correctos:

  1. Identifícalo. Cook’s d, residuos estandarizados con |valor| > 3, leverage > 2 * mean(leverage).
  2. Investígalo. ¿Es un error de captura/medida? ¿Una observación de una población distinta? ¿Una observación legítima pero atípica?
  3. Decide qué hacer SEGÚN la causa:
    • Error de captura demostrado: corrige o elimina con justificación documentada.
    • Población distinta (entró por error en tu muestra): elimina con justificación.
    • Observación legítima atípica: no la elimines. Es información real. Considera modelos robustos (MASS::rlm).

Eliminar outliers porque “salen del modelo” sin investigar es estadísticamente deshonesto. Los outliers a menudo son la señal más importante de los datos: pacientes con respuesta excepcional, casos que el modelo no captura, fenómenos que requieren explicación.

Alternativas modernas: performance::check_model()

El paquete performance ofrece un único comando que genera todos los diagnósticos con etiquetas legibles:

# install.packages("performance")
library(performance)
check_model(modelo)

Genera ocho paneles diagnósticos con explicación textual en español/inglés. Más legible que plot(modelo) cuando estás aprendiendo o cuando documentas el análisis para otros.

Para tests específicos:

check_normality(modelo)           # equivalente a Shapiro-Wilk con interpretación
check_heteroscedasticity(modelo)  # Breusch-Pagan
check_outliers(modelo)            # múltiples métodos
check_collinearity(modelo)        # VIF

Trampas habituales

  • Saltarse el diagnóstico. Un summary(lm) con coeficientes significativos y R² alto puede ocultar un modelo mal especificado. Sin plot(modelo), no sabes si los IC y p-values son fiables.
  • Eliminar outliers automáticamente. Cualquier paper con frase “se eliminaron las observaciones con |residuos| > 2” sin justificación clínica/de dominio es sospechoso. Examina antes de borrar.
  • Confundir leverage con outlier. Leverage alto = X extremo. Outlier = residuo extremo. Cook’s d combina ambos. No son sinónimos.
  • Aplicar transformaciones para “arreglar” diagnósticos sin pensar. Si la relación es realmente curva, un lm lineal está mal. Transformar Y puede esconder ese hecho sin resolverlo. A veces la respuesta correcta es un modelo no lineal (GAM, splines), no una transformación.

En la siguiente entrega

Has aprendido a verificar que tu modelo es válido. La siguiente pieza es cómo reportar resultados con honestidad: por qué un p-value solo no basta y cómo añadir tamaños de efecto e intervalos de confianza para que el lector sepa cuánto importa, no solo si “hay diferencia”. Es lo siguiente.