Tutorial de R ANOVA: unidireccional y bidireccional (con ejemplos)

¿Qué es ANOVA?

Análisis de variación (ANOVA) es una técnica estadística, comúnmente utilizada para estudiar diferencias entre dos o más medias grupales. La prueba ANOVA se centra en las diferentes fuentes de variación de una variable típica. ANOVA en R proporciona principalmente evidencia de la existencia de igualdad media entre los grupos. Este método estadístico es una extensión de la prueba t. Se utiliza en una situación en la que la variable factor tiene más de un grupo.

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 indicar si los tres grupos tienen desempeños 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). Esta prueba, como cualquier otra prueba estadística, proporciona evidencia de si la hipótesis H0 puede aceptarse o rechazarse.

Hipótesis en prueba ANOVA unidireccional

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

En otras palabras, la hipótesis H0 implica que no hay evidencia suficiente para demostrar que la media de un grupo (factor) es diferente de otro.

Esta prueba es similar a la prueba t, aunque se recomienda la prueba ANOVA en situaciones con más de 2 grupos. Excepto que la prueba t y el ANOVA proporcionan resultados similares.

Supuestos

Suponemos que cada factor se muestra aleatoriamente, es independiente y proviene de una población distribuida normalmente con varianzas desconocidas pero iguales.

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 las diferencias entre los grupos dentro de toda la población. Mire los dos gráficos siguientes para comprender el concepto de varianza entre grupos.

El gráfico de la izquierda muestra muy poca variación entre los tres grupos, y es muy probable que las tres medias tiendan a la total media (es decir, media de los tres grupos).

El gráfico de la derecha muestra tres distribuciones muy separadas y ninguna de ellas se superpone. Existe una alta probabilidad de que la diferencia entre la media total y la media de los grupos sea grande.

Interpretar la prueba ANOVA

El dentro del grupo la variabilidad considera la diferencia entre los grupos. La variación proviene de las observaciones individuales; Algunos puntos pueden ser totalmente diferentes de lo que significa el grupo. El dentro del grupo La variabilidad recoge este efecto y se refiere al error de muestreo.

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

La parte izquierda traza la distribución de tres grupos diferentes. Aumentó la dispersión de cada muestra y está claro que la variación individual es grande. La prueba F disminuirá, lo que significa que usted tiende a aceptar la hipótesis nula.

La parte derecha muestra exactamente las mismas muestras (media idéntica) pero con menor variabilidad. Conduce a un aumento de la prueba F y tiende 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 estadístico F bajo indica poca o ninguna diferencia significativa entre el promedio del grupo.

Ejemplo de prueba ANOVA unidireccional

Utilizará el conjunto de datos sobre envenenamiento 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 el siguientewing suposición:

  • H0: No hay diferencia en el tiempo promedio de supervivencia entre los grupos.
  • H3: 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: trazar un box parcela
  • Paso 4: Calcule la prueba ANOVA unidireccional
  • Paso 5: ejecute una prueba t por pares

Paso 1) Puedes comprobar el nivel del veneno con el siguientewing código. Deberías ver tres valores de caracteres porque los conviertes en factor con el verbo mutar.

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 para 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

Puedes responder a nuestra pregunta: ¿Existe alguna diferencia en el tiempo de supervivencia entre el conejillo de indias, sabes?wing el tipo de veneno administrado.

Tenga en cuenta que se recomienda almacenar el modelo y utilizar la función resumen() para obtener una mejor impresión de los resultados.

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

Explicación del código

  • aov(tiempo ~ veneno, datos = df): Ejecute la prueba ANOVA con el siguientewing fórmula
  • resumen (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 inferior al umbral habitual de 0.05. Está seguro de decir que existe una diferencia estadística entre los grupos, indicada por el "*".

Comparación por pares

La prueba ANOVA unidireccional no informa qué grupo tiene una media diferente. En su lugar, puedes realizar una prueba de Tukey con la función TukeyHSD().

TukeyHSD(anova_one_way)

Salida:

Comparación por pares

ANOVA bidireccional

Una prueba ANOVA de dos factores agrega otra variable de grupo a la fórmula. Es idéntica a la prueba ANOVA unidireccional, aunque la fórmula cambia ligeramente:

y=x1+x2

con es una variable cuantitativa y y son variables categóricas.

Hipótesis en la prueba ANOVA de dos vías

  • H0: Las medias son iguales para ambas variables (es decir, variable de factor)
  • H3: Las medias son diferentes para ambas variables

Agrega la variable de tratamiento a nuestro modelo. Esta variable indica el tratamiento que se le da al cuy. Te interesa ver si existe una dependencia estadística entre el veneno y el tratamiento que se le da a la cobaya.

Ajustamos nuestro código agregando tratamiento con la otra 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                    
## ---

Puede concluir que tanto el veneno como el tratamiento son estadísticamente diferentes de 0. Puede rechazar la hipótesis NULA y confirmar que cambiar el tratamiento o el veneno afecta el tiempo de supervivencia.

Resumen

Podemos resumir la prueba en la siguiente tabla:

Probar Código Hipótesis P-valor
ANOVA unidireccional
aov(y ~ X, data = df)
H3: 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)
H3: El promedio es diferente para ambos grupos 0.05