La Anova de una vía, también conocida como análisis de varianza de una vía, es una técnica estadística utilizada para comparar las medias de tres o más grupos independientes. Se utiliza para determinar si existe una diferencia significativa entre los grupos en términos de una variable dependiente continua.
En la Anova de una vía, se plantea una hipótesis nula en la que se asume que no hay diferencias entre las medias de los grupos, y se busca evidencia estadística para rechazar esta hipótesis en favor de una hipótesis alternativa que sugiere que al menos un grupo tiene una media diferente.
El análisis de varianza se basa en la descomposición de la variabilidad total de los datos en dos componentes: la variabilidad debida a las diferencias entre los grupos (variabilidad entre grupos) y la variabilidad debida a las diferencias dentro de los grupos (variabilidad dentro de grupos). Si la variabilidad entre grupos es significativamente mayor que la variabilidad dentro de grupos, se concluye que existen diferencias entre los grupos.
El resultado principal del análisis de varianza es el valor de p, que indica la probabilidad de obtener una diferencia entre las medias de los grupos igual o más extrema que la observada, asumiendo que la hipótesis nula es cierta. Si el valor de p es menor que un umbral predefinido (generalmente 0,05), se rechaza la hipótesis nula y se concluye que hay diferencias significativas entre al menos dos grupos.
En resumen, la Anova de una vía es una técnica estadística utilizada para comparar las medias de tres o más grupos independientes y determinar si hay diferencias significativas entre ellos.
En primer lugar, cargaremos los datos en formato de dataframe. Supongamos que tenemos un conjunto de datos con una variable dependiente llamada ‘variable_dependiente’ y una variable independiente llamada ‘grupo’.
La descomposición de la varianza en el ANOVA a una vía se realiza dividiendo la suma de cuadrados total (SCT) en tres componentes: suma de cuadrados entre grupos (SCG), suma de cuadrados dentro de grupos (SCD), y suma de cuadrados total (SCT).
La fórmula general es la siguiente:
SCT = SCG + SCD
Donde:
SCT = {i=1}^{k} {j=1}^{n_i} (X_{ij} - {X})^2
donde k es el número de grupos, n_i es el número de observaciones en el grupo i, X_{ij} es el valor de la observación j en el grupo i, y {X} es la media general de todas las observaciones.
SCG = _{i=1}^{k} n_i ({X}_i - {X})^2
donde n_i es el número de observaciones en el grupo i, {X}_i es la media del grupo i, y {X} es la media general de todas las observaciones.
SCD = {i=1}^{k} {j=1}^{n_i} (X_{ij} - {X}_i)^2
donde n_i es el número de observaciones en el grupo i, X_{ij} es el valor de la observación j en el grupo i, y {X}_i es la media del grupo i.
# Carga de los datos
datos <- data.frame(
variable_dependiente = c(10, 12, 8, 15, 11, 9, 14, 13, 10, 12),
grupo = factor(c("A", "A", "A", "B", "B", "B", "C", "C", "C", "C"))
)
A continuación, realizaremos la descomposición de la varianza para obtener la suma de cuadrados total (SCT), la suma de cuadrados entre grupos (SCG) y la suma de cuadrados dentro de los grupos (SCD).
# Descomposición de la varianza
media_total <- mean(datos$variable_dependiente) # Media total
SCT <- sum((datos$variable_dependiente - media_total)^2) # Suma de cuadrados total
media_grupos <- tapply(datos$variable_dependiente, datos$grupo, mean) # Medias por grupo
SCG <- sum((media_grupos - media_total)^2 * table(datos$grupo)) # Suma de cuadrados entre grupos
n <- table(datos$grupo) # Tamaños de los grupos
SCD <- SCT - SCG # Suma de cuadrados dentro de los grupos
A continuación, construiremos la tabla ANOVA para analizar la significancia de las diferencias entre los grupos.
# Tabla ANOVA
n_grupos <- length(unique(datos$grupo)) # Número de grupos
n_total <- length(datos$variable_dependiente) # Tamaño total de la muestra
grados_libertad_grupos <- n_grupos - 1 # Grados de libertad entre grupos
grados_libertad_error <- n_total - n_grupos # Grados de libertad dentro de los grupos
grados_libertad_total <- n_total - 1 # Grados de libertad total
MSG <- SCG / grados_libertad_grupos # Media de cuadrados entre grupos
MSE <- SCD / grados_libertad_error # Media de cuadrados dentro de los grupos
F <- MSG / MSE # Estadístico F
p_valor <- pf(F, grados_libertad_grupos, grados_libertad_error, lower.tail = FALSE) # Valor p
# Construcción de la tabla ANOVA
tabla_anova <- data.frame(
Fuente = c("Entre grupos", "Dentro de los grupos", "Total"),
Sums_de_cuadrados = c(SCG, SCD, SCT),
Grados_de_libertad = c(grados_libertad_grupos, grados_libertad_error, grados_libertad_total),
Media_de_cuadrados = c(MSG, MSE, NA),
Valor_F = c(F, NA, NA),
Valor_p = c(p_valor, NA, NA)
)
tabla_anova
## Fuente Sums_de_cuadrados Grados_de_libertad Media_de_cuadrados
## 1 Entre grupos 8.983333 2 4.491667
## 2 Dentro de los grupos 35.416667 7 5.059524
## 3 Total 44.400000 9 NA
## Valor_F Valor_p
## 1 0.8877647 0.4533008
## 2 NA NA
## 3 NA NA
¡Listo! El código anterior calculará la descomposición de la varianza y generará la tabla ANOVA para el análisis de varianza de una vía. Solo asegúrate de reemplazar los nombres de las variables y los datos de ejemplo por tus propios datos.
La tabla ANOVA mostrará la suma de cuadrados (Sums_de_cuadrados), los grados de libertad (Grados_de_libertad), la media de cuadrados (Media_de_cuadrados) y el estadístico F y valor p (Valor_F y Valor_p) para determinar la significancia de las diferencias entre los grupos.
Recuerda que el valor p indicará si hay diferencias significativas entre los grupos. Si el valor p es menor que un umbral predefinido (generalmente 0.05), se rechaza la hipótesis nula y se concluye que existen diferencias significativas entre al menos dos grupos.
Cuando se realiza un análisis de varianza de una vía y se obtiene un resultado significativo, es posible que desees realizar pruebas de comparación múltiple para determinar qué grupos difieren entre sí. Existen diferentes métodos para llevar a cabo estas pruebas, algunos de los más comunes son:
Prueba de Tukey: Esta prueba compara todas las combinaciones posibles de pares de grupos y proporciona intervalos de confianza ajustados para las diferencias entre las medias de los grupos. Es una prueba conservadora que controla la tasa de error familiar.
Prueba de Bonferroni: Esta prueba ajusta el nivel de significancia dividiendo el nivel de significancia deseado por el número total de comparaciones. Por lo tanto, se realiza una corrección para controlar el error tipo I global. Es una prueba más conservadora pero simple de aplicar.
Prueba de Scheffé: Esta prueba también compara todas las combinaciones posibles de pares de grupos, pero utiliza una estimación más precisa de la varianza de error. Proporciona un control estricto del error tipo I, pero puede ser menos potente en comparación con otras pruebas.
Prueba de Dunnett: Esta prueba se utiliza cuando se tiene un grupo de control y se desea comparar los demás grupos con este grupo de control. Compara cada grupo con el grupo de control y ajusta el nivel de significancia.
Estas son solo algunas de las pruebas de comparación múltiple disponibles. La elección de la prueba dependerá de tus necesidades y del contexto específico de tu estudio. Es importante tener en cuenta que al realizar múltiples comparaciones, existe un mayor riesgo de obtener falsos positivos, por lo que es fundamental ajustar el nivel de significancia para controlar este error.
En R, puedes realizar pruebas de comparación múltiple utilizando funciones específicas de cada prueba. Por ejemplo, para la prueba de Tukey, puedes utilizar la función TukeyHSD() del paquete stats, y para la prueba de Bonferroni, puedes utilizar la función pairwise.t.test() con el argumento p.adjust.method establecido en “bonferroni”. Para otras pruebas, como Scheffé o Dunnett, también hay funciones disponibles en R.
# Carga de los datos (usando los datos de ejemplo anteriores)
datos <- data.frame(
variable_dependiente = c(10, 12, 8, 15, 11, 9, 14, 13, 10, 12),
grupo = factor(c("A", "A", "A", "B", "B", "B", "C", "C", "C", "C"))
)
# Análisis de varianza de una vía
modelo <- aov(variable_dependiente ~ grupo, data = datos)
resultado_anova <- summary(modelo)
# Prueba de Tukey
tukey <- TukeyHSD(modelo)
tukey
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = variable_dependiente ~ grupo, data = datos)
##
## $grupo
## diff lwr upr p adj
## B-A 1.6666667 -3.742160 7.075494 0.6530359
## C-A 2.2500000 -2.809494 7.309494 0.4341174
## C-B 0.5833333 -4.476161 5.642828 0.9389665
Supuesto de normalidad: Este supuesto establece que las distribuciones de los valores dentro de cada grupo siguen una distribución normal. Es decir, los valores en cada grupo deben aproximarse a una distribución de campana simétrica. La normalidad es importante porque muchos métodos estadísticos asumen esta distribución para realizar inferencias válidas. La normalidad se puede evaluar gráficamente mediante histogramas, gráficos de cuantiles o gráficos Q-Q, así como mediante pruebas estadísticas como la prueba de Shapiro-Wilk o la prueba de Kolmogorov-Smirnov.
Supuesto de homogeneidad de varianzas: Este supuesto establece que las varianzas de los valores en todos los grupos son iguales. En otras palabras, las dispersiones de los datos deben ser similares en cada grupo. La homogeneidad de varianzas es importante porque el ANOVA se basa en la comparación de las varianzas entre grupos para evaluar si hay diferencias significativas. Se pueden utilizar gráficos de dispersión o pruebas estadísticas como la prueba de Levene o la prueba de Bartlett para evaluar la homogeneidad de varianzas.
Supuesto de independencia: Este supuesto establece que las observaciones dentro de cada grupo son independientes entre sí. Es decir, los valores en un grupo no deben estar influenciados por los valores en otros grupos. La independencia es importante para garantizar que las comparaciones entre grupos sean válidas y no estén sesgadas por la dependencia entre observaciones. Por ejemplo, en un estudio de tratamiento médico, se espera que las respuestas de los pacientes sean independientes entre sí y no estén influenciadas por las respuestas de otros pacientes. No existe una forma directa de probar la independencia, pero se asume en la mayoría de los casos.
El paquete lmtest es una biblioteca en R que proporciona una serie de funciones y pruebas estadísticas para el análisis de modelos de regresión lineal. Este paquete es ampliamente utilizado para realizar pruebas de hipótesis, diagnósticos y evaluaciones de supuestos en modelos de regresión.
Algunas de las funciones y pruebas más destacadas disponibles en el paquete lmtest son las siguientes:
Prueba de White para heteroscedasticidad: La función bptest() permite realizar la prueba de White, que evalúa la presencia de heteroscedasticidad en un modelo de regresión. Esta prueba es útil para verificar si la variabilidad de los errores no es constante en todas las observaciones.
Prueba de Breusch-Pagan para heteroscedasticidad: La función bptest() también permite realizar la prueba de Breusch-Pagan, que es otra prueba comúnmente utilizada para evaluar la heteroscedasticidad en un modelo de regresión.
Prueba de Durbin-Watson para autocorrelación: La función dwtest() se utiliza para realizar la prueba de Durbin-Watson, que evalúa la presencia de autocorrelación de primer orden en los residuos de un modelo de regresión. Esta prueba es útil para detectar la dependencia entre los errores consecutivos.
Prueba de Ramsey RESET: La función resettest() permite realizar la prueba de Ramsey RESET, que evalúa la especificación funcional de un modelo de regresión. Esta prueba verifica si existe alguna relación no lineal entre las variables explicativas y los residuos del modelo.
Estas son solo algunas de las funciones y pruebas disponibles en el paquete lmtest. El paquete también proporciona otras herramientas útiles para realizar diagnósticos y evaluaciones de supuestos en modelos lineales, note que el modelo ANOVA es un modelo lineal.
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(nortest)
#NORMALIDAD
plot(density(modelo$residuals))
# NORMALIDAD
lillie.test(modelo$residuals)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: modelo$residuals
## D = 0.14332, p-value = 0.8111
bptest(modelo)
##
## studentized Breusch-Pagan test
##
## data: modelo
## BP = 2.6859, df = 2, p-value = 0.2611
dwtest(modelo)
##
## Durbin-Watson test
##
## data: modelo
## DW = 2.8786, p-value = 0.8183
## alternative hypothesis: true autocorrelation is greater than 0