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.

ยฟ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.
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.
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:
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:
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 |




