En un estudio poblacional de corte transversal se evaluaron medidas antopométricas y niveles de presión arterial sistólica en una muestra representativ. De acuerdo al índice de masa corporal se definieron tres grupos de adiposidad así:
Normal (< 25 kg/m^2)
Sobrepeso (25 - 29.9 kg/m^2)
Obesidad (>= 30 kg/m^2)
Los datos de dicho estudio se presentan en la tabla a continuación (los valores en las celdas correspondientes a la presión arterial sistólica de los individuos):
individuo <- c(1,2,3,4,5)
normal <- c(120,110,115,110,125)
sobrepeso <- c(115,130,135,125,120)
obesidad <- c(130,125,140,135,130)
tabla_salud <- data.frame(normal, sobrepeso, obesidad)
print(tabla_salud)
## normal sobrepeso obesidad
## 1 120 115 130
## 2 110 130 125
## 3 115 135 140
## 4 110 125 135
## 5 125 120 130
summary(normal)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 110 110 115 116 120 125
summary(sobrepeso)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 115 120 125 125 130 135
summary(obesidad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 125 130 130 132 135 140
# Creamos un vector con todos los datos:
medias <- c(mean(normal), mean(sobrepeso), mean(obesidad))
pesos <- c(normal, sobrepeso, obesidad)
grupo <- c(rep("Normal", 5), rep("Sobrepeso", 5), rep("Obesidad", 5))
grupo <- factor(grupo, levels = c("Normal", "Sobrepeso", "Obesidad"))
# Dibujamos el diagrama de cajas:
boxplot(pesos~grupo,
col = c("lightblue", "lightgreen", "orange"),
main = "Presión por Grupo de Peso")
# Dibujamos las medias en cada caja:
points(1:3, medias, pch = 19, col = "red", cex = 1.2)
Podemos ver que no hay una superposición clara entre las cajas de cada grupo, lo que nos puede dar un indicio de diferencia de medias. No hay presencia de valores atípicos en ninguno de los tres grupos de datos.
El grupo de “Sobrepeso” tiene una menor variabilidad en sus datos que los grupos de “Normal” y “Obesidad”, los cuáles presentan una variabilidad en sus datos similar. Los grupos “Normal” y “Obesidad” tienen una leve asímetria positiva en sus datos, estando sus medias de 1 a 2 puntos por encima de la mediana. Por otro lado, el grupo “Sobrepeso” tiene una distribución completamente simétrica con su media y mediana iguales.
# ANÁLISIS DE SUPUESTOS
# Pruebas de normalidad:
shapiro.test(normal)
##
## Shapiro-Wilk normality test
##
## data: normal
## W = 0.90202, p-value = 0.4211
shapiro.test(sobrepeso)
##
## Shapiro-Wilk normality test
##
## data: sobrepeso
## W = 0.98676, p-value = 0.9672
shapiro.test(obesidad)
##
## Shapiro-Wilk normality test
##
## data: obesidad
## W = 0.96086, p-value = 0.814
Como podemos ver, el p-value de la spruebas de cada grupo fueron mayores a 0.05. Por lo tanto, todos los grupos presentan una distribución normal y podemos utilizar ANOVA para probar la diferencia de medias entre los grupos.
# Prueba de igualdad de varianzas:
library(car)
## Loading required package: carData
leveneTest(pesos, grupo)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 0.3158 0.7351
## 12
El p-value > 0.05, por tanto los grupos presentan igualdad en sus varianzas y ésta no tiene un impacto significativo en nuestra prueba de ANOVA.
# CONSTRUCCIÓN DE LA TABLA ANOVA
# Calculamos las sumatorias:
k <- 3
n <- 5
N <- n*3
X <- sum(mean(normal), mean(sobrepeso), mean(obesidad))
T1 <- sum(normal)
T2 <- sum(sobrepeso)
T3 <- sum(obesidad)
Ttotal <- sum(T1, T2, T3)
# SSA:
v1 <- c((T1^2/n), (T2^2/n), (T3^2/n))
ssa <- sum(v1) - (Ttotal^2/N)
print(ssa)
## [1] 643.3333
# SSE:
sse <- 0
for (i in 1:k) {
suma_interna <- 0
for (j in 1:n) {
indice <- (i - 1) * n + j
v <- (pesos[indice] - medias[i])^2
suma_interna = suma_interna + v
}
sse <- sse + suma_interna
}
print(sse)
## [1] 550
# SST:
sst <- ssa + sse
print(sst)
## [1] 1193.333
# MSA:
MSA <- ssa/(k-1)
print(MSA)
## [1] 321.6667
# MSE:
MSE <- sse/(N-k)
print(MSE)
## [1] 45.83333
# Razon F:
razon_F <- MSA/MSE
print(razon_F)
## [1] 7.018182
# Cálculo de ANOVA computacionalmente:
anova <- aov(pesos~grupo)
summary(anova)
## Df Sum Sq Mean Sq F value Pr(>F)
## grupo 2 643.3 321.7 7.018 0.00959 **
## Residuals 12 550.0 45.8
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Como podemos evidenciar, tanto en el método manual como en el computacional, p-value = 7.018. Entonces, p-value > 0.05 y por tanto no se rechaza la hipótesis nula, lo que implica que no existe diferencia entre las medidas antropométricas y los niveles de presión arterial medios entre los grupos con índices de masa corporal “Normal”, “Sobrepeso” y “Obesidad”.
fuente_variacion <- c("Entre", "Intra", "Total")
suma_cuadrados <- c("SSA = 643.3333", "SSE = 550", "SST = 1193.333")
grados_libertad <- c("k-1 = 2", "N-k = 12", "N-1 = 14")
cuadrado_medio <- c("MSA = 321.6667", "MSE = 45.83333", 0)
razon_f <- c("Razón F = 7.018", 0, 0)
p_value <- c("P-value = 7.018", 0, 0)
tabla_anova <- data.frame(fuente_variacion, suma_cuadrados, grados_libertad, cuadrado_medio, razon_f, p_value)
library(knitr)
kable(tabla_anova,
col.names = c("Fuente de variación", "Suma de cuadrados", "gl", "Media de cuadrados", "F", "P"),
align = "c")
| Fuente de variación | Suma de cuadrados | gl | Media de cuadrados | F | P |
|---|---|---|---|---|---|
| Entre | SSA = 643.3333 | k-1 = 2 | MSA = 321.6667 | Razón F = 7.018 | P-value = 7.018 |
| Intra | SSE = 550 | N-k = 12 | MSE = 45.83333 | 0 | 0 |
| Total | SST = 1193.333 | N-1 = 14 | 0 | 0 | 0 |
Ahora, los investigadores del mismo estudio consideraron la posibilidad que los niveles de presión arterial podrían ser influenciados por el nivel de actividad física. Por tal razón, aplicaron el IPAQ (International Physical Activity Questionnaire) con base en sus resultados clasificaron a cada uno de los participantes como sedentarios o no sedentarios.
Los datos se ven a continuación:
normal_s <- c(110, 105, 115, 110, 120)