Hasta este momento hemos visto varios ejemplos del modelo ANOVA como herramienta para comparar medias entre tratamientos. Para que los resultados de los análisis hechos con ANOVA sean confiables es necesario que los datos cumplan con ciertos supuestos y que el cumplimiento de estos supuestos quede reflejado en los residuales del análisis. Cuando los datos no cumplen con los supuestos necesarios para confiar en los resultados de ANOVA debemos emplear otras herramientas, una de ellas, y la más sencilla de todas, es la prueba de Kruskal-Wallis.
Al igual que ANOVA, Kruskal-Wallis sirve para probal la hipótesis nula \(H_0\) de no-diferencias entre dos ó más grupos de datos, sin asumir ningún tipo de distribución, a diferencia de ANOVA. Esta es la principal y única ventaja de la prueba de Kruskal-Wallis en comparación con ANOVA.
La principal limitación de Kruskal-Wallis es que no es un método paramétrico, como sí lo es ANOVA. Los métodos paramétricos se basan en supuestos relativamente rígidos que hacen sobre la distribución estadística de los datos, pero en general es más fácil aplicarlos a diseños experimentales complejos pues permiten, como su nombre lo indica, estimar parámetros como la media-\(\mu\) y varianza-\(\sigma^2\). Los métodos no paramétricos no están basados en modelos matemáticos a priori (la distribución normal, p. ej.), en cambio hacen una serie de cálculos matemáticos basados en la frecuencia de las observaciones. Es por esta razón que también se les llama análisis guiados por los datos. De aquí que la prueba de Kruskal-Wallis no puede ser usada para analizar datos experimentales con efectos aleatorios.
Al igual que ANOVA, la prueba del estadístico t-student que se usa para comparar medias de pares de tratamientos, existen alternativas no paramétricas para pares de muestras. La primera alternativa no paramétrica es la prueba de Wilcoxon que hace la comparación de pares de medias de variables con distribuciones diferentes a la normal. Una prueba similar a la de Wilcoxon es la prueba de Kolmogorov-Smirnov, aunque la hipótesis que se prueba es que el par de grupos de datos provienen de distribuciones estadísticas diferentes.
Los cálculos para hacer la prueba de Kruskal-Wallis son muy sencillos y se utilizan para estimar el valor del estadístico \(H\). Para comenzar a hacer una prueba de Kruskal-Wallis, debemos de ordenar la base de datos del mayor al menor y conocer las siguientes características del diseño experimental:
Una vez que conocemos estas cantidades y tenemos los datos ordenados de menor a mayor y les asignamos un rango (\(1, 2, 3, \dots, n\)), hay que identifica a qué tratamiento pertenencen. Con esto se calcula el valor de \(H\):
\[ H = \frac{12}{n(n+1)} \sum \frac{R_i^2}{n_i} - 3(n + 1) \] Nota que tanto \(n\) como \(n_i\) aparecen en la fórmula. \(R_i\) corresponde a la suma de rangos de cada tratamiento \(i\).
Para establecer la significancia de los tratamientos, al igual que en ANOVA necesitamos los grados de libertad de los tratamientos (\(\max(i) - 1\)), pues la suma de rangos se efectúa por los tratamientos. El estadístico \(H\) tiene una distribución muy similar al de \(\chi^2\), por lo que tradicionalmente se calcula el valor crítico del estadístico \(\chi^2\) para establecer la significancia asumiendo un valor de \(\alpha\) (0.05 p.ej.).
Para hacer esta prueba en R nos se requiere de ningún paquete especial, y se usa la función kruskal.test
. El primer argumento que se da a la función es la fórmula del modelo del mismo como que con aov
y lm
: y ~ x
. El segundo de la función es el nombre de la base de datos que contiene a \(y\) y \(x\). Igual que antes simularemos una base de datos sencilla, para analizar con ANOVA y Kruskal-Wallis y comparar los resultados.
Aquí los detalles de la generación de los datos:
set.seed(123)
y1 <- exp(rnorm(100, 0, 1))
y2 <- exp(rnorm(100, 0.1, 1))
y3 <- exp(rnorm(100, 0.2, 1.5))
trats <- rep(c("A", "B", "C"), each = 100)
base.datos <- data.frame(Valor = c(y1, y2, y3),
Tratamiento = trats)
Primero verifiquemos la distribución estadística de los datos:
boxplot(Valor ~ Tratamiento, base.datos)
points(c(1, 2, 3),
c(mean(y1), mean(y2), mean(y3)),
col = "red", pch = 20, cex = 1.5)
Y se puede apreciar claramente que los datos son asimétricos alrededor de la mediana. Ahora vamos a comparar los resultados de ANOVA con Kruskal-Wallis
modelo.1 <- aov(Valor ~ Tratamiento, data = base.datos)
modelo.2 <- kruskal.test(Valor ~ Tratamiento, data = base.datos)
Los resultados de ANOVA:
summary(modelo.1)
## Df Sum Sq Mean Sq F value Pr(>F)
## Tratamiento 2 368 184.09 9.076 0.000149 ***
## Residuals 297 6024 20.28
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
sugieren que hay diferencias significativas entre tratamientos (\(P < 0.05\)), mientras que los resultados de de Kruskal-Wallis:
modelo.2
##
## Kruskal-Wallis rank sum test
##
## data: Valor by Tratamiento
## Kruskal-Wallis chi-squared = 3.5625, df = 2, p-value = 0.1684
indican lo contrario (\(P > 0.05\)).
Para decidir a qué método le hacemos caso, hay que hacer el diagnóstico posterior, de entrada sabemos que Valor
no cumple con el supuesto de homogeneidad de varianza. Veamos las gráficas de los residuales:
par(mfrow = c(2,2))
plot(modelo.1)
Y efectivamente, la línea roja de la primera gráfica no es horizontal, y los puntos de la segunda gráfica tampoco siguen de cerca la línea punteada, con lo que concluimos que ANOVA es inadecuado para rechazar la hipótesis nula de no diferencia entre tratamientos.
Para cerrar, debido a que Kruskal-Wallis no hace ningún supuesto de distribución de datos, no es necesario hacer gráficas diagnósticas. Lo que sí es necesario para analizar datos con esta prueba es descartar la posible existencia de pseudo-replicación y/o efectos aleatorios.
Dirígete al classroom para completar la actividad correspondiente a esta sección.