Distribuciones: lo que un test asume
¿Por qué hablar de distribuciones?
Todo test estadístico clásico asume algo sobre cómo se distribuyen los datos. Si tu test es un t-test, asume que las medias muestrales siguen una distribución normal (por el Teorema Central del Límite, esto se cumple aproximadamente con n ≥ 30 incluso si los datos brutos no lo son). Si es un ANOVA, asume normalidad dentro de cada grupo. Si es chi-cuadrado, asume frecuencias esperadas suficientemente grandes.
Entender la distribución de tus datos es lo que te permite elegir el test correcto o saber cuándo necesitas una alternativa no-paramétrica.
La distribución normal y por qué importa
La normal (también llamada gaussiana) tiene tres propiedades que la hacen central:
- Aparece naturalmente cuando muchas pequeñas causas independientes se suman (alturas, errores de medida, residuos de modelos lineales).
- El Teorema Central del Límite garantiza que las medias de muestras grandes se distribuyen normalmente, aunque los datos no lo sean. Eso es lo que hace robustos a los tests basados en medias.
- La estadística clásica está construida sobre ella: t, chi-cuadrado y F son distribuciones derivadas de combinaciones de normales.
La normal está totalmente descrita por dos parámetros: media (µ) y desviación estándar (σ).
# Generar 1000 valores de N(0, 1) — la normal estándar
set.seed(1)
x_normal <- rnorm(1000, mean = 0, sd = 1)
hist(x_normal, breaks = 30, col = "lightblue",
main = "Normal(0, 1)")Reglas mentales:
- 68-95-99.7: el 68 % de los datos cae a ±1 SD. El 95 % a ±2 SD. El 99.7 % a ±3 SD.
- Asimetría 0, curtosis 3: la normal es simétrica y mesocúrtica.
Inspección visual: el QQ-plot
Si quieres saber si una variable es aproximadamente normal, no uses un test de normalidad. Usa un QQ-plot.
library(ggplot2)
ggplot(mtcars, aes(sample = mpg)) +
stat_qq() +
stat_qq_line(color = "red") +
labs(title = "QQ-plot — ¿es mpg normal?")Lectura: si los puntos caen sobre la línea diagonal, los datos son aproximadamente normales. Si forman una curva, no. Si tienen colas pesadas, hay outliers. Cinco minutos de práctica con varios datasets y aprendes a leerlos al vuelo.
Por qué los tests de normalidad son discutibles
Existen tests formales: Shapiro-Wilk, Kolmogorov-Smirnov, Anderson-Darling. Devuelven un p-value. La gente los reporta como si fueran verdad revelada.
shapiro.test(mtcars$mpg)
#> W = 0.94756, p-value = 0.1229Pero:
- Con
ngrande, cualquier desviación pequeña de normalidad dap < 0.05. Tu dataset tiene 10 000 filas con una asimetría minúscula →p < 0.001→ “no normal” → ¿usar test no-paramétrico? Probablemente no haga falta. - Con
npequeño (< 30), el test tiene poco poder para detectar desviaciones reales.p > 0.05puede significar “los datos son normales” o “no tengo evidencia para rechazar normalidad”. Son cosas distintas. - El test no te dice si la desviación importa: solo si es estadísticamente detectable.
Regla práctica:
- Inspecciona visualmente con QQ-plot.
- Si la desviación es leve y
n ≥ 30, usa el test paramétrico (los t-tests son robustos a desviaciones moderadas por el CLT). - Si la desviación es grande o
nes muy pequeño y los datos son visiblemente no normales, usa una alternativa no-paramétrica.
No reportes Shapiro-Wilk como justificación de elección de test. Es una métrica engañosa.
Otras distribuciones útiles
Tres más que aparecen mucho:
t de Student, como la normal pero con colas más pesadas, controlada por los grados de libertad. Se usa cuando estimas la SD a partir de la muestra (es lo que hace un t-test). Con df → ∞, converge a la normal.
# Comparar normal vs t con 5 df
x <- seq(-4, 4, length.out = 200)
plot(x, dnorm(x), type = "l", col = "black", ylab = "densidad",
main = "Normal vs t(5)")
lines(x, dt(x, df = 5), col = "red")
legend("topright", c("Normal", "t(5)"), col = c("black", "red"), lty = 1)Chi-cuadrado, suma de cuadrados de normales estándar. Aparece en tests de bondad de ajuste y tablas de contingencia.
F de Fisher, cociente de dos chi-cuadrado. Es la distribución de referencia en ANOVA.
No necesitas saber sus fórmulas exactas. Necesitas saber cuándo cada test las usa, para no confundir el output.
Transformaciones cuando los datos no son normales
Si tu variable tiene asimetría positiva (cola larga a la derecha, típico de precios, ingresos, tiempos, tamaños), una transformación puede acercarla a normal:
library(ggplot2)
# Original: muy sesgada
ggplot(diamonds, aes(price)) +
geom_histogram(bins = 50)
# Log10: aproximadamente normal
ggplot(diamonds, aes(log10(price))) +
geom_histogram(bins = 50)Tres transformaciones habituales:
log(x): para variables ≥ 0 con cola a la derecha. Si hay ceros, usalog1p(x)(que eslog(1 + x)).sqrt(x): alternativa más suave a log. Útil con conteos (Poisson-like).- Box-Cox: familia paramétrica que generaliza log y sqrt. Útil cuando no sabes qué transformación elegir.
# Box-Cox automático (paquete MASS)
library(MASS)
modelo <- lm(price ~ carat, data = diamonds)
boxcox(modelo) # gráfico que sugiere el lambda óptimoImportante: si transformas la Y para análisis, tus coeficientes están en escala transformada. Comunicar resultados requiere de-transformar, y la interpretación se vuelve “multiplicativa”, no “aditiva”.
Trampas habituales
- Reportar Shapiro-Wilk como justificación. No lo hagas. Usa QQ-plot y razona sobre tamaño muestral.
- Asumir que el CLT salva siempre. El CLT garantiza normalidad de las medias, no de los datos. Si tu test depende de la media (t-test, ANOVA), el CLT ayuda con
n ≥ 30. Si depende de los datos brutos (test no-paramétrico de la mediana con pocos datos), el CLT no aplica. - Transformar y olvidar de-transformar. Si entrenas un modelo con
log(precio)y haces predicciones, son log-predicciones. Aplicarexp()te devuelve a la escala original, peroexp(mean(log_predicciones))es la mediana geométrica, no la media aritmética. Importa. - Insistir en normalidad cuando hay alternativas robustas. Wilcoxon y Kruskal-Wallis funcionan bien con datos no normales. Modelos robustos (
MASS::rlm) y bootstrap también. No hay obligación de “normalizar” todo.
En la siguiente entrega
Has entendido qué asumen los tests. La siguiente pieza es el test más usado de toda la estadística: el t-test para comparar dos grupos. Vemos cuándo Welch vs Student, cuándo Wilcoxon, y cómo reportar más allá del p-value. Lo siguiente.