==========================================================

1. Instalación y carga de paquetes necesarios

==========================================================

Instalar paquetes necesarios si no están instalados

if (!requireNamespace(“tidyverse”, quietly = TRUE)) install.packages(“tidyverse”) if (!requireNamespace(“car”, quietly = TRUE)) install.packages(“car”) if (!requireNamespace(“FSA”, quietly = TRUE)) install.packages(“FSA”)

Cargar los paquetes

library(tidyverse) # Incluye ggplot2, dplyr, tidyr library(car) # Para la prueba de Levene library(FSA) # Para la prueba post-hoc Dunn

==========================================================

2. Creación y preparación de datos

==========================================================

Crear el marco de datos con los IMC de las localidades

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))

Verificar los datos iniciales

print(“Datos iniciales:”) print(datos)

Filtrar columnas constantes (excluir localidades sin variación)

datos_filtrados <- datos[, sapply(datos, function(x) length(unique(x)) > 1)] print(“Datos filtrados (sin columnas constantes):”) print(datos_filtrados)

Transformar los datos al formato largo

datos_largos <- pivot_longer(datos_filtrados, cols = everything(), names_to = “Grupo”, values_to = “IMC”) print(“Datos en formato largo:”) print(head(datos_largos))

==========================================================

3. Pruebas de normalidad

==========================================================

Prueba de Shapiro-Wilk para cada localidad

shapiro_results <- sapply(datos_filtrados, function(x) shapiro.test(x)$p.value) print(“Resultados de la prueba de Shapiro-Wilk:”) print(shapiro_results)

Gráficos QQ para visualizar la normalidad

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”) })

==========================================================

4. Pruebas de homocedasticidad

==========================================================

Prueba de Levene para evaluar igualdad de varianzas

levene_test <- leveneTest(IMC ~ Grupo, data = datos_largos) print(“Resultados de la prueba de Levene:”) print(levene_test)

Visualización con boxplot

boxplot(IMC ~ Grupo, data = datos_largos, main = “Boxplot de IMC por Localidades”, col = rainbow(4))

==========================================================

5. Comparación entre grupos: Kruskal-Wallis

==========================================================

Prueba de Kruskal-Wallis

kruskal_test <- kruskal.test(IMC ~ Grupo, data = datos_largos) print(“Resultados de la prueba de Kruskal-Wallis:”) print(kruskal_test)

Prueba post-hoc Dunn si hay diferencias significativas

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) }

Visualización de diferencias con boxplot

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()

==========================================================

6. Regresión y análisis de residuos

==========================================================

Seleccionar las variables para la regresión

x <- datos_filtrados\(Sayula # Variable independiente y <- datos_filtrados\)Gomez_Farias # Variable dependiente

Ajustar el modelo de regresión lineal

modelo <- lm(y ~ x) summary(modelo) # Resumen del modelo

Gráfico de dispersión con línea de regresión

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

Análisis de residuos: Residuos vs valores ajustados

plot(modelo\(fitted.values, modelo\)residuals, main = “Residuos vs Valores Ajustados”, xlab = “Valores Ajustados”, ylab = “Residuos”) abline(h = 0, col = “red”, lty = 2)

Análisis de residuos: QQ plot

qqnorm(modelo\(residuals, main = "QQ Plot de Residuos") qqline(modelo\)residuals, col = “red”)

Estadísticas de los residuos

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.