El test de Kruskal-Wallis, también conocido como test H, es la alternativa no paramétrica al test ANOVA de una vía para datos no pareados. Se trata de una extensión del test de Mann-Whitney para más de dos grupos. Es por lo tanto de un test que emplea rangos para contrastar la hipótesis de que k muestras han sido obtenidas de una misma población.

A diferencia del ANOVA en el que se comparan medias, el test de Kruskal-Wallis contrasta si las diferentes muestras están equidistribuidas y que por lo tanto pertenecen a una misma distribución (población). Bajo ciertas simplificaciones puede considerarse que el test de Kruskal-Wallis compara las medianas.

H0: todas las muestras provienen de la misma población (distribución).

HA: Al menos una muestra proviene de una población con una distribución distinta.

El test de Kruskal-Wallis es el test adecuado cuando los datos tienen un orden natural, es decir, cuando para darles sentido tienen que estar ordenados o bien cuando no se satisfacen las condiciones para poder aplicar un ANOVA.

EJEMPLO

Un estudio compara el número de huevos que pone un determinado insecto bajo 3 condiciones distintas. ¿Existen diferencias significativas dependiendo de las condiciones?

datos <- data.frame(condicion = c(rep("condicion1", 18), rep("condicion2", 18), rep("condicion3", 18)), n_huevos = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 16, 27, 28, 29, 30, 51, 52, 53, 342, 40, 41, 42, 43, 44, 45, 46, 47, 48, 67, 88, 89, 90, 91,92, 93, 94, 293, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 25, 36, 37, 58, 59, 60, 71, 72))
head(datos)
##    condicion n_huevos
## 1 condicion1        1
## 2 condicion1        2
## 3 condicion1        3
## 4 condicion1        4
## 5 condicion1        5
## 6 condicion1        6
aggregate(n_huevos ~condicion, data = datos, FUN = mean)
##    condicion n_huevos
## 1 condicion1 37.38889
## 2 condicion2 77.38889
## 3 condicion3 36.27778

Se comprueba que la media de huevos bajo la condición 1 es de 37,38 ; para la condición 2 es de 77,38 y para la condición 3 es de 36,27; Se observan promedios diferentes en cada clase. Aunque la media de la condición 1 y la 2 parecen similares.

aggregate(n_huevos ~condicion, data = datos, FUN = median)
##    condicion n_huevos
## 1 condicion1     12.5
## 2 condicion2     57.5
## 3 condicion3     26.5

Al analizar las medianas, sí se observarían diferencias en los promedios entre las condiciones analizadas. Los resultados no son parecidos a los promedios, indiciando la presencia de datos extremos en las distribuciones.

aggregate(n_huevos ~condicion, data = datos, FUN = var)
##    condicion  n_huevos
## 1 condicion1 6100.6046
## 2 condicion2 3412.6046
## 3 condicion3  345.6242

Tenemos varianzas muy diferentes entre las categorías; se debería ver un problema de heterocedasticidad entre los grupos.

La heterocedasticidad es un problema en modelos de regresión donde la varianza de los errores (residuos) no es constante a lo largo de las observaciones. Esto viola uno de los supuestos clave de los modelos lineales clásicos (homocedasticidad, que implica varianza constante de los errores).

aggregate(n_huevos ~condicion, data = datos, FUN = sd)
##    condicion n_huevos
## 1 condicion1 78.10637
## 2 condicion2 58.41750
## 3 condicion3 18.59097

Tenemos desviaciones típicas muy diferentes; entre las categorías se debería verificar un problema de heterocedasticidad entre los grupos.

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
ggplot(data=datos, mapping = aes(x=condicion, y=n_huevos, color=condicion))+
  geom_boxplot()+
  theme_bw()+
  theme(legend.position="right")

En el diagrama de caja, lo primero que observamos son datos anómalos muy importantes (mucha separación) con la condición 1 y la condición 2.

En segundo lugar, las dispersiones mostradas en los boxplots son diferentes.

Se aprecia que la media puede ser similar entre la condición 1 y la 3. Pero que la condición 1 muestra diferencias con la 2, pero la 2 comparte valores con la 3, en este caso podría tener medias similares.

ggplot(data=datos, mapping=aes(x=n_huevos, color = condicion))+
  geom_histogram()+
  facet_grid(.~condicion)+
  theme(legend.position="right")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

El primer histograma no acepta la normalidad, pues presenta datos atípicos mayores a 300. Tiene forma más de una chi-cuadrado.

El segundo histograma no acepta la normalidad, pues presenta datos atípicos mayores a 280. Tiene forma más de una chi-cuadrado.

El tercer histograma presenta una marcada asimetría positiva y además un gran apuntamiento. Por ello, no aceptaría la normalidad.

Dado que las distribuciones son similares (gran asimetría positiva y apuntamiento), podemos aplicar el test de Kruskal Wallis para la comparación de las medias (no el ANOVA, pues éste se aplica con normalidad y homocedasticidad).

kruskal.test(n_huevos ~condicion, data = datos)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  n_huevos by condicion
## Kruskal-Wallis chi-squared = 19.964, df = 2, p-value = 4.623e-05

El test proporciona un p valor de 0.000 < 0.05.

Tenemos evidencia empírica suficiente para rechazar la hipótesis nula de igualdad de promedios entre los grupos.

#.Comparaciones post-hoc para saber que dos grupos difieren.

Existen diferencias métodos de corrección del nivel de significancia, entre ellos destacan el de Bonferroni, que es muy estricto y el de holm, este último parece ser más recomendado.

pairwise.wilcox.test(
  x = datos$n_huevos,
  g = datos$condition,
  p.adjust.method = "holm"  
)
## 
##  Pairwise comparisons using 
## 
## data:  datos$n_huevos and datos$condition 
## 
## <0 x 0 matrix>
## 
## P value adjustment method: holm

Condición 2 vs condición 1: El p valor es 0.00029 < 0.05. Las medias son diferentes.

Condición 3 vs condición 1: El p valor es 0.047 < 0.05. Las medias son diferentes.

Condición 3 vs condición 2: EL p valor es 0.00058 < 0.05. Las medias son diferentes.

Al nivel de significación del 5%, todas las medias son diferentes.

#CONCLUSION

El promedio de huevos de los insectos es similar, empleando la condición 3 y la 1. En cambio, para el resto de comparaciones, las medias de los huevos serían diferentes al nivel de significación del 5%.