if (!requireNamespace(“tidyverse”, quietly = TRUE)) install.packages(“tidyverse”) if (!requireNamespace(“car”, quietly = TRUE)) install.packages(“car”) if (!requireNamespace(“FSA”, quietly = TRUE)) install.packages(“FSA”)
library(tidyverse) # Incluye ggplot2, dplyr, tidyr library(car) # Para la prueba de Levene library(FSA) # Para la prueba post-hoc Dunn
datos <- data.frame( Sayula = c(25, 25, 29, 27, 25, 29, 27, 25, 27, 29), Gomez_Farias = c(29, 25, 25, 29, 25, 25, 29, 25, 29, 25), Zacoalco = c(29, 29, 29, 29, 29, 29, 29, 29, 29, 29), # Sin variación Techaluta = c(27, 31, 27, 25, 27, 29, 27, 27, 27, 27))
print(“Datos iniciales:”) print(datos)
datos_filtrados <- datos[, sapply(datos, function(x) length(unique(x)) > 1)] print(“Datos filtrados (sin columnas constantes):”) print(datos_filtrados)
datos_largos <- pivot_longer(datos_filtrados, cols = everything(), names_to = “Grupo”, values_to = “IMC”) print(“Datos en formato largo:”) print(head(datos_largos))
shapiro_results <- sapply(datos_filtrados, function(x) shapiro.test(x)$p.value) print(“Resultados de la prueba de Shapiro-Wilk:”) print(shapiro_results)
par(mfrow = c(2, 2)) # Configurar una cuadrícula de gráficos lapply(names(datos_filtrados), function(col) { qqnorm(datos_filtrados[[col]], main = paste(“QQ Plot -”, col)) qqline(datos_filtrados[[col]], col = “red”) })
levene_test <- leveneTest(IMC ~ Grupo, data = datos_largos) print(“Resultados de la prueba de Levene:”) print(levene_test)
boxplot(IMC ~ Grupo, data = datos_largos, main = “Boxplot de IMC por Localidades”, col = rainbow(4))
kruskal_test <- kruskal.test(IMC ~ Grupo, data = datos_largos) print(“Resultados de la prueba de Kruskal-Wallis:”) print(kruskal_test)
if (kruskal_test$p.value <= 0.05) { posthoc <- dunnTest(IMC ~ Grupo, data = datos_largos, method = “bonferroni”) print(“Resultados de la prueba post-hoc Dunn:”) print(posthoc) }
ggplot(datos_largos, aes(x = Grupo, y = IMC, fill = Grupo)) + geom_boxplot() + labs(title = “Comparación de IMC entre Grupos”, x = “Grupo”, y = “IMC”) + theme_minimal()
x <- datos_filtrados\(Sayula # Variable independiente y <- datos_filtrados\)Gomez_Farias # Variable dependiente
modelo <- lm(y ~ x) summary(modelo) # Resumen del modelo
plot(x, y, main = “Regresión Lineal: Sayula vs Gomez_Farias”, xlab = “Sayula (IMC)”, ylab = “Gomez_Farias (IMC)”) abline(modelo, col = “red”) # Agregar la línea de regresión
plot(modelo\(fitted.values, modelo\)residuals, main = “Residuos vs Valores Ajustados”, xlab = “Valores Ajustados”, ylab = “Residuos”) abline(h = 0, col = “red”, lty = 2)
qqnorm(modelo\(residuals, main = "QQ Plot de Residuos") qqline(modelo\)residuals, col = “red”)
mean_residuos <- mean(modelo\(residuals) sd_residuos <- sd(modelo\)residuals) print(paste(“Media de los residuos:”, mean_residuos)) print(paste(“Desviación estándar de los residuos:”, sd_residuos)) #Prueba de normalidad: Los datos no son normales, lo que valida el uso de pruebas no paramétricas. #Prueba de homocedasticidad: Si las varianzas son homogéneas, se refuerza la validez del análisis. #Kruskal-Wallis: Si no hay diferencias significativas, se concluye que las localidades tienen medianas similares. Si hay diferencias, se identifican localidades específicas con post-hoc. #Regresión: Si el modelo tiene un 𝑅2R 2bajo, las localidades no están fuertemente relacionadas, y el modelo no es predictivo.