ANOVA DE UNA VÍA

La técnica de análisis de varianza (ANOVA) también conocida como análisis factorial y desarrollada por Fisher en 1930, constituye la herramienta básica para el estudio del efecto de uno o más factores (cada uno con dos o más niveles) sobre la media de una variable continua. Es por lo tanto el test estadístico a emplear cuando se desea comparar las medias de dos o más grupos. Esta técnica puede generalizarse también para estudiar los posibles efectos de los factores sobre la varianza de una variable.

La hipótesis nula de la que parten los diferentes tipos de ANOVA es que la media de la variable estudiada es la misma en los diferentes grupos, en contraposición a la hipótesis alternativa de que al menos dos medias difieren de forma significativa. ANOVA permite comparar múltiples medias, pero lo hace mediante el estudio de las varianzas.

El funcionamiento básico de un ANOVA consiste en calcular la media de cada uno de los grupos para a continuación comparar la varianza de estas medias (varianza explicada por la variable grupo, intervarianza) frente a la varianza promedio dentro de los grupos (la no explicada por la variable grupo, intravarianza). Bajo la hipótesis nula de que las observaciones de los distintos grupos proceden todas la misma población (tienen la misma media y varianza), la varianza ponderada entre grupos será la misma que la varianza promedio dentro de los grupos. Conforme las medias de los grupos estén más alejadas las unas de las otras, la varianza entre medias se incrementará y dejará de ser igual a la varianza promedio dentro de los grupos.

El ANOVA de una vía, ANOVA con un factor o modelo factorial de un solo factor es el tipo de análisis que se emplea cuando los datos no están pareados y se quiere estudiar si existen diferencias significativas entre las medias de una variable aleatoria continua en los diferentes niveles de otra variable cualitativa o factor. Es una extensión de los t-test independientes para más de dos grupos.

Las hipótesis contrastadas en un ANOVA de un factor son:

H0: No hay diferencias entre las medias de los diferentes grupos : μ1=μ2…=μk=μ H1: Al menos un par de medias son significativamente distintas la una de la otra.

Otra forma de plantear las hipótesis de un ANOVA es la siguiente. Si se considera μ como el valor esperado para una observación cualquiera de la población (la media de todas las observaciones sin tener en cuenta los diferentes niveles), y αi el efecto introducido por el nivel i. La media de un determinado nivel (μi) se puede definir como:

μi=μ+αi

H0: Ningún nivel introduce un efecto sobre la media total: α1=α2=…αk=0 H1: Al menos un nivel introduce un efecto que desplaza su media: Algún αi≠0

Como se ha mencionado anteriormente, la diferencia entre medias se detecta a través del estudio de la varianza entre grupos y dentro de grupos. Para lograrlo, el ANOVA requiere de una descomposición de la varianza basada en la siguiente idea:

Variabilidad total =

variabilidad debida a los diferentes niveles del factor + variabilidad residual

lo que es equivalente a:

variabilidad explicada por el factor + variabilidad no explicada por el factor

lo que es equivalente a:

(varianza entre niveles) + (varianza dentro de los niveles)

Para poder calcular las diferentes varianzas en primer lugar se tienen que obtener las Sumas de Cuadrados (SS o Sc):

TSS=SSE+SST

CONDICIONES

Independencia: Las observaciones deben ser aleatorias. El tamaño total de la muestra de cada grupo debe de ser < 10% de la población a la que representa. Los grupos (niveles del factor) deben de ser independientes entre ellos.

Distribución normal de cada uno de los niveles o grupos: La variable cuantitativa debe de distribuirse de forma normal en cada uno de los grupos, siendo menos estricta esta condición cuanto mayor sea el tamaño de cada grupo. La mejor forma de verificar la normalidad es estudiar los residuos de cada observación respecto a la media del grupo al que pertenecen.

A pesar de que el ANOVA es bastante robusto aun cuando existe cierta falta de normalidad, si la simetría es muy pronunciada y el tamaño de cada grupo no es muy grande, se puede recurrir en su lugar al test no paramétrico prueba H de Kruskal-Wallis. En algunos libros recomiendan mantenerse con ANOVA a no ser que la falta de normalidad sea muy extrema.

Esta condición es más importante cuanto menor es el tamaño de los grupos.

Si un Análisis de Varianza resulta significativo, implica que al menos dos de las medias comparadas son significativamente distintas entre sí, pero no se indican cuáles. Para identificarlas hay que comparar dos a dos las medias de todos los grupos introducidos en el análisis mediante un t-test u otro test que compare 2 grupos, a esto se le conoce como análisis post-hoc. Debido a la inflación del error de tipo I, cuantas más comparaciones se hagan más aumenta la probabilidad de encontrar diferencias significativas (para α = 0.05, de cada 100 comparaciones se esperan 5 significativas solo por azar).

Los niveles de significancia pueden ser ajustados en función del número de comparaciones (corrección de significancia). Si no se hace ningún tipo de corrección se aumenta la posibilidad de falsos positivos (error tipo I) pero si se es muy estricto con las correcciones se pueden considerar como no significativas diferencias que realmente podrían serlo (error tipo II). La necesidad de corrección o no, y de qué tipo, se ha de estudiar con detenimiento en cada caso.

El tamaño del efecto de un ANOVA, es el valor que permite medir cuanta varianza en la variable dependiente cuantitativa es resultado de la influencia de la variable cualitativa independiente, o lo que es lo mismo, cuanto afecta la variable independiente (factor) a la variable dependiente.

Los niveles de clasificación más empleados para el tamaño del efecto son:

0.01 = pequeño 0.06 = mediano 0.14 = grande

Los valores necesarios para calcular η2 se obtienen del summary del ANOVA. En R puede obtenerse mediante la función etaSquared() de paquete lsr.

EJERCICIO

Supóngase que de un estudio quiere comprobar si existe una diferencia significativa entre el % de bateos exitosos de los jugadores de béisbol dependiendo de la posición en la que juegan. En caso de que exista diferencia se quiere saber qué posiciones difieren del resto. La siguiente tabla contiene una muestra de jugadores seleccionados aleatoriamente.

posicion <- c("OF", "IF", "IF", "OF", "IF", "IF", "OF", "OF", "IF", "IF", "OF", "OF", "IF", "OF", "IF", "IF", "IF", "OF", "IF", "OF", "IF", "OF", "IF", "OF", "IF", "DH", "IF", "IF", "IF", "OF", "IF", "IF", "IF", "IF", "OF", "IF", "OF", "IF", "IF", "IF", "IF", "OF", "OF", "IF", "OF", "OF", "IF", "IF", "OF", "OF", "IF", "OF", "OF", "OF", "IF", "DH", "OF", "OF", "OF", "IF", "IF", "IF", "IF", "OF", "IF", "IF", "OF", "IF", "IF", "IF", "OF", "IF", "IF", "OF", "IF", "IF", "IF", "IF", "IF", "IF", "OF", "DH", "OF", "OF", "IF", "IF", "IF", "OF", "IF", "OF", "IF", "IF", "IF", "IF", "OF", "OF", "OF", "DH", "OF", "IF", "IF", "OF", "OF", "C", "IF", "OF", "OF", "IF", "OF", "IF", "IF", "IF", "OF", "C", "OF", "IF", "C", "OF", "IF", "DH", "C", "OF", "OF", "IF", "C", "IF", "IF", "IF", "IF", "IF", "IF", "OF", "C", "IF", "OF", "OF", "IF", "OF", "IF", "OF", "DH", "C", "IF", "OF", "IF", "IF", "OF", "IF", "OF", "IF", "C", "IF", "IF", "OF", "IF", "IF", "IF", "OF", "OF", "OF", "IF", "IF", "C", "IF", "C", "C", "OF", "OF", "OF", "IF", "OF", "IF", "C", "DH", "DH", "C", "OF", "IF", "OF", "IF", "IF", "IF", "C", "IF", "OF", "DH", "IF", "IF", "IF", "OF", "OF", "C", "OF", "OF", "IF", "IF", "OF", "OF", "OF", "OF", "OF", "OF", "IF", "IF", "DH", "OF", "IF", "IF", "OF", "IF", "IF", "IF", "IF", "OF", "IF", "C", "IF", "IF", "C", "IF", "OF", "IF", "DH", "C", "OF", "C", "IF", "IF", "OF", "C", "IF", "IF", "IF", "C", "C", "C", "OF", "OF", "IF", "IF", "IF", "IF", "OF", "OF", "C", "IF", "IF", "OF", "C", "OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", "C", "IF", "DH", "IF", "C", "DH", "C", "IF", "C", "OF", "C", "C", "IF", "OF", "IF", "IF", "IF", "IF", "IF", "IF", "IF", "IF", "OF", "OF", "OF", "IF", "OF", "OF", "IF", "IF", "IF", "OF", "C", "IF", "IF", "IF", "IF", "OF", "OF", "IF", "OF", "IF", "OF", "OF", "OF", "IF", "OF", "OF", "IF", "OF", "IF", "C", "IF", "IF", "C", "DH", "OF", "IF", "C", "C", "IF", "C", "IF", "OF", "C", "C", "OF")
bateo <- c(0.359, 0.34, 0.33, 0.341, 0.366, 0.333, 0.37, 0.331, 0.381, 0.332, 0.365, 0.345, 0.313, 0.325, 0.327, 0.337, 0.336, 0.291, 0.34, 0.31, 0.365, 0.356, 0.35, 0.39, 0.388, 0.345, 0.27, 0.306, 0.393, 0.331, 0.365, 0.369, 0.342, 0.329, 0.376, 0.414, 0.327, 0.354, 0.321, 0.37, 0.313, 0.341, 0.325, 0.312, 0.346, 0.34, 0.401, 0.372, 0.352, 0.354, 0.341, 0.365, 0.333, 0.378, 0.385, 0.287, 0.303, 0.334, 0.359, 0.352, 0.321, 0.323, 0.302, 0.349, 0.32, 0.356, 0.34, 0.393, 0.288, 0.339, 0.388, 0.283, 0.311, 0.401, 0.353, 0.42, 0.393, 0.347, 0.424, 0.378, 0.346, 0.355, 0.322, 0.341, 0.306, 0.329, 0.271, 0.32, 0.308, 0.322, 0.388, 0.351, 0.341, 0.31, 0.393, 0.411, 0.323, 0.37, 0.364, 0.321, 0.351, 0.329, 0.327, 0.402, 0.32, 0.353, 0.319, 0.319, 0.343, 0.288, 0.32, 0.338, 0.322, 0.303, 0.356, 0.303, 0.351, 0.325, 0.325, 0.361, 0.375, 0.341, 0.383, 0.328, 0.3, 0.277, 0.359, 0.358, 0.381, 0.324, 0.293, 0.324, 0.329, 0.294, 0.32, 0.361, 0.347, 0.317, 0.316, 0.342, 0.368, 0.319, 0.317, 0.302, 0.321, 0.336, 0.347, 0.279, 0.309, 0.358, 0.318, 0.342, 0.299, 0.332, 0.349, 0.387, 0.335, 0.358, 0.312, 0.307, 0.28, 0.344, 0.314, 0.24, 0.331, 0.357, 0.346, 0.351, 0.293, 0.308, 0.374, 0.362, 0.294, 0.314, 0.374, 0.315, 0.324, 0.382, 0.353, 0.305, 0.338, 0.366, 0.357, 0.326, 0.332, 0.323, 0.306, 0.31, 0.31, 0.333, 0.34, 0.4, 0.389, 0.308, 0.411, 0.278, 0.326, 0.335, 0.316, 0.371, 0.314, 0.384, 0.379, 0.32, 0.395, 0.347, 0.307, 0.326, 0.316, 0.341, 0.308, 0.327, 0.337, 0.36, 0.32, 0.372, 0.306, 0.305, 0.347, 0.281, 0.281, 0.296, 0.306, 0.343, 0.378, 0.393, 0.337, 0.327, 0.336, 0.32, 0.381, 0.306, 0.358, 0.311, 0.284, 0.364, 0.315, 0.342, 0.367, 0.307, 0.351, 0.372, 0.304, 0.296, 0.332, 0.312, 0.437, 0.295, 0.316, 0.298, 0.302, 0.342, 0.364, 0.304, 0.295, 0.305, 0.359, 0.335, 0.338, 0.341, 0.3, 0.378, 0.412, 0.273, 0.308, 0.309, 0.263, 0.291, 0.359, 0.352, 0.262, 0.274, 0.334, 0.343, 0.267, 0.321, 0.3, 0.327, 0.313, 0.316, 0.337, 0.268, 0.342, 0.292, 0.39, 0.332, 0.315, 0.298, 0.298, 0.331, 0.361, 0.272, 0.287, 0.34, 0.317, 0.327, 0.354, 0.317, 0.311, 0.174, 0.302, 0.302, 0.291, 0.29, 0.268, 0.352, 0.341, 0.265, 0.307, 0.36, 0.305, 0.254, 0.279, 0.321, 0.305, 0.35, 0.308, 0.326, 0.219, 0.23, 0.322, 0.405, 0.321, 0.291, 0.312, 0.357, 0.324)

datos <- data.frame(posicion = posicion, bateo = bateo)
str(datos)
## 'data.frame':    327 obs. of  2 variables:
##  $ posicion: chr  "OF" "IF" "IF" "OF" ...
##  $ bateo   : num  0.359 0.34 0.33 0.341 0.366 0.333 0.37 0.331 0.381 0.332 ...
summary(datos)
##    posicion             bateo       
##  Length:327         Min.   :0.1740  
##  Class :character   1st Qu.:0.3090  
##  Mode  :character   Median :0.3310  
##                     Mean   :0.3322  
##                     3rd Qu.:0.3545  
##                     Max.   :0.4370

1.- Observaciones por grupo y boxplot

table(datos$posicion)
## 
##   C  DH  IF  OF 
##  39  14 154 120

Medias

aggregate(bateo ~posicion, data=datos, FUN = mean)
##   posicion     bateo
## 1        C 0.3226154
## 2       DH 0.3477857
## 3       IF 0.3315260
## 4       OF 0.3342500

ANOVA contrasta que la media de la variable dependiente (cuantitativa) es similar en cada uno de los grupos.

La media del bateo de las posiciones es similar en valores cercanos a 0.33

Es muy probable que el ANOVA acepte la hipótesis nula de igualdad de medias.

Varianzas

aggregate(bateo ~posicion, data=datos, FUN = var)
##   posicion        bateo
## 1        C 0.0020368745
## 2       DH 0.0012986429
## 3       IF 0.0013760418
## 4       OF 0.0008669454

Las varianzas son diferentes en cada grupo. Por ejemplo: la mayor varianza es 0.002, que es el doble de la obtenida por DH e IF y mucho valor que la de OF.

Desviaciones típicas

aggregate(bateo~posicion, data=datos, FUN = sd)
##   posicion      bateo
## 1        C 0.04513175
## 2       DH 0.03603669
## 3       IF 0.03709504
## 4       OF 0.02944394

Obtenemos conclusiones similares a las obtenidas al estudiar las varianzas.

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
ggplot(data=datos, aes(x=posicion, y=bateo, color = posicion)) + 
  geom_boxplot()+
  theme_bw()

Este tipo de representación permite identificar de forma preliminar si existen asimetrías, datos atípicos o diferencia de varianzas. En este caso, los 4 grupos parecen seguir una distribución simétrica. En el nivel IF se detectan algunos valores extremos que habrá que estudiar con detalle por si fuese necesario eliminarlos. El tamaño de las cajas es similar para todos los niveles por lo que no hay indicios de falta de homocedasticidad.

Verificar las condiciones para el ANOVA

NORMALIDAD

par(mfrow= c(2,2))

qqnorm(datos[datos$posicion == "C", "bateo"], main = "C")
qqline(datos[datos$posicion == "C", "bateo"])

qqnorm(datos[datos$posicion == "DH", "bateo"], main = "DH")
qqline(datos[datos$posicion == "DH", "bateo"])

qqnorm(datos[datos$posicion == "IF", "bateo"], main = "IF")
qqline(datos[datos$posicion == "IF", "bateo"])

qqnorm(datos[datos$posicion == "OF", "bateo"], main = "OF")
qqline(datos[datos$posicion == "OF", "bateo"])

Para las cuatro categorías se aceptaría la distribución normal, ya que los valores se ajustan adecuadamente a la recta de los cuantiles teóricos de la normal.

par(mfrow = c(1,1))
# Test de Normalidad de Shapiro Wilks
#======================================
require(nortest)
## Loading required package: nortest
by(data=datos, INDICES = datos$posicion, FUN = function(x){lillie.test((x$bateo))})
## datos$posicion: C
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  (x$bateo)
## D = 0.087208, p-value = 0.6403
## 
## ------------------------------------------------------------ 
## datos$posicion: DH
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  (x$bateo)
## D = 0.11205, p-value = 0.9046
## 
## ------------------------------------------------------------ 
## datos$posicion: IF
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  (x$bateo)
## D = 0.070653, p-value = 0.05787
## 
## ------------------------------------------------------------ 
## datos$posicion: OF
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  (x$bateo)
## D = 0.044082, p-value = 0.8213

En todos los casos, los p-valores son mayores a 0.05. Tenemos evidencia empírica suficiente para aceptar la hipótesis de normalidad al 5% en todos los casos.

No hace falta corregir los datos atípicos, ya que todos los casos aceptan la normalidad.

HOMOGENEIDAD DE VARIANZAS

fligner.test(bateo~posicion, datos)
## 
##  Fligner-Killeen test of homogeneity of variances
## 
## data:  bateo by posicion
## Fligner-Killeen:med chi-squared = 6.9724, df = 3, p-value = 0.07278
bartlett.test(bateo~posicion, datos)
## 
##  Bartlett test of homogeneity of variances
## 
## data:  bateo by posicion
## Bartlett's K-squared = 13, df = 3, p-value = 0.004638
library(car)
## Warning: package 'car' was built under R version 4.2.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.2.3
leveneTest(bateo ~posicion, datos, center = "median")
## Warning in leveneTest.default(y = y, group = group, ...): group coerced to
## factor.
## Levene's Test for Homogeneity of Variance (center = "median")
##        Df F value Pr(>F)  
## group   3  2.6057 0.0518 .
##       323                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Al nivel de significación del 10%, los tres contrastes rechazan la homocedasticidad.

Al nivel del 5%, sólo la de Fligner y Levene aceptan la homocedasticidad.

Siendo prudentes, hay que suponer que tenemos un problema de heterocedasticidad.

Suponiendo Homocedasticidad, se procede de la siguiente manera:

ANOVA

anova <- aov(datos$bateo ~ datos$posicion)
summary(anova)
##                 Df Sum Sq  Mean Sq F value Pr(>F)
## datos$posicion   3 0.0076 0.002519   1.994  0.115
## Residuals      323 0.4080 0.001263

H0: La media del bateo de cada posición es similar. H1: La media del bateo de cada posición es diferente.

El F=1.994, siendo su p-valor de 0.115 > 0.05. Tenemos evidencia empírica suficiente para aceptar la hipótesis de igualdad de medias.

La media de los bateos no difiere de la posición del jugador.

plot(anova)

Grafico 1, 3, 4 tiene un ajuste de una recta horizontal; esto indica que no hay observaciones influyentes (anómalas) y que tenemos homocedasticidad en el error. Gráfico 2, que es el qqplot, la mayoría de los puntos cae en la recta de los cuantiles de la normal. Por tanto, se acepta la distribución normal para el residuo.

Se cumplen las propiedades del error del modelo ANOVA.

Tamaño del efecto o eta cuadrado

eta2 <- 0.0076/(0.0076+0.4080)
eta2
## [1] 0.01828681

El efecto es pequeño (efecto pequeño = ANOVA acepta H0)

Comparaciones múltiples

pairwise.t.test(x=datos$bateo, g = datos$posicion, p.adjust.method = "holm",
                pool.sd = TRUE, paired = FALSE, alternative = "two.sided")
## 
##  Pairwise comparisons using t tests with pooled SD 
## 
## data:  datos$bateo and datos$posicion 
## 
##    C    DH   IF  
## DH 0.14 -    -   
## IF 0.49 0.41 -   
## OF 0.38 0.49 0.53
## 
## P value adjustment method: holm

DH vs C p valor = 0.14 > 0.05 Medias iguales al aceptar HO IF vs C p valor = 0.49 > 0.05 Medias iguales al aceptar HO IF vs DH p valor = 0.51 > 0.05 Medias iguales al aceptar HO OF vs C p valor = 0.38 > 0.05 Medias iguales al aceptar HO OF vs DH p valor = 0.49 > 0.05 Medias iguales al aceptar HO OF vs IF p valor = 0.53 > 0.05 Medias iguales al aceptar HO

Lógicamente, el resultado debe ser ésta, ya que el ANOVA acepta H0 – todas las medias son iguales.

plot(TukeyHSD(anova))

El cero está dentro de todos los intervalos de confianza; con lo cual, todas las medias son iguales.

CONCLUSIÓN

No se detectan diferencias en las medias de bateo en las posiciones de los jugadores. La posición no influye en el bateo medio de los jugadores del equipo.