Curso
Comparar varios grupos es sencillo cuando tus datos siguen una distribución normal. El problema es que, en la vida real, la mayoría de los datos no lo hacen.
Si usas ANOVA por defecto, acabarás en conclusiones erróneas, porque asume normalidad. Cuando no se cumple —por ejemplo, con datos sesgados o muestras pequeñas— necesitas otro enfoque.
La prueba de Kruskal-Wallis es ese enfoque alternativo. Es la opción no paramétrica a ANOVA y trabaja con rangos en lugar de valores brutos, así que no exige normalidad.
En este artículo verás el concepto, las matemáticas detrás, cómo ejecutarla en Python y R, y cómo interpretar los resultados.
¿Qué es la prueba de Kruskal-Wallis?
La prueba de Kruskal-Wallis es un método no paramétrico para comparar tres o más grupos independientes. Convierte todas las observaciones en rangos y compara esos rangos entre grupos en lugar de trabajar con valores brutos.
Puedes verla como una extensión de la prueba U de Mann-Whitney, sobre la que también he escrito.
Mann-Whitney U hace la misma comparación basada en rangos, pero solo para dos grupos. Kruskal-Wallis la amplía a tres o más, así que cuando tienes múltiples grupos y no puedes usar ANOVA, esta es la que debes usar.
Como trabaja con rangos y no con valores brutos, no asume ninguna distribución concreta. Eso la hace útil con datos reales, que rara vez encajan perfectamente en un tipo de distribución.
Cuándo usar la prueba de Kruskal-Wallis
La prueba de Kruskal-Wallis encaja muy bien cuando trabajas con:
- Tres o más grupos independientes que quieres comparar
- Datos ordinales o continuos como valoraciones en escala Likert o medidas
- Distribuciones no normales debido a sesgos, valores atípicos, muestras pequeñas o cualquier cosa que ANOVA no gestione bien
- Tamaños de muestra pequeños en los que es difícil verificar la normalidad
Aquí tienes un ejemplo sencillo.
Imagina que quieres comparar notas de examen entre tres clases distintas. Las notas están sesgadas y las muestras son pequeñas, así que ANOVA no es buena opción. Kruskal-Wallis no necesita normalidad, así que aquí funciona. Te dirá si al menos una clase obtuvo resultados distintos a las demás sin asumir cosas que tus datos no pueden sostener.
Kruskal-Wallis vs. ANOVA
Ambas pruebas comparan grupos, pero lo hacen de forma diferente.
ANOVA compara las medias de los grupos y asume que los datos son normales y con varianzas aproximadamente iguales. Cuando esas suposiciones se cumplen, es la mejor elección: tiene más potencia estadística y los resultados son más fáciles de interpretar.
Kruskal-Wallis compara las distribuciones de los grupos usando rangos. No le importa la normalidad ni la igualdad de varianzas. Eso la hace más flexible, pero a costa de perder algo de potencia estadística.
Aquí tienes una tabla comparativa rápida:

ANOVA frente a la prueba de Kruskal-Wallis
Si tus datos son normales, usa ANOVA. Si no lo son —o no puedes verificarlo— usa Kruskal-Wallis.
Fórmula de la prueba de Kruskal-Wallis
La prueba de Kruskal-Wallis se reduce a una única estadística de contraste, H. Esta es la fórmula:

Fórmula de Kruskal-Wallis
Aquí tienes la explicación de los componentes:
-
N- número total de observaciones en todos los grupos -
k- número de grupos -
n_i- número de observaciones en el grupoi -
R_i- suma de rangos asignados al grupoi
La fórmula mide cuánto se desvían las sumas de rangos de cada grupo de lo que esperarías si todos los grupos fueran idénticos. Un H grande implica que los grupos son distintos, y un H pequeño indica que no difieren demasiado.
Una vez tienes H, lo comparas con una distribución ji cuadrado con k - 1 grados de libertad para obtener el valor p.
Cómo funciona la prueba de Kruskal-Wallis
Hay cuatro pasos para realizar la prueba de Kruskal-Wallis:
- Combina todos los grupos: toma todas las observaciones de cada grupo y júntalas en un único conjunto de datos
- Asigna rangos a todas las observaciones: ordena los datos combinados de menor a mayor y asigna rangos. El valor más pequeño recibe el rango 1, el siguiente el 2, y así sucesivamente. Si dos valores son iguales, comparten la media de los rangos que habrían ocupado.
- Calcula las sumas de rangos: separa los rangos de nuevo por sus grupos originales. Suma los rangos de cada grupo. Estas son tus sumas de rangos —
R_ien la fórmula - Calcula la estadística de contraste: introduce las sumas de rangos en la fórmula de
H. Si los grupos son similares, sus sumas de rangos estarán próximas yHserá pequeño. Si un grupo recibe sistemáticamente rangos más altos o más bajos,Hcrecerá
¡Y eso es todo!
Como ves, a la prueba no le importan los valores en sí, sino su posición relativa respecto al resto.
Prueba de Kruskal-Wallis en Python
La librería scipy de Python incluye una función para la prueba de Kruskal-Wallis, así que no tienes que implementar la fórmula a mano. Veámoslo con un ejemplo.
Supón que comparas notas de examen entre tres clases. Así ejecutarías la prueba:
from scipy import stats
# Exam scores
class_a = [78, 85, 90, 72, 88]
class_b = [65, 70, 68, 74, 60]
class_c = [88, 92, 95, 85, 91]
# Run the test
statistic, p_value = stats.kruskal(class_a, class_b, class_c)
print(f"H statistic: {statistic:.4f}")
print(f"P-value: {p_value:.4f}")

Salida de Python
El valor p está por debajo de 0,05, lo que indica que al menos una clase difiere de las otras. Ten en cuenta que la prueba no te dice cuál: necesitas una prueba post hoc para eso, que veremos en la siguiente sección.
Prueba de Kruskal-Wallis en R
Igual que en Python, R tiene una función incorporada para esta prueba. Usemos el mismo caso de las notas.
# Exam scores
class_a <- c(78, 85, 90, 72, 88)
class_b <- c(65, 70, 68, 74, 60)
class_c <- c(88, 92, 95, 85, 91)
# Combine
scores <- c(class_a, class_b, class_c)
groups <- factor(rep(c("A", "B", "C"), each = 5))
# Run the test
kruskal.test(scores ~ groups)

Salida de R
La salida coincide con lo obtenido en Python: misma estadística H y mismo valor p. Con p < 0,05, rechazarías la hipótesis nula y concluirías que al menos un grupo difiere.
Cómo interpretar los resultados de Kruskal-Wallis
La hipótesis nula de Kruskal-Wallis es que todos los grupos tienen la misma distribución. El valor p te dice si debes rechazarla. Así se interpreta:
- p < 0,05: al menos un grupo difiere de los demás, así que rechaza la hipótesis nula
- p ≥ 0,05: no hay evidencia sólida de que los grupos difieran, así que no rechaces la hipótesis nula
El umbral de 0,05 es una convención. Según tu área o las implicaciones del análisis, puedes usar un umbral más estricto (0,01) o más laxo (0,10).
Recuerda que esta prueba no te dirá qué grupo es distinto. Un resultado significativo solo indica que no todos los grupos son iguales. Sabes que pasa algo, pero no dónde. Para ver qué pares impulsan la diferencia, necesitas una prueba post hoc.
Pruebas post hoc tras Kruskal-Wallis
La prueba te dice que al menos un grupo difiere, pero no cuál. Si tienes tres grupos y p < 0,05, puede ser A frente a B, A frente a C, B frente a C, o alguna combinación. Necesitas una prueba post hoc para obtener estas comparaciones por pares.
La prueba de Dunn es la opción más habitual. Realiza comparaciones por pares entre todos los grupos y ajusta los valores p para tener en cuenta las comparaciones múltiples; sin ese ajuste, aumentas la probabilidad de falsos positivos. Cuantas más comparaciones haces, mayor es el riesgo de encontrar un resultado "significativo" por puro azar.
Prueba de Dunn en Python
Necesitarás la librería scikit_posthocs. Si no la tienes, instálala con pip install scikit-posthocs.
A partir de ahí, el cálculo es sencillo:
import scikit_posthocs as sp
import pandas as pd
# Same exam scores as before
class_a = [78, 85, 90, 72, 88]
class_b = [65, 70, 68, 74, 60]
class_c = [88, 92, 95, 85, 91]
# Combine
scores = class_a + class_b + class_c
groups = ["A"] * 5 + ["B"] * 5 + ["C"] * 5
df = pd.DataFrame({"score": scores, "group": groups})
# Run the test
result = sp.posthoc_dunn(df, val_col="score", group_col="group", p_adjust="bonferroni")
print(result)

Prueba de Dunn en Python
Cada celda muestra el valor p ajustado para ese par. Aquí, solo B frente a C (p = 0,004) cruza el umbral de 0,05, por lo que esos dos grupos difieren. A frente a B (p = 0,167) y A frente a C (p = 0,607) no lo hacen, lo que significa que la clase A no difiere estadísticamente de ninguna de las otras dos.
Prueba de Dunn en R
Para empezar, instala la librería si hace falta con el comando install.packages("dunn.test"):
library(dunn.test)
# Same exam scores as before
class_a <- c(78, 85, 90, 72, 88)
class_b <- c(65, 70, 68, 74, 60)
class_c <- c(88, 92, 95, 85, 91)
scores <- c(class_a, class_b, class_c)
groups <- factor(rep(c("A", "B", "C"), each = 5))
# Run the test
dunn.test(scores, groups, method = "bonferroni")

Prueba de Dunn en R
Los resultados coinciden con Python, como era de esperar. Solo B frente a C es significativo, mientras que A frente a B y A frente a C no lo son. Las clases B y C son las que están detrás de la diferencia detectada por la prueba de Kruskal-Wallis.
Supuestos de la prueba de Kruskal-Wallis
Kruskal-Wallis es más flexible que ANOVA, pero sigue teniendo tres supuestos que debes comprobar antes de ejecutarla:
- Muestras independientes: las observaciones de un grupo no influyen en las de otro. Si tus datos están emparejados o son medidas repetidas, esta prueba no es la adecuada
- Datos ordinales o continuos: la prueba necesita datos que puedas ordenar. Las categorías nominales (como colores o etiquetas) no se pueden ordenar, así que no sirven aquí
- Formas de distribución similares: si quieres interpretar los resultados como una comparación de medianas y no solo de distribuciones, los grupos deben tener formas más o menos similares. Si las formas difieren mucho, aún puedes comparar distribuciones, pero la interpretación en términos de medianas no se sostiene
Si incumples los dos primeros supuestos, los resultados no serán válidos. El tercer supuesto es algo más flexible, ya que afecta a la interpretación, no a la viabilidad de la prueba.
Cuándo no deberías usar la prueba de Kruskal-Wallis
Hay tres casos en los que otra prueba encajará mejor:
- Tus datos están emparejados o son medidas repetidas: si los mismos sujetos aparecen en varios grupos, usa la prueba de Friedman. Es el equivalente no paramétrico para muestras dependientes. Usar Kruskal-Wallis con datos emparejados ignora la relación entre observaciones y puede llevarte a conclusiones erróneas
- Tus datos cumplen los supuestos de ANOVA: si tus datos son normales y con varianzas aproximadamente iguales, ANOVA es mejor. Tiene más potencia estadística, es decir, detecta mejor diferencias reales cuando existen
- Tus tamaños de muestra son grandes: con muestras grandes, los métodos paramétricos suelen funcionar bien aunque los datos no sean perfectamente normales. El teorema central del límite entra en juego y ANOVA te dará resultados más fiables que el enfoque por rangos. Si trabajas con cientos o miles de observaciones por grupo, Kruskal-Wallis no es tu prueba
Conclusión
La prueba de Kruskal-Wallis compara tres o más grupos independientes cuando tus datos no cumplen la normalidad que exigen pruebas como ANOVA. Esto es posible porque trabaja con rangos en lugar de valores brutos.
Ahora bien, no sustituye a ANOVA. Si tus datos son normales, ANOVA es mejor porque aporta más potencia estadística. Si tus datos están emparejados, usa la prueba de Friedman. Como siempre, la prueba adecuada depende de tus datos.
Cuando se cumplen las condiciones, la prueba de Kruskal-Wallis es una opción fiable y directa. Ejecútala, revisa el valor p y continúa con la prueba de Dunn si necesitas saber qué grupos están detrás de la diferencia.
¿Tienes algo olvidada la estadística? Haz nuestro curso de Introduction to Statistics y vuelve a ponerte al día en una sola tarde.
Preguntas frecuentes sobre la prueba de Kruskal-Wallis
¿Para qué se usa la prueba de Kruskal-Wallis?
La prueba de Kruskal-Wallis se usa para comparar tres o más grupos independientes cuando no puedes asumir que los datos siguen una distribución normal. Es una alternativa no paramétrica a ANOVA que trabaja con rangos en lugar de valores brutos. Es especialmente útil con distribuciones sesgadas o datos ordinales.
¿Qué significa un resultado significativo en Kruskal-Wallis?
Un resultado significativo —normalmente p < 0,05— implica que al menos un grupo difiere de los demás. No te dice qué grupos son distintos, solo que no todos son iguales. Para saber qué pares explican la diferencia, debes realizar una prueba post hoc como la de Dunn.
¿Cuáles son los supuestos de la prueba de Kruskal-Wallis?
La prueba requiere muestras independientes, es decir, que las observaciones de un grupo no influyan en las de otro. Tus datos deben ser ordinales o continuos, algo que puedas ordenar. Si quieres interpretar los resultados como una comparación de medianas, los grupos también deberían tener formas de distribución similares.
¿Cuál es la diferencia entre la prueba de Kruskal-Wallis y la U de Mann-Whitney?
La prueba U de Mann-Whitney compara dos grupos independientes, mientras que Kruskal-Wallis extiende ese enfoque a tres o más grupos. Ambas trabajan con rangos y no asumen normalidad. Si solo tienes dos grupos, la elección correcta es Mann-Whitney U; Kruskal-Wallis es su equivalente para múltiples grupos.
¿Cuándo deberías usar la prueba de Dunn después de Kruskal-Wallis?
Ejecuta la prueba de Dunn cuando el resultado de Kruskal-Wallis sea significativo y necesites saber qué pares de grupos difieren. Realiza comparaciones por pares entre todos los grupos y ajusta los valores p para reducir el riesgo de falsos positivos. En Python, scikit_posthocs.posthoc_dunn() lo hace, y en R, el paquete dunn.test ofrece la misma funcionalidad.
