8. Análisis de varianzas (ANOVA)

La función básica en R para llevar a cabo un análisis de varianzas es aov(). Al igual que en la función lm(), el argumento es una fórmula de la forma y~A, donde ‘y’ es la variable dependiente y A, una variable categórica (factor), es la variable independiente.

En este ejemplo haremos uso nuevamente de la base de datos mtcars para determinar si hay diferencias estadísticamente significativas en el promedio del rendimiento (millas por galón, mpg) como función del número de cilindros del motor del automóvil (cyl).

Análisis en SPSS

Si llevamos a cabo este análisis en SPSS obtendremos como resultado la tabla siguiente:

Entre las opciones disponibles, podemos pedir las estadísticas descriptivas y la prueba de homogeneidad de varianzas de Levene. Como resultado SPSS generará las siguientes tablas:

Finalmente, en un caso como este, donde la estadística F del ANOVA es significativa, podemos pedir algunas pruebas de comparaciones múltiples. En este ejemplo, pediremos la de Tukey para grupos con desigual tamaño (Tukey-B):

Note que bajo la opción Analyze -> Compare means and proportions -> One-Way ANOVA… no hay opciones para preparar la gráfica de probabilidad normal para evaluar el supuesto de homogeneidad de varianzas, ni tampoco aparece la prueba de normalidad de Shapiro-Wilks. Para hacer esto hay que llevar a cabo el ANOVA utilizando la opción de modelos lineales generales, usar la opción para almacenar los residuos y luego utilizar la opción de análisis de exploración (Analyze -> Descriptive Statistics -> Explore…) para hacer la prueba de normalidad.

Análisis en R

Esta es la manera de obtener estos resultados en R. Recuerde iniciar con los comandos para acceder a la base de datos y las variables en ella:

library(car)
data(mtcars)
attach(mtcars)

Al igual que en la prueba t, primero hay que definir la variable independiente como un factor. Para ello usaremos el comando factor(cyl), el que almacenaremos bajo el nombre ‘cilindros’.

cilindros <- factor(cyl)

El modelo, entonces, será ‘mpg~cilindros’, el cual utilizaremos como argumento de la función aov(). El resultado lo almacenaremos bajo el nombre resAOV:

resAOV <- aov(mpg~cilindros)

Haremos uso de la función summary() para obtener la tabla de resultados:

summary(res.AOV)

El resultado es:

            Df Sum Sq Mean Sq F value   Pr(>F)    
cilindros 2 824.8 412.4 39.7 4.98e-09 ***
Residuals 29 301.3 10.4
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Note que el valor de la probabilidad es 0.00000000498, el cual es significativo tanto al 5% al 1%. Si desea ver una comparación gráfica de los tres grupos utilice el comando boxplot():

boxplot(mpg~cilindros,xlab="Número de cilindros")

El resultado es:

Finalmente, podemos preparar una tabla con las medias y las desviaciones estándar de los tres grupos (tres tipos de cilindraje) mediante la función aggregate(). Esta función requiere como argumentos el modelo que se está evaluando, la especificación de la base de datos y la definición de la función que se quiere agregar. En nuestro ejemplo el comando es:

aggregate(mpg~cilindros, data=mtcars,
function(x) round(c(mean = mean(x), sd = sd(x)), 2))

El resultado es, en este caso:

  cilindros mpg.mean mpg.sd
1 4 26.66 4.51
2 6 19.74 1.45
3 8 15.10 2.56

Pruebas de normalidad

Los siguientes tres comandos permiten hacer la gráfica de probabilidad de los residuos para evaluar visualmente si se cumple el supuesto de normalidad:

residuos <- resid(resAOV)
qqnorm(residuos)
qqline(residuos)

Si desea realizar una prueba estadística para verificar el supuesto de normalidad, puede utilizar la función shapiro.test():

shapiro.test(residuos)

El resultado de esta prueba es el siguiente:

        Shapiro-Wilk normality test

data: residuos
W = 0.97065, p-value = 0.5177

Pruebas de homogeneidad de varianzas

Puede realizar la prueba de Levene para homomogeneidad de varianzas utilizando la función leveneTest() al igual que en la prueba T:

leveneTest(mpg~cilindros,center=mean)

Con el siguiente resultado:

Levene's Test for Homogeneity of Variance (center = mean)
Df F value Pr(>F)
group 2 6.4843 0.004703 **
29
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Si le interesa usar la prueba de Bartlett, la función es Bartlett.test():

bartlett.test(mpg~cilindros)

Con el siguiente resultado:

        Bartlett test of homogeneity of variances

data: mpg by cilindros
Bartlett's K-squared = 8.3934, df = 2, p-value = 0.01505

Pruebas de comparaciones múltiples:

Si la estadística F en la tabla de ANOVA resulta significativa, se requiere examinar qué diferencias entre medias de los grupos son significativas. La prueba de Tukey es una muy popular para hacer dichas comparaciones. Este análisis se puede realizar en R mediante la función tukeyHSD(). Como argumento de esta función hay que especificar la variable con los resultados del ANOVA. En nuestro ejemplo esta variable es resAOV. Así el comando para llevar a cabo el análisis será:

tukeyHSD(resAOV)

El resultado que produce la ejecución de este comando es:

  Tukey multiple comparisons of means
95% family-wise confidence level

Fit: aov(formula = mpg ~ cilindros)

$cilindros
diff lwr upr p adj
6-4 -6.920779 -10.769350 -3.0722086 0.0003424
8-4 -11.563636 -14.770779 -8.3564942 0.0000000
8-6 -4.642857 -8.327583 -0.9581313 0.0112287

Las cinco columnas de esta tabla especifican los dos grupos que se comparan, la diferencia entre las medias de los grupos, los límites del intervalo de confianza para la diferencia, y el valor de probabilidad. De esta tabla podemos ver que las tres posibles comparaciones entre grupos son significativas al nivel de significación 0.05.

Modelos multifactoriales y análisis de covarianza

La siguiente tabla presenta algunos modelos que se pueden evaluar mediante la función aov():

y~A+BModelo de dos factores sin interacción.
y~A+B+A:BModelo de dos factores con interacción.
y~c+AAnálisis de covarianzas. Aquí ‘c’ es una variable continua (covariado, no un factor).
y~c+A+B+A:BModelo de dos factores con interacción y un covariado.

Recuerde que las variables independientes A y B se deben definir como factores, mientras que los covariados son variables continuas. Los modelos que se pueden evaluar no están limitados a dos factores, sino que se pueden incluir cualquier cantidad de ellos, incluyendo interacciones de mayor orden y más covariados.

Resumen

Esta es la lista completa de comandos utilizada en este ejemplo:

library(car)
data(mtcars)
attach(mtcars)
cilindros <- factor(cyl)
resAOV <- aov(mpg~cilindros)
summary(res.AOV)
boxplot(mpg~cilindros,xlab="Número de cilindros")
aggregate(mpg~cilindros, data=mtcars,
function(x) round(c(mean = mean(x), sd = sd(x)), 2))
residuos <- resid(resAOV)
qqnorm(residuos)
qqline(residuos)
shapiro.test(residuos)
tukeyHSD(resAOV)

You may also like...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *