14  Contrastes para más de dos poblaciones independientes

El capítulo anterior trató el caso de dos poblaciones independientes. Sin embargo, en muchas ocasiones no se comparan dos grupos, sino tres o más, formados por individuos distintos entre sí. Este capítulo generaliza los contrastes anteriores a esa situación: cómo comparar una variable, cuantitativa o cualitativa, entre más de dos poblaciones independientes. En el conjunto de datos de ejemplo, la variable independiente natural para esta situación es grupo, que clasifica a los 120 alumnos en tres grupos de clase (A, B y C), formados por alumnos distintos: nadie pertenece a la vez a dos grupos, por lo que las tres poblaciones son independientes entre sí.

14.1 Estadísticos descriptivos por grupo

Antes de aplicar ningún contraste, conviene describir la variable cuantitativa de interés en cada uno de los grupos. Se utiliza aquí la variable notaC, que es la que muestra diferencias más claras entre los tres grupos de clase.

Código
library(moments)

df |>
  group_by(grupo) |>
  summarise(
    n = sum(!is.na(notaC)),
    media = mean(notaC, na.rm = TRUE),
    de = sd(notaC, na.rm = TRUE),
    minimo = min(notaC, na.rm = TRUE),
    q1 = quantile(notaC, 0.25, na.rm = TRUE),
    mediana = median(notaC, na.rm = TRUE),
    q3 = quantile(notaC, 0.75, na.rm = TRUE),
    maximo = max(notaC, na.rm = TRUE),
    asimetria = skewness(notaC, na.rm = TRUE),
    apuntamiento = kurtosis(notaC, na.rm = TRUE)
  )
# A tibble: 3 × 11
  grupo     n media    de minimo    q1 mediana    q3 maximo asimetria
  <chr> <int> <dbl> <dbl>  <dbl> <dbl>   <dbl> <dbl>  <dbl>     <dbl>
1 A        38  5.52  1.51    2     4.6    5.55   6.5    9.5    0.0121
2 B        34  5.95  1.35    2.8   5.3    6      6.9    8.8   -0.473 
3 C        47  4.07  1.38    1.3   3.3    4      5.1    6.7   -0.0272
# ℹ 1 more variable: apuntamiento <dbl>

El grupo C presenta la media más baja (4.07) y los grupos A y B medias parecidas y más altas (5.52 y 5.95, respectivamente), lo que ya sugiere que podría existir una diferencia real entre C y los otros dos grupos. Las tres distribuciones tienen una asimetría cercana a 0 y un apuntamiento próximo a 3, lo que es compatible con una distribución aproximadamente normal en los tres grupos.

Gráficos. Un diagrama de cajas y bigotes y un diagrama de violín permiten visualizar de un vistazo estas diferencias:

Código
ggplot(df, aes(x = grupo, y = notaC, fill = grupo)) +
  geom_boxplot() +
  labs(x = "Grupo", y = "Nota C") +
  theme_minimal() +
  theme(legend.position = "none")

Diagrama de cajas y bigotes de la nota C por grupo.
Código
ggplot(df, aes(x = grupo, y = notaC, fill = grupo)) +
  geom_violin() +
  labs(x = "Grupo", y = "Nota C") +
  theme_minimal() +
  theme(legend.position = "none")

Diagrama de violín de la nota C por grupo.

En ambos gráficos se aprecia que el grupo C tiene una posición más baja que A y B, y que las cajas de A y B se solapan bastante, mientras que la de C apenas se solapa con ellas.

Normalidad por grupo. Antes de decidir qué contraste aplicar (paramétrico o no paramétrico), es necesario comprobar si notaC sigue una distribución normal en cada uno de los tres grupos, mediante el test de Shapiro-Wilk:

Código
df |>
  filter(!is.na(notaC)) |>
  group_by(grupo) |>
  summarise(
    estadistico = shapiro.test(notaC)$statistic,
    p.valor = shapiro.test(notaC)$p.value
  )
# A tibble: 3 × 3
  grupo estadistico p.valor
  <chr>       <dbl>   <dbl>
1 A           0.989   0.961
2 B           0.965   0.343
3 C           0.976   0.442

En los tres grupos el p-valor es muy superior a 0.05 (0.9614 en A, 0.3432 en B y 0.4420 en C), por lo que no hay evidencia para rechazar la normalidad de notaC en ninguno de ellos. Se cumple, por tanto, el requisito de normalidad necesario para aplicar los contrastes paramétricos que siguen.

14.1.1 Test de Levene de comparación de varianzas

Definición 14.1 (Test de Levene de comparación de varianzas) El test de Levene tiene como objetivo contrastar si las varianzas de una variable cuantitativa son iguales en más de dos poblaciones independientes. Es la generalización a más de dos grupos del test F de Fisher visto en el capítulo anterior. Las hipótesis del contraste son

\[H_0: \sigma_1^2=\sigma_2^2=\cdots=\sigma_k^2 \quad \text{frente a} \quad H_1: \text{algún } \sigma_i^2 \text{ es distinto de los demás},\]

donde \(k\) es el número de poblaciones comparadas.

NotaInterpretación
  • Si el p-valor del contraste es mayor que el nivel de significación (habitualmente 0.05), no se rechaza \(H_0\) y se concluye que las varianzas de los \(k\) grupos pueden considerarse homogéneas.
  • Si el p-valor es menor que el nivel de significación, se rechaza \(H_0\) y se concluye que al menos uno de los grupos tiene una varianza distinta de las demás.
  • Comprobar la homogeneidad de varianzas es un paso previo necesario para poder aplicar después el ANOVA de un factor, ya que este último asume que las varianzas de los grupos son iguales.

Requisitos:

  • La variable comparada debe ser cuantitativa.
  • Las poblaciones comparadas deben ser independientes entre sí (individuos distintos en cada grupo).
  • La variable debe seguir una distribución normal en todos los grupos, o bien el tamaño de cada grupo debe ser igual o superior a 30 (en cuyo caso el teorema central del límite garantiza una aproximación razonable).

Comprobada la normalidad de notaC en los tres grupos, se puede aplicar el test de Levene con la función leveneTest() del paquete car para contrastar si las tres poblaciones tienen la misma varianza.

Ejemplo 14.1  

Código
library(car)

df <- df |> mutate(grupo = factor(grupo))
leveneTest(notaC ~ grupo, data = df)
Levene's Test for Homogeneity of Variance (center = median)
       Df F value Pr(>F)
group   2  0.3186 0.7278
      116               

El p-valor del contraste es 0.7278, muy superior a 0.05, por lo que no se rechaza \(H_0\): no hay evidencia de que las varianzas de notaC difieran entre los tres grupos de clase. Se cumple, por tanto, el requisito de homogeneidad de varianzas necesario para aplicar el ANOVA de un factor.

14.1.2 ANOVA de un factor

Definición 14.2 (ANOVA de un factor) El análisis de varianza (ANOVA) de un factor tiene como objetivo contrastar si existen diferencias entre las medias de una variable cuantitativa en más de dos poblaciones independientes. Las hipótesis del contraste son

\[H_0: \mu_1=\mu_2=\cdots=\mu_k \quad \text{frente a} \quad H_1: \text{alguna } \mu_i \text{ es distinta de las demás},\]

donde \(k\) es el número de poblaciones comparadas.

NotaInterpretación
  • Si el p-valor del contraste es mayor que 0.05, no se rechaza \(H_0\) y se concluye que no hay evidencia de diferencias entre las medias de los \(k\) grupos.
  • Si el p-valor es menor que 0.05, se rechaza \(H_0\) y se concluye que al menos una de las medias difiere de las demás, aunque el ANOVA por sí solo no indica cuál o cuáles.
  • El ANOVA de un factor es la generalización a más de dos grupos del test t de comparación de medias visto en el capítulo anterior: de hecho, cuando \(k=2\), ambos contrastes son equivalentes.

Requisitos:

  • La variable dependiente debe ser cuantitativa.
  • Las poblaciones comparadas deben ser independientes entre sí.
  • La variable debe seguir una distribución normal en cada uno de los grupos, o los grupos deben tener un tamaño igual o superior a 30.
  • Las varianzas de los grupos deben ser homogéneas, requisito que se comprueba previamente con el test de Levene.

Como se cumplen los requisitos de normalidad y homogeneidad de varianzas, se puede aplicar el ANOVA de un factor con la función aov() para contrastar si existen diferencias entre las medias de notaC en los tres grupos.

Ejemplo 14.2  

Código
modelo_anova <- aov(notaC ~ grupo, data = df)
summary(modelo_anova)
             Df Sum Sq Mean Sq F value   Pr(>F)    
grupo         2  80.69   40.34   20.05 3.32e-08 ***
Residuals   116 233.41    2.01                     
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
1 observation deleted due to missingness

El p-valor del contraste (Pr(>F)) es 3.32e-08, muy inferior a 0.05, por lo que se rechaza \(H_0\): existen diferencias significativas entre las medias de notaC en al menos dos de los tres grupos de clase.

Cuando, como en este caso, el ANOVA resulta significativo, este solo informa de que existe alguna diferencia entre los grupos, pero no indica entre cuáles. Es necesario entonces aplicar un test de comparación múltiple por pares que compare las medias de los grupos dos a dos, controlando el error global de realizar varias comparaciones simultáneas. El más habitual es el test de Tukey (TukeyHSD()), aunque también se utiliza, de forma algo más conservadora, la corrección de Bonferroni, que simplemente divide el nivel de significación entre el número de comparaciones realizadas.

Código
TukeyHSD(modelo_anova)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = notaC ~ grupo, data = df)

$grupo
          diff        lwr        upr     p adj
B-A  0.4312693 -0.3637573  1.2262960 0.4048482
C-A -1.4455767 -2.1802858 -0.7108676 0.0000241
C-B -1.8768461 -2.6350758 -1.1186163 0.0000001

Los resultados muestran que la diferencia entre B y A no es significativa (p-valor 0.4048), mientras que las diferencias entre C y A (p-valor 0.0000241) y entre C y B (p-valor 0.0000001) sí lo son. Es decir, el grupo C tiene una nota media en notaC significativamente inferior a la de los otros dos grupos, mientras que A y B no difieren significativamente entre sí.

Un diagrama de medias con sus intervalos de confianza al 95% permite visualizar estas mismas conclusiones:

Código
mean_ci <- function(x) {
  x <- x[!is.na(x)]
  m <- mean(x)
  se <- sd(x) / sqrt(length(x))
  ic <- se * qt(0.975, length(x) - 1)
  data.frame(y = m, ymin = m - ic, ymax = m + ic)
}

ggplot(df, aes(x = grupo, y = notaC, color = grupo)) +
  stat_summary(fun.data = mean_ci, geom = "errorbar", width = 0.2) +
  stat_summary(fun = mean, geom = "point", size = 3) +
  labs(x = "Grupo", y = "Nota C media") +
  theme_minimal() +
  theme(legend.position = "none")

Medias de la nota C por grupo con intervalos de confianza al 95%.

En el gráfico se aprecia que los intervalos de confianza de A y B se solapan ampliamente, mientras que el de C queda claramente por debajo y no se solapa con los de los otros dos grupos, en consonancia con el resultado del test de Tukey.

14.1.3 Test de Kruskal-Wallis (no paramétrico)

Definición 14.3 (Test de Kruskal-Wallis) El test de Kruskal-Wallis es la alternativa no paramétrica al ANOVA de un factor. Tiene como objetivo contrastar si las distribuciones de una variable cuantitativa u ordinal son iguales en más de dos poblaciones independientes, sin necesidad de asumir normalidad. Las hipótesis del contraste son

\[H_0: \text{las distribuciones (medianas) son iguales en las } k \text{ poblaciones} \quad \text{frente a} \quad H_1: \text{alguna difiere de las demás}.\]

NotaInterpretación
  • Si el p-valor del contraste es mayor que 0.05, no se rechaza \(H_0\) y se concluye que no hay evidencia de diferencias entre las distribuciones de los \(k\) grupos.
  • Si el p-valor es menor que 0.05, se rechaza \(H_0\) y se concluye que al menos una de las distribuciones difiere de las demás.
  • El test de Kruskal-Wallis es la generalización a más de dos grupos del test U de Mann-Whitney visto en el capítulo anterior, del mismo modo que el ANOVA generaliza al test t.

Requisitos:

  • La variable comparada debe ser, al menos, ordinal (cuantitativa o cualitativa ordinal).
  • Las poblaciones comparadas deben ser independientes entre sí.
  • A diferencia del ANOVA, no exige que la variable siga una distribución normal en los grupos, lo que lo convierte en la alternativa natural cuando no se cumple ese requisito o cuando la variable es solo ordinal.

Cuando no se cumple el requisito de normalidad del ANOVA (o directamente se quiere evitar esa suposición), se recurre al test de Kruskal-Wallis. A modo de ejemplo, se aplica ahora a la variable notaA, que no se ha comprobado que sea normal en los tres grupos:

Ejemplo 14.3  

Código
kruskal.test(notaA ~ grupo, data = df)

    Kruskal-Wallis rank sum test

data:  notaA by grupo
Kruskal-Wallis chi-squared = 62.218, df = 2, p-value = 3.087e-14

El p-valor del contraste es 3.087e-14, muy inferior a 0.05, por lo que se rechaza \(H_0\): existen diferencias significativas entre las distribuciones de notaA en al menos dos de los tres grupos.

Igual que ocurre con el ANOVA, un resultado significativo en el test de Kruskal-Wallis no indica entre qué grupos concretos hay diferencias. El test de comparación múltiple por pares equivalente es el test de Wilcoxon por pares, aplicando una corrección (aquí, el método de Benjamini-Hochberg, "BH") para controlar el error acumulado al hacer varias comparaciones:

Código
pairwise.wilcox.test(df$notaA, df$grupo, p.adjust.method = "BH")

    Pairwise comparisons using Wilcoxon rank sum test with continuity correction 

data:  df$notaA and df$grupo 

  A       B      
B 0.19    -      
C 4.2e-10 1.3e-11

P value adjustment method: BH 

La diferencia entre A y B no es significativa (p-valor 0.19), mientras que las diferencias entre A y C (p-valor 4.2e-10) y entre B y C (p-valor 1.3e-11) sí lo son. La conclusión es, por tanto, coherente con la obtenida antes para notaC: el grupo C se diferencia claramente de los otros dos, que no difieren significativamente entre sí.

14.2 Variable dependiente cualitativa

Cuando la variable dependiente es cualitativa y se compara entre más de dos poblaciones independientes, el contraste apropiado sigue siendo el test Chi-cuadrado de independencia, ya presentado en el capítulo de Contrastes para dos poblaciones independientes. Allí se aplicaba a una tabla de contingencia \(2\times2\), construida cruzando una variable independiente con dos categorías y una variable dependiente también con dos categorías; aquí la única diferencia es que la tabla de contingencia tiene más de dos filas (o más de dos columnas), al tener grupo tres categorías en lugar de dos.

Así, para contrastar si existe relación entre el grupo de clase y el resultado (aprobado o suspenso) en la asignatura A, bastaría con construir la tabla de contingencia table(df$grupo, df$calificacionA), de dimensión \(3\times2\), y aplicar sobre ella chisq.test() exactamente igual que en el caso de dos grupos. El estadístico de contraste, sus grados de libertad (que ahora dependen del número de filas y columnas de la tabla) y la interpretación del p-valor obtenido no cambian en absoluto respecto al procedimiento ya descrito para dos poblaciones independientes.

14.3 Cierre

Este capítulo ha mostrado cómo comparar más de dos poblaciones independientes, tanto cuando la variable dependiente es cuantitativa (Levene, ANOVA y Tukey, o su alternativa no paramétrica, Kruskal-Wallis con comparaciones de Wilcoxon por pares) como cuando es cualitativa (Chi-cuadrado de independencia). El siguiente capítulo, Contrastes para más de dos poblaciones relacionadas, trata la situación análoga pero cuando los más de dos grupos comparados no están formados por individuos distintos, sino que son medidas repetidas tomadas sobre los mismos sujetos.