ANOVA de una vía en R
Introducción
- En el análisis de varianza (ANOVA), cuando hablamos de vías, nos referimos al número de factores que estamos considerando.
- Recuerda que un factor es una variable categórica que define las diferentes categorías o niveles de un experimento. Por ejemplo, en un estudio sobre el efecto de diferentes tipos de fertilizantes en el crecimiento de plantas, el factor sería el tipo de fertilizante.
- Nuestro objetivo es determinar si las medias de los grupos son estadísticamente diferentes entre sí.
Datos
- Vamos a utilizar los datos del paquete
datos
llamadosdiamantes
. Estos datos contienen información sobre el precio de los diamantes en función de diferentes características.
Pregunta de investigación e hipótesis
- Queremos saber si hay diferencias significativas en el precio (variable
precio
) de los diamantes en función de la corte (variablecorte
) de los mismos. - La hipótesis nula (\(H_0\)) es que no hay diferencias significativas en el precio de los diamantes en función de la corte.
- La hipótesis alternativa (\(H_1\)) es que hay diferencias significativas en el precio de los diamantes en función de la corte.
Visualización preliminar
- Antes de realizar el ANOVA, es útil visualizar los datos para tener una idea de cómo se distribuyen.
Supuestos del ANOVA
- antes de realizar un ANOVA, es importante verificar que se cumplan los siguientes supuestos:
- Normalidad: los residuos deben seguir una distribución normal.
- Homogeneidad de varianzas: los grupos deben tener varianzas similares.
- Independencia: las observaciones deben ser independientes entre sí.
Normalidad
- Podemos verificar la normalidad de los residuos utilizando la prueba de Shapiro-Wilk y/o con un gráfico Q-Q.
- De acuerdo al teorema del límite central, el ANOVA es robusto a la violación de la normalidad si el tamaño de la muestra es grande (n > 30).
- En nuestros datos, tenemos una
n > 5000
, por lo que no es necesario que los datos sigan una distribución normal. - De hecho, si intentas usar la prueba de Shapiro-Wilk, obtendrás un error debido al tamaño de la muestra.
El método visual parece indicar que los datos no siguen una distribución normal. Sin embargo, debido al tamaño de la muestra, no es necesario que los datos sigan una distribución normal para realizar un ANOVA. Sin embargo, más adelante veremos qué hacer si los datos no siguen una distribución normal.
Homogeneidad de varianzas
- Podemos verificar la homogeneidad de varianzas utilizando la prueba de Levene.
- \(H_0\): Las varianzas son iguales.
- \(H_1\): Al menos una de las varianzas es diferente.
- Para esto, necesitamos instalar y cargar el paquete
car
, el cual contiene la funciónleveneTest()
.
Como vemos, no se cumplen los supuestos de normalidad y homogeneidad de varianzas. Sin embargo, debido al tamaño de la muestra, podemos proceder con el ANOVA, aunque los resultados pueden no ser confiables y debes reportar en tu tesis/artículo que no se cumplen los supuestos. En la siguiente lección veremos qué hacer si no se cumplen los supuestos. Por el momento, vamos a realizar el ANOVA.
ANOVA de una vía
- Para realizar el ANOVA, tenemos varias formas de hacerlo:
- Usando la función
aov()
, la cual es parte del paquete base de R. - Usando la función
lm()
(modelo lineal). Como ya vimos en el curso, el ANOVA es una forma especial de regresión lineal. Por lo tanto, podemos usarlm()
para realizar un ANOVA. - Con la función
ezANOVA()
del paqueteez
. Esta función es útil para realizar ANOVAs de una manera más sencilla y rápida.
- Usando la función
- Vamos a ver los 3 ejemplos anteriores.
Usando aov()
- La función
aov()
es la forma más común de realizar un ANOVA en R. - La sintaxis es
aov(y ~ x, data = df)
, dondey
es la variable dependiente,x
es la variable independiente ydf
es el conjunto de datos. - Para obtener un resumen del ANOVA, usamos la función
summary()
. - Vamos a realizar el ANOVA con la variable
precio
como variable dependiente ycorte
como variable independiente.
Usando lm()
- Como mencionamos anteriormente, el ANOVA es una forma especial de regresión lineal. Por lo tanto, podemos usar la función
lm()
para realizar un ANOVA. - La sintaxis es similar a la de
aov()
, pero en lugar de usaraov()
, usamoslm()
. - Para obtener un resumen del ANOVA, usamos la función
anova()
. Observa que NO usamosaov()
, sinoanova()
. - La ventaja de usar
lm()
es que podemos obtener más información sobre el modelo con la funciónsummary()
. Observa que el valor F y el valor p son los mismos que en el ANOVA conaov()
.
Usando ezANOVA()
- Para usar
ezANOVA()
, primero necesitamos instalar y cargar el paqueteez
. - En un principio, parece que este método es más complejo que los anteriores, debido a que:
- Debemos especificar la variable dependiente (
dv
), la variable independiente (between
) y la variable de agrupamiento (wid
). En este caso, no tenemos una variable de agrupamiento, por lo que tenemos que crearla. - Sin embargo, cuando veamos diseños más complejos, como ANOVAs de dos vías, ANOVA mixtos, ANOVA de medidas repetidas, etc.,
ezANOVA()
será más fácil de usar.
- Debemos especificar la variable dependiente (
- Aunque el valor de F calculado con los 3 métodos es idéntico, el valor p es más detallado en
ezANOVA()
.
Vamos a ver qué significa el código anterior y la salida:
- Primero, instalamos y cargamos el paquete
ez
. - Luego, nos aseguramos que
diamantes
sea un data frame y quecorte
sea un factor. Esto es necesario paraezANOVA()
y que no haya errores. - Luego, creamos un identificador único para cada observación en
diamantes
. Esto es necesario paraezANOVA()
. En los diseños más complejos, es importante identificar si hay observaciones pareadas o emparejadas (p. ej., mediciones en el mismo sujeto en diferentes momentos). - Después, usamos
ezANOVA()
para realizar el ANOVA.data
: El conjunto de datos.dv
: La variable dependiente (precio
).wid
: El identificador único para cada observación.between
: La variable independiente (corte
).- Ojo: En el contexto de ANOVA, las variables pueden ser clasificadas como between-subjects o within-subjects, y cada una se utiliza en diferentes diseños experimentales.
- Between-Subjects: Cada grupo de participantes o unidades experimentales está expuesto a un solo nivel de la variable independiente. Los comparaciones se hacen entre grupos. Ejemplo: En un estudio de medicamentos, un grupo recibe el medicamento y otro grupo recibe un placebo. Cada participante está en un solo grupo. Between-Subjects: Se enfoca en variabilidad entre grupos diferentes.
- Within-Subjects: Las mismas unidades experimentales están expuestas a todos los niveles de la variable independiente. Las comparaciones se hacen dentro de los mismos sujetos o unidades. Las variables within-subjects son más comunes en estudios que involucran medidas repetidas sobre las mismas unidades. Within-Subjects: Se enfoca en variabilidad dentro del mismo grupo a través de condiciones.
- Hay modelos que incoporan ambos tipos de variables, como ANOVA de medidas repetidas, ANOVA mixtos, etc. Se verán en lecciones posteriores.
type = 3
: Especifica el tipo de ANOVA. El tipo 3 es el tipo de sumas de cuadrados más comúnmente usado en ANOVA y se recomienda cuando tienes un diseño no balanceado (es decir, diferentes tamaños de muestra en cada grupo, que suele ser el caso en la mayoría de los experimentos).
- Finalmente, mostramos los resultados.
- La salida de
ezANOVA()
es similar a la deaov()
, pero con un formato más fácil de leer. - En este caso, el valor p es menor que 0.05, lo que indica que hay diferencias significativas en el precio de los diamantes en función de la corte.
Gráficos informativos
Boxplot y p-value del ANOVA
Gráfico de barras con comparaciones múltiples
- En el gráfico anterior, vimos que hay diferencias significativas en el precio de los diamantes en función de la corte (de acuerdo al ANOVA).
- Para ver cuáles son las diferencias significativas entre los niveles de corte, podemos realizar comparaciones múltiples.
- Como estamos realizando múltiples comparaciones, es importante ajustar el nivel de significancia para evitar falsos positivos. Una forma común de hacer esto es con el método de Tukey, o el método de Bonferroni (no recomendado para más de 3 comparaciones), el método de Holm-Bonferroni, etc. Por el momento, no vamos a ajustar el nivel de significancia. Esto se verá en las proximas lecciones.
- Podemos hacer las comparaciones de distintas formas: comparar cada posible par de niveles, comparar cada nivel con un nivel de referencia, etc. Por simplicidad, vamos a comparar cada nivel con el nivel de referencia (corte Ideal). Esto se hace con la función
stat_compare_means()
y especificando el método comot.test
y el grupo de referencia comoIdeal
. Como resultado, obtendremos las diferencias significativas entre los niveles de corte vs el nivel de referencia “Ideal”.
- Podemos hacer las comparaciones de distintas formas: comparar cada posible par de niveles, comparar cada nivel con un nivel de referencia, etc. Por simplicidad, vamos a comparar cada nivel con el nivel de referencia (corte Ideal). Esto se hace con la función
En las siguientes lecciones, veremos cómo realizar el ANOVA, el gráfico, y las comparaciones múltiples en un solo paso con la función anova_test()
del paquete rstatix
. Esta función es muy similar a ezANOVA()
, pero es un poco más fácil de usar en los gráficos.