ANOVA en R: Pruebas unidireccionales y bidireccionales con ejemplos

โšก Resumen inteligente

El anรกlisis de varianza (ANOVA) en R compara las medias de tres o mรกs grupos dividiendo la variaciรณn total en componentes intergrupales e intragrupales. Este tutorial ejecuta pruebas unidireccionales y bidireccionales en el conjunto de datos de venenos, verifica los supuestos y aรญsla los pares que difieren con la prueba HSD de Tukey.

  • ๐Ÿ“ Estadรญstica bรกsica: La razรณn F divide la variabilidad entre grupos por la variabilidad dentro de los grupos, por lo que valores mayores contradicen la idea de que las medias son iguales.
  • ๐Ÿงช Sintaxis unidireccional: aov(time~poison, data = df) seguido de summary() devuelve los grados de libertad, el valor F y el valor p.
  • โœ… Comprobaciones de supuestos: Antes de confiar en el valor p, compruebe la independencia y la normalidad de los residuos con shapiro.test() y la igualdad de varianzas con leveneTest().
  • ๐Ÿ”Ž Anรกlisis post hoc: TukeyHSD() compara cada par de grupos manteniendo la tasa de error familiar en el nivel indicado.
  • ๐Ÿงฎ Extensiรณn bidireccional: aov(time~poison + treat, data = df) agrega un segundo factor, y poison:treat agrega el tรฉrmino de interacciรณn.
  • ๐Ÿ“Š Resultados de la lectura: Un valor p inferior a 0.05 rechaza la hipรณtesis nula de igualdad de medias, pero nunca identifica quรฉ grupo difiere.

ANOVA en R Unidireccional Bidireccional

ยฟQuรฉ es ANOVA?

Anรกlisis de variaciรณn (ANOVA) es una tรฉcnica estadรญstica que se utiliza para comparar las medias de dos o mรกs grupos. La prueba funciona dividiendo la variaciรณn total de una mediciรณn en la parte explicada por la pertenencia al grupo y la parte restante como ruido aleatorio. Por lo tanto, ANOVA en R indica si al menos una media de grupo difiere de las demรกs, no cuรกl. Es una extensiรณn directa de la prueba t a situaciones en las que la variable factorial tiene mรกs de dos niveles.

Antes de realizar una prueba, conviene saber quรฉ miembro de la familia ANOVA se ajusta mejor a su diseรฑo.

Tipos de pruebas ANOVA en R

El anรกlisis de varianza (ANOVA) es un conjunto de pruebas, no un procedimiento รบnico. La elecciรณn de la prueba adecuada depende de la cantidad de factores que se tengan y de cรณmo se hayan recopilado los datos.

Prueba Cuando usarlo Llamada R
ANOVA unidireccional Un factor con tres o mรกs niveles aov(y ~ x, datos = df)
ANOVA bidireccional Dos factores independientes aov(y ~ x1 + x2, datos = df)
Bidireccional con interacciรณn El efecto de un factor depende del otro. aov(y ~ x1 * x2, datos = df)
ANOVA de medidas repetidas Los mismos sujetos fueron medidos mรกs de una vez. aov(y ~ x + Error(sujeto/x))
รNCOVA Se debe controlar una covariable continua aov(y ~ x + covariable, datos = df)
MANOVA Dos o mรกs variables de respuesta a la vez manova(cbind(y1, y2) ~ x)

Este tutorial cubre las tres primeras. Las variantes restantes utilizan la misma interfaz aov(), asรญ que una vez que sepas leer una tabla de salida, podrรกs leerlas todas.

ANOVA frente a prueba t en R: diferencias clave

Ambas pruebas comparan medias, por lo que conviene ser precisos sobre dรณnde una reemplaza a la otra.

Criterios Prueba T ANOVA
Nรบmero de grupos Exactamente dos Dos o mรกs
Estadรญstica de prueba t F, igual a t al cuadrado cuando hay dos grupos
Resultado Indica la direcciรณn de la diferencia Solo se informa que existe una diferencia.
Se necesita seguimiento Ninguna Pruebas post hoc como la prueba HSD de Tukey
Funciรณn R prueba t() aov()

La tentaciรณn con tres grupos es realizar tres pruebas t separadas. Resรญstase. Cada prueba tiene su propia tasa de error del 5 por ciento, por lo que tres comparaciones aumentan la probabilidad de un falso positivo a aproximadamente el 14 por ciento. ANOVA responde a la misma pregunta con una sola prueba, y Tukey HSD luego maneja el detalle de pares con la tasa de error controlada. Para el caso de dos grupos, vea la Tutorial de la prueba t.

ANOVA unidireccional

Hay muchas situaciones en las que es necesario comparar la media entre varios grupos. Por ejemplo, el departamento de marketing quiere saber si tres equipos tienen el mismo rendimiento de ventas.

  • Equipo: factor de 3 niveles: A, B y C
  • Venta: una medida de desempeรฑo

La prueba ANOVA puede determinar si los tres grupos tienen rendimientos similares.

Para aclarar si los datos provienen de la misma poblaciรณn, se puede realizar una Anรกlisis de varianza de una sola vรญa (ANOVA unidireccional en adelante). Al igual que cualquier otra prueba estadรญstica, proporciona evidencia sobre si se puede rechazar la hipรณtesis nula (H0). Cabe seรฑalar que no rechazar H0 no equivale a demostrar su veracidad.

Hipรณtesis en la prueba ANOVA de una vรญa

  • H0: Las medias entre grupos son idรฉnticas
  • H1: Al menos, la media de un grupo es diferente

En otras palabras, no rechazar H0 significa que no hay suficiente evidencia para concluir que la media de algรบn grupo difiere de las demรกs.

Esta prueba es similar a la prueba t, pero el anรกlisis de varianza (ANOVA) es la opciรณn correcta cuando hay mรกs de dos grupos. Con exactamente dos grupos, ambas pruebas son equivalentes y el estadรญstico F es igual al cuadrado del estadรญstico t.

Supuestos

El anรกlisis de varianza unidireccional (ANOVA) se basa en tres condiciones: las observaciones se seleccionan aleatoriamente y son independientes entre sรญ, los residuos dentro de cada grupo siguen una distribuciรณn aproximadamente normal y la varianza es la misma en todos los grupos (homogeneidad de la varianza). La secciรณn sobre la verificaciรณn de supuestos que se presenta a continuaciรณn muestra cรณmo comprobar cada uno de ellos en R.

Interpretar la prueba ANOVA

El estadรญstico F se utiliza para probar si los datos provienen de poblaciones significativamente diferentes, es decir, medias muestrales diferentes.

Para calcular el estadรญstico F, es necesario dividir el variabilidad entre grupos sobre la variabilidad dentro del grupo.

El entre grupos La variabilidad refleja la distancia entre la media de cada grupo y la media general. Compare los dos grรกficos a continuaciรณn para comprender mejor este concepto.

El grรกfico de la izquierda muestra muy poca variaciรณn entre los tres grupos, por lo que las medias de los tres grupos se sitรบan cerca de la total media.

El grรกfico de la derecha muestra tres distribuciones muy separadas sin superposiciรณn, por lo que la diferencia entre la media general y la media de cada grupo es grande.

Interpretar la prueba ANOVA

El dentro del grupo La variabilidad mide quรฉ tan lejos se encuentran las observaciones individuales de la media de su propio grupo. Algunos puntos se sitรบan lejos del promedio de su grupo, y el tรฉrmino intragrupal captura precisamente esa dispersiรณn, que es el error de muestreo.

Para comprender visualmente el concepto de variabilidad dentro del grupo, observe el siguiente grรกfico.

La parte izquierda muestra la distribuciรณn de tres grupos diferentes. Al aumentar la dispersiรณn de cada muestra, queda claro que la varianza individual es grande. El estadรญstico F disminuye, por lo que no se rechazarรญa la hipรณtesis nula.

La parte derecha muestra muestras con las mismas medias pero con una dispersiรณn mucho menor. Esto eleva el estadรญstico F y apunta a favor de la hipรณtesis alternativa.

Interpretar la prueba ANOVA

Puede utilizar ambas medidas para construir el estadรญstico F. Es muy intuitivo comprender el estadรญstico F. Si el numerador aumenta, significa que la variabilidad entre grupos es alta y es probable que los grupos de la muestra provengan de distribuciones completamente diferentes.

En otras palabras, un valor bajo del estadรญstico F indica que existe poca o ninguna diferencia significativa entre las medias de los grupos.

Ejemplo de prueba ANOVA unidireccional

Utilizarรก el conjunto de datos de veneno para implementar la prueba ANOVA unidireccional. El conjunto de datos contiene 48 filas y 3 variables:

  • Tiempo: Tiempo de supervivencia del animal.
  • veneno: Tipo de veneno utilizado: nivel de factor: 1,2 y 3
  • tratar: Tipo de tratamiento utilizado: nivel de factor: 1,2 y 3

Antes de comenzar a calcular la prueba ANOVA, debe preparar los datos de la siguiente manera:

  • Paso 1: importar los datos
  • Paso 2: eliminar la variable innecesaria
  • Paso 3: convertir la variable veneno como nivel ordenado
library(dplyr)
PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/poisons.csv"
df <- read.csv(PATH) %>%
select(-X) %>% 
mutate(poison = factor(poison, ordered = TRUE))
glimpse(df)

Salida:

## Observations: 48
## Variables: 3
## $ time   <dbl> 0.31, 0.45, 0.46, 0.43, 0.36, 0.29, 0.40, 0.23, 0.22, 0...
## $ poison <ord> 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2...
## $ treat  <fctr> A, A, A, A, A, A, A, A, A, A, A, A, B, B, B, B, B, B, ...		

Nuestro objetivo es probar la siguiente suposiciรณn:

  • H0: No hay diferencia en el tiempo promedio de supervivencia entre los grupos.
  • H1: El promedio del tiempo de supervivencia es diferente para al menos un grupo.

En otras palabras, se quiere saber si existe una diferencia estadรญstica entre la media del tiempo de supervivencia segรบn el tipo de veneno administrado al conejillo de indias.

Procederรก de la siguiente manera:

  • Paso 1: Verifique el formato de la variable veneno
  • Paso 2: Imprima el resumen estadรญstico: recuento, media y desviaciรณn estรกndar
  • Paso 3: Dibuje un diagrama de caja
  • Paso 4: Calcule la prueba ANOVA unidireccional
  • Paso 5: Realizar una comparaciรณn por pares con la prueba HSD de Tukey.

Paso 1) Comprueba los niveles de veneno con el cรณdigo que aparece a continuaciรณn. Deberรญas ver tres valores de caracteres, ya que el verbo mutate convirtiรณ la columna en un factor ordenado.

levels(df$poison)

Salida:

## [1] "1" "2" "3"

Paso 2) Calcula la media y la desviaciรณn estรกndar.

df %>%
	group_by(poison) %>%
	summarise(
		count_poison = n(),
		mean_time = mean(time, na.rm = TRUE),
		sd_time = sd(time, na.rm = TRUE)
	)

Salida:

## 
# A tibble: 3 x 4
##   poison count_poison mean_time    sd_time
##    <ord>        <int>     <dbl>      <dbl>
## 1      1           16  0.617500 0.20942779
## 2      2           16  0.544375 0.28936641
## 3      3           16  0.276250 0.06227627

Paso 3) En el paso tres, puedes comprobar grรกficamente si hay una diferencia entre la distribuciรณn. Tenga en cuenta que incluye el punto nervioso.

ggplot(df, aes(x = poison, y = time, fill = poison)) +
    geom_boxplot() +
    geom_jitter(shape = 15,
        color = "steelblue",
        position = position_jitter(0.21)) +
    theme_classic()

Salida:

Ejemplo de prueba ANOVA unidireccional

Paso 4) Puede ejecutar la prueba ANOVA unidireccional con el comando aov. La sintaxis bรกsica de una prueba ANOVA es:

aov(formula, data)
Arguments:			
- formula: The equation you want to estimate
- data: The dataset used	

La sintaxis de la fรณrmula es:

y ~ X1+ X2+...+Xn # X1 +  X2 +... refers to the independent variables
y ~ . # use all the remaining variables as independent variables

Ahora puedes responder a la pregunta: ยฟexiste alguna diferencia en el tiempo de supervivencia entre los conejillos de indias, dado el tipo de veneno administrado?

Almacena el modelo en un objeto y pรกsalo a summary() para obtener una impresiรณn legible de los resultados.

anova_one_way <- aov(time~poison, data = df)
summary(anova_one_way)

Code Explicaciรณn

  • aov(tiempo ~ veneno, datos = df): Ejecute la prueba ANOVA con la siguiente fรณrmula
  • summary(anova_one_way): Imprime el resumen de la prueba

Salida:

##             Df Sum Sq Mean Sq F value   Pr(>F)
## poison       2  1.033  0.5165   11.79 7.66e-05 ***
## Residuals   45  1.972  0.0438                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

El valor p es 7.66e-05, muy por debajo del umbral habitual de 0.05, y los tres asteriscos indican la mayor significancia estadรญstica. Se puede rechazar H0 y concluir que al menos un grupo de veneno tiene un tiempo medio de supervivencia diferente.

Cรณmo comprobar los supuestos del ANOVA en R

Un valor p de ANOVA solo es fiable cuando se cumplen las tres condiciones mencionadas anteriormente. Cada una de ellas se verifica directamente en R, y todas se ejecutan sobre el objeto del modelo ajustado.

1. Independencia de las observaciones. Esta es una caracterรญstica del diseรฑo del estudio, no de los datos, por lo que ninguna prueba puede corregirla. Cada cobaya debe medirse una sola vez y asignarse a su grupo al azar. Si el mismo sujeto aparece en varias filas, se necesita un modelo de medidas repetidas.

2. Normalidad de los residuos. El anรกlisis de varianza (ANOVA) asume que los residuos, no los datos brutos, siguen una distribuciรณn aproximadamente normal. Examine el grรกfico QQ y confirme con la prueba de Shapiro-Wilk:

par(mfrow = c(2, 2))
plot(anova_one_way)          # four diagnostic plots

shapiro.test(residuals(anova_one_way))

Los puntos que se aproximan a la diagonal del grรกfico QQ normal indican residuos normales. Un valor p de Shapiro-Wilk superior a 0.05 significa que no se puede rechazar la normalidad.

3. Homogeneidad de la varianza. Cada grupo deberรญa mostrar una dispersiรณn similar. El grรกfico de residuos frente a valores ajustados deberรญa tener forma de banda plana en lugar de embudo. Confรญrmelo con la prueba de Levene, que es mรกs robusta ante la falta de normalidad que la de Bartlett.

library(car)
leveneTest(time ~ poison, data = df)

bartlett.test(time ~ poison, data = df)

Un valor p superior a 0.05 respalda la igualdad de varianzas.

Quรฉ hacer cuando una suposiciรณn resulta ser incorrecta. Si las varianzas son desiguales, ejecute oneway.test(time ~ poison, data = df, var.equal = FALSE), la correcciรณn de Welch. Si los residuos no siguen una distribuciรณn normal y la muestra es pequeรฑa, cambie a la prueba de rangos de Kruskal-Wallis, kruskal.test(time ~ poison, data = df). Con muestras grandes y equilibradas, el ANOVA es bastante robusto ante desviaciones moderadas de la normalidad, por lo que un resultado lรญmite de Shapiro-Wilk rara vez es fatal.

Comparaciรณn por pares

Una prueba F significativa indica que las medias de los grupos no son todas iguales, pero no especifica quรฉ par difiere. La prueba de diferencia significativa honesta de Tukey responde a esta pregunta comparando cada par y controlando la tasa de error global.

TukeyHSD(anova_one_way)

Salida:

Comparaciรณn por pares

Lea la salida una fila por par. diff La columna contiene la diferencia entre las medias de los dos grupos, lvr y licencia acotar el intervalo de confianza del 95 por ciento para esa diferencia, y p adj es el valor p ajustado para comparaciones mรบltiples. Un par difiere significativamente cuando su intervalo excluye el cero, lo que equivale a cuando p adj es inferior a 0.05. En este conjunto de datos, las comparaciones que involucran al veneno 3 son las significativas, lo que coincide con el diagrama de caja: el grupo 3 tiene un tiempo de supervivencia medio claramente menor que los grupos 1 y 2, mientras que los grupos 1 y 2 son estadรญsticamente indistinguibles entre sรญ.

ANOVA bidireccional

Un ANOVA bidireccional aรฑade un segundo factor a la fรณrmula. Funciona exactamente igual que la prueba unidireccional, solo que la fรณrmula cambia:

y ~ x1 + x2

Aquรญ, y es la variable de respuesta cuantitativa, mientras que x1 y x2 son factores categรณricos.

Hipรณtesis en la prueba ANOVA de dos vรญas

  • H0: Las medias de los grupos son iguales para ambas variables factoriales.
  • H1: Al menos una media grupal difiere, para al menos uno de los dos factores.

Se aรฑade la variable de tratamiento al modelo. Esta variable registra el tratamiento administrado al conejillo de indias. La fรณrmula aditiva que se muestra a continuaciรณn evalรบa si cada factor afecta al tiempo de supervivencia de forma individual, teniendo en cuenta el efecto de los demรกs.

Modifique el cรณdigo agregando "tratar" junto a la primera variable independiente.

anova_two_way <- aov(time~poison + treat, data = df)
summary(anova_two_way)

Salida:

##             Df Sum Sq Mean Sq F value  Pr(>F)    
## poison       2 1.0330  0.5165   20.64 5.7e-07 ***
## treat        3 0.9212  0.3071   12.27 6.7e-06 ***
## Residuals   42 1.0509  0.0250                    
## ---

Ambos valores p (5.7e-07 para el veneno y 6.7e-06 para el tratamiento) estรกn muy por debajo de 0.05, por lo que se rechaza H0 para ambos factores y se concluye que cambiar el veneno o el tratamiento afecta el tiempo de supervivencia.

Agregar un tรฉrmino de interacciรณn

El modelo aditivo anterior supone que el efecto del veneno es el mismo independientemente del tratamiento. Para comprobar esta suposiciรณn, sustituya el signo mรกs por un asterisco, que representa tanto los efectos principales como su interacciรณn:

anova_interaction <- aov(time~poison * treat, data = df)
summary(anova_interaction)

Si la fila de veneno/tratamiento no es significativa, el modelo aditivo es la mejor opciรณn porque consume menos grados de libertad.

ANOVA en R: Guรญa rรกpida de pruebas

La tabla que aparece a continuaciรณn enumera cada prueba utilizada anteriormente, la llamada a R que la ejecuta y la hipรณtesis que evalรบa:

Prueba Code Hipรณtesis P-valor
ANOVA de una vรญa
aov(y ~ X, data = df)
H1: El promedio es diferente para al menos un grupo 0.05
Por parejas
TukeyHSD(ANOVA summary)
0.05
ANOVA de dos vรญas
aov(y ~ X1 + X2, data = df)
H1: Al menos una media de grupo difiere para cualquiera de los factores. 0.05

Preguntas Frecuentes

El valor F es la razรณn entre la varianza entre grupos y la varianza dentro de los grupos. Los valores cercanos a 1 sugieren que las medias de los grupos son similares. Los valores altos indican que los grupos provienen de poblaciones con medias diferentes.

Utilice oneway.test() con var.equal = FALSE cuando las varianzas sean desiguales, y kruskal.test() cuando los residuos no sigan una distribuciรณn normal. Transformar una respuesta asimรฉtrica con log() suele restablecer tanto la normalidad como la igualdad de varianzas.

Cada prueba t conlleva un riesgo de falso positivo del 5 %. Tres pruebas por pares elevan la tasa de error global a aproximadamente el 14 %. El anรกlisis de varianza (ANOVA) mantiene una รบnica prueba global en el 5 %, y la prueba HSD de Tukey ajusta las comparaciones por pares.

ANOVA es un filtro estรกndar para la selecciรณn de caracterรญsticas: clasifica los predictores categรณricos segรบn la fuerza con la que separan una variable objetivo numรฉrica. Los equipos de IA tambiรฉn lo utilizan para comparar variantes de modelos en diferentes conjuntos de validaciรณn cruzada.

Sรญ. Los asistentes de IA pueden explicar los grados de libertad, traducir los valores p a un lenguaje sencillo e indicar incumplimientos de supuestos en los grรกficos de diagnรณstico. Siempre confirme la lectura con sus propios resultados de leveneTest() y shapiro.test().

Resumir este post con: