El presente informe desarrolla tres ejercicios de análisis de varianza (ANOVA) aplicados a conjuntos de datos de carácter biológico y ecológico, con el propósito de evaluar el efecto de factores ambientales y antrópicos sobre variables de respuesta continuas. Los tres puntos —biomasa vegetal frente a propiedades edáficas, consumo de oxígeno en moluscos frente a la salinidad del medio, y diversidad de anfibios frente al uso del suelo— se abordan bajo una misma estructura metodológica, descrita a continuación, con el fin de garantizar la comparabilidad y el rigor estadístico de los resultados.
El objetivo general de este trabajo es evaluar el comportamiento de variables biológicas y ecológicas sometidas a factores ambientales y antrópicos mediante modelos de Análisis de Varianza (ANOVA). Para cada uno de los tres puntos abordados se sigue la misma secuencia metodológica:
Se dispone de una matriz de datos integrada por 45 observaciones edáficas, en la cual se evalúan cuatro propiedades fisicoquímicas del suelo (pH, Salinidad, Zinc y Potasio) como covariables, registrando además la Biomasa (en gramos) desarrollada por una cobertura vegetal forrajera autóctona como variable dependiente.
Se efectúa la importación de la base de datos
Salinidad.RData, procediendo con la inspección estructural
del conjunto de datos numéricos y la construcción de tablas descriptivas
junto a diagramas de frecuencia, con el fin de determinar los patrones
de distribución individual de cada variable.
load("Salinidad.RData")
# Función estandarizada de resumen univariado (reutilizable en los 3 puntos)
resumen_univariado <- function(datos) {
datos %>%
select(where(is.numeric)) %>%
pivot_longer(cols = everything(), names_to = "Variable", values_to = "Valor") %>%
group_by(Variable) %>%
summarise(
N = n(),
Media = mean(Valor, na.rm = TRUE),
Mediana = median(Valor, na.rm = TRUE),
Desv_Std = sd(Valor, na.rm = TRUE),
CV_pct = (sd(Valor, na.rm = TRUE) / mean(Valor, na.rm = TRUE)) * 100,
Minimo = min(Valor, na.rm = TRUE),
Maximo = max(Valor, na.rm = TRUE),
.groups = "drop"
)
}
tabla_p1_univariado <- resumen_univariado(Salinidad)
kable(tabla_p1_univariado, digits = 2,
caption = "Tabla 1. Estadísticos descriptivos univariados — Punto 1 (Salinidad)")| Variable | N | Media | Mediana | Desv_Std | CV_pct | Minimo | Maximo |
|---|---|---|---|---|---|---|---|
| Biomasa | 45 | 1082.17 | 991.83 | 546.29 | 50.48 | 369.82 | 2337.33 |
| Potasio | 45 | 797.38 | 773.30 | 297.58 | 37.32 | 350.73 | 1441.67 |
| Salinidad | 45 | 30.27 | 30.00 | 3.72 | 12.29 | 24.00 | 38.00 |
| Zinc | 45 | 17.83 | 19.24 | 8.27 | 46.40 | 0.21 | 31.29 |
| pH | 45 | 4.61 | 4.45 | 1.25 | 27.22 | 3.20 | 7.45 |
# Gráficos de distribución univariada
g_bio <- ggplot(Salinidad, aes(x = Biomasa)) +
geom_histogram(fill = "#2c3e50", color = "white", bins = 10) +
labs(title = "Biomasa (g)", x = "Biomasa", y = "Frecuencia")
g_ph <- ggplot(Salinidad, aes(x = pH)) +
geom_histogram(fill = "#3498db", color = "white", bins = 10) +
labs(title = "pH", x = "pH", y = "Frecuencia")
g_sal <- ggplot(Salinidad, aes(x = Salinidad)) +
geom_histogram(fill = "#16a085", color = "white", bins = 10) +
labs(title = "Salinidad", x = "Salinidad", y = "Frecuencia")
g_zn <- ggplot(Salinidad, aes(x = Zinc)) +
geom_histogram(fill = "#f39c12", color = "white", bins = 10) +
labs(title = "Zinc", x = "Zinc", y = "Frecuencia")
g_k <- ggplot(Salinidad, aes(x = Potasio)) +
geom_histogram(fill = "#8e44ad", color = "white", bins = 10) +
labs(title = "Potasio", x = "Potasio", y = "Frecuencia")
(g_bio + g_ph + g_sal) / (g_zn + g_k + plot_spacer())Se observa que la variable Biomasa exhibe un comportamiento simétrico y una distribución continua en sus datos. Así mismo, las propiedades fisicoquímicas evaluadas en la matriz edáfica presentan coeficientes de variación coherentes con los estándares usuales para mediciones en campo, descartando la presencia de atipicidades extremas o sesgos marcados.
Con el fin de identificar la covariable edáfica (pH, Salinidad o Zinc) que posee la asociación lineal más determinante con respecto a la respuesta de Biomasa, se estima la matriz de coeficientes de correlación de Pearson, seleccionando la relación de mayor magnitud absoluta.
# Coeficientes de correlación de Pearson con Biomasa
cor_ph <- cor(Salinidad$Biomasa, Salinidad$pH, use = "complete.obs")
cor_sal <- cor(Salinidad$Biomasa, Salinidad$Salinidad, use = "complete.obs")
cor_zn <- cor(Salinidad$Biomasa, Salinidad$Zinc, use = "complete.obs")
tabla_correlaciones <- data.frame(
Covariable = c("pH", "Salinidad", "Zinc"),
Correlacion_Pearson = c(cor_ph, cor_sal, cor_zn)
)
kable(tabla_correlaciones, digits = 3,
caption = "Tabla 2. Coeficientes de correlación de Pearson con Biomasa")| Covariable | Correlacion_Pearson |
|---|---|
| pH | 0.928 |
| Salinidad | -0.067 |
| Zinc | -0.781 |
# Gráficos bivariados con línea de tendencia lineal
b_ph <- ggplot(Salinidad, aes(x = pH, y = Biomasa)) +
geom_point(color = "#3498db", size = 2) +
geom_smooth(method = "lm", se = TRUE, color = "black") +
labs(title = paste0("pH (r = ", round(cor_ph, 2), ")"))
b_sal <- ggplot(Salinidad, aes(x = Salinidad, y = Biomasa)) +
geom_point(color = "#16a085", size = 2) +
geom_smooth(method = "lm", se = TRUE, color = "black") +
labs(title = paste0("Salinidad (r = ", round(cor_sal, 2), ")"))
b_zn <- ggplot(Salinidad, aes(x = Zinc, y = Biomasa)) +
geom_point(color = "#f39c12", size = 2) +
geom_smooth(method = "lm", se = TRUE, color = "black") +
labs(title = paste0("Zinc (r = ", round(cor_zn, 2), ")"))
(b_ph + b_sal + b_zn)# Identificación automática de la variable con mayor grado de asociación lineal
var_seleccionada <- tabla_correlaciones$Covariable[which.max(abs(tabla_correlaciones$Correlacion_Pearson))]Resultados de la fase exploratoria: los coeficientes de correlación de Pearson obtenidos fueron pH = 0.928, Salinidad = -0.067 y Zinc = -0.781. La covariable con la asociación lineal más fuerte con la Biomasa es pH, por lo cual se selecciona como factor categórico para el modelo ANOVA de la siguiente fase.
La covariable edáfica seleccionada se convierte en un factor cualitativo categorizado en tres intervalos equivalentes basados en terciles (Bajo, Medio y Alto). Posteriormente se ejecuta el modelo ANOVA de un solo factor, se comprueba el cumplimiento de las premisas de normalidad en los residuales (Shapiro-Wilk) y homogeneidad de varianzas (Levene), y se finaliza con la comparación múltiple de medias mediante la prueba LSD de Fisher.
# 1. Categorización en tres grupos equidistantes por terciles
terciles_p1 <- quantile(Salinidad[[var_seleccionada]], probs = c(0, 1/3, 2/3, 1), na.rm = TRUE)
Salinidad$Nivel_Factor <- cut(
Salinidad[[var_seleccionada]],
breaks = terciles_p1,
include.lowest = TRUE,
labels = c("Bajo", "Medio", "Alto")
)
# 2. Ajuste del modelo ANOVA de una vía
modelo_p1 <- aov(Biomasa ~ Nivel_Factor, data = Salinidad)
anova_p1 <- summary(modelo_p1)[[1]]
kable(anova_p1, digits = 4, caption = "Tabla 3. Tabla ANOVA — Efecto de Nivel_Factor sobre Biomasa")| Df | Sum Sq | Mean Sq | F value | Pr(>F) | |
|---|---|---|---|---|---|
| Nivel_Factor | 2 | 7712683 | 3856341.6 | 29.8928 | 0 |
| Residuals | 42 | 5418235 | 129005.6 | NA | NA |
# 3. Evaluación formal de supuestos del modelo
residuales_p1 <- residuals(modelo_p1)
test_shapiro_p1 <- shapiro.test(residuales_p1)
test_levene_p1 <- leveneTest(Biomasa ~ Nivel_Factor, data = Salinidad)
# 4. Tabla consolidada de validación de supuestos
tabla_supuestos_p1 <- data.frame(
Supuesto = c("Normalidad (Shapiro-Wilk)", "Homocedasticidad (Levene)"),
Estadistico = c(test_shapiro_p1$statistic, test_levene_p1[1, "F value"]),
p_valor = c(test_shapiro_p1$p.value, test_levene_p1[1, "Pr(>F)"]),
Evaluacion = c(
ifelse(test_shapiro_p1$p.value > 0.05, "Cumple (p > 0.05)", "No cumple (p < 0.05)"),
ifelse(test_levene_p1[1, "Pr(>F)"] > 0.05, "Cumple (p > 0.05)", "No cumple (p < 0.05)")
)
)
kable(tabla_supuestos_p1, digits = 4, caption = "Tabla 4. Validación de supuestos — Punto 1")| Supuesto | Estadistico | p_valor | Evaluacion | |
|---|---|---|---|---|
| W | Normalidad (Shapiro-Wilk) | 0.9732 | 0.3749 | Cumple (p > 0.05) |
| Homocedasticidad (Levene) | 8.6753 | 0.0007 | No cumple (p < 0.05) |
# 4b. Prueba de robustez: si Levene señala heterocedasticidad, se
# complementa el ANOVA con la alternativa no paramétrica de
# Kruskal-Wallis (no exige varianzas iguales entre grupos)
test_kruskal_p1 <- kruskal.test(Biomasa ~ Nivel_Factor, data = Salinidad)
# 5. Prueba post-hoc LSD de Fisher para separación de medias
lsd_p1 <- LSD.test(modelo_p1, "Nivel_Factor", p.adj = "none", console = FALSE)
kable(lsd_p1$groups, digits = 3, caption = "Tabla 5. Prueba LSD de Fisher — Nivel_Factor")| Biomasa | groups | |
|---|---|---|
| Alto | 1605.385 | a |
| Medio | 1048.109 | b |
| Bajo | 593.023 | c |
# 6. Gráfica final del modelo con distribuciones por nivel
ggplot(Salinidad, aes(x = Nivel_Factor, y = Biomasa, fill = Nivel_Factor)) +
geom_boxplot(alpha = 0.7) +
geom_jitter(width = 0.1, alpha = 0.5, size = 2) +
scale_fill_brewer(palette = "Blues") +
labs(
title = paste("Biomasa Forrajera según el Nivel de", var_seleccionada),
x = paste("Nivel de", var_seleccionada),
y = "Biomasa (g)"
) +
theme(legend.position = "none")Interpretación de resultados — Punto 1: el modelo ANOVA indica que el factor Nivel de pH explica una proporción altamente significativa de la variabilidad de la Biomasa (F = 29.89; p = <0.001). Los residuales del modelo cumplen el supuesto de normalidad (Shapiro-Wilk: p = 0.375); sin embargo, la prueba de Levene detecta heterogeneidad significativa entre las varianzas de los tres niveles (p = <0.001), por lo que se incumple formalmente el supuesto de homocedasticidad exigido por el ANOVA clásico. Como verificación de robustez ante esta violación, se aplica de forma complementaria la prueba no paramétrica de Kruskal-Wallis, la cual no exige igualdad de varianzas y confirma la existencia de diferencias significativas entre los niveles del factor (χ² = 29.2; p = <0.001), respaldando la conclusión obtenida con el ANOVA a pesar de la heterocedasticidad detectada. La prueba de comparación múltiple LSD de Fisher ordena los niveles del factor, identificando a Alto como la categoría asociada con la mayor producción de biomasa forrajera, seguida de Medio y Bajo, todas ellas estadísticamente diferentes entre sí según las letras de significancia obtenidas.
Se analiza la tasa de consumo de oxígeno (cons_o)
registrada en dos variantes biológicas de moluscos (molusco: A y B)
expuestas a tres niveles contrastantes de concentración salina en el
medio acuático (c_agua: 100 %, 75 % y 50 %), configurando un diseño
experimental factorial de 2 × 3.
load("moluscos.RData")
BD_moluscos <- BD_moluscos %>%
mutate(
molusco = as.factor(molusco),
c_agua = as.factor(c_agua)
)
# Descriptivos agrupados por celda del diseño
resumen_moluscos <- BD_moluscos %>%
group_by(molusco, c_agua) %>%
summarise(
N = n(),
Media = mean(cons_o, na.rm = TRUE),
Desv_Std = sd(cons_o, na.rm = TRUE),
Mediana = median(cons_o, na.rm = TRUE),
IQR = IQR(cons_o, na.rm = TRUE),
.groups = "drop"
)
kable(resumen_moluscos, digits = 2,
caption = "Tabla 6. Estadísticos descriptivos por combinación molusco x concentración")| molusco | c_agua | N | Media | Desv_Std | Mediana | IQR |
|---|---|---|---|---|---|---|
| A | 50 | 8 | 12.18 | 3.09 | 11.11 | 2.19 |
| A | 75 | 8 | 7.89 | 2.74 | 7.18 | 2.82 |
| A | 100 | 8 | 9.94 | 2.75 | 9.30 | 3.74 |
| B | 50 | 8 | 12.33 | 3.52 | 12.85 | 4.44 |
| B | 75 | 8 | 6.10 | 2.74 | 5.60 | 2.51 |
| B | 100 | 8 | 7.41 | 2.84 | 6.14 | 4.38 |
# Boxplot factorial por tipo de molusco y concentración
ggplot(BD_moluscos, aes(x = c_agua, y = cons_o, fill = molusco)) +
geom_boxplot(alpha = 0.7, position = position_dodge(0.8)) +
geom_point(position = position_dodge(0.8), alpha = 0.5) +
scale_fill_manual(values = c("#2980b9", "#e67e22")) +
labs(
title = "Consumo de O2 según Tipo de Molusco y Concentración de Agua",
x = "Concentración de Agua de Mar (%)",
y = "Consumo de O2",
fill = "Tipo de Molusco"
)# Modelo ANOVA factorial completo
modelo_p2 <- aov(cons_o ~ molusco * c_agua, data = BD_moluscos)
anova_p2 <- summary(modelo_p2)[[1]]
kable(anova_p2, digits = 4, caption = "Tabla 7. Tabla ANOVA factorial — molusco x c_agua")| Df | Sum Sq | Mean Sq | F value | Pr(>F) | |
|---|---|---|---|---|---|
| molusco | 1 | 23.2269 | 23.2269 | 2.6508 | 0.1110 |
| c_agua | 2 | 230.8160 | 115.4080 | 13.1712 | 0.0000 |
| molusco:c_agua | 2 | 15.3563 | 7.6781 | 0.8763 | 0.4238 |
| Residuals | 42 | 368.0112 | 8.7622 | NA | NA |
# Verificación de supuestos
res_p2 <- residuals(modelo_p2)
test_shapiro_p2 <- shapiro.test(res_p2)
test_levene_p2 <- leveneTest(cons_o ~ molusco * c_agua, data = BD_moluscos)
tabla_supuestos_p2 <- data.frame(
Supuesto = c("Normalidad (Shapiro-Wilk)", "Homocedasticidad (Levene)"),
Estadistico = c(test_shapiro_p2$statistic, test_levene_p2$`F value`[1]),
p_valor = c(test_shapiro_p2$p.value, test_levene_p2$`Pr(>F)`[1]),
Evaluacion = c(
ifelse(test_shapiro_p2$p.value > 0.05, "Cumple (p > 0.05)", "No cumple (p < 0.05)"),
ifelse(test_levene_p2$`Pr(>F)`[1] > 0.05, "Cumple (p > 0.05)", "No cumple (p < 0.05)")
)
)
kable(tabla_supuestos_p2, digits = 4, caption = "Tabla 8. Validación de supuestos — Punto 2")| Supuesto | Estadistico | p_valor | Evaluacion | |
|---|---|---|---|---|
| W | Normalidad (Shapiro-Wilk) | 0.9582 | 0.0857 | Cumple (p > 0.05) |
| Homocedasticidad (Levene) | 0.1723 | 0.9715 | Cumple (p > 0.05) |
# Gráfico del perfil de interacción fisiológica
ggplot(BD_moluscos, aes(x = c_agua, y = cons_o, color = molusco, group = molusco)) +
stat_summary(fun = mean, geom = "line", linewidth = 1.2) +
stat_summary(fun = mean, geom = "point", size = 3) +
scale_color_manual(values = c("#2980b9", "#e67e22")) +
labs(
title = "Perfil de Interacción: Molusco x Concentración Salina",
x = "Concentración de Agua de Mar (%)",
y = "Consumo Promedio de O2",
color = "Molusco"
)# Prueba post-hoc LSD de Fisher sobre las combinaciones de tratamiento
lsd_p2 <- LSD.test(modelo_p2, c("molusco", "c_agua"), p.adj = "none", console = FALSE)
kable(lsd_p2$groups, digits = 3, caption = "Tabla 9. Prueba LSD de Fisher — molusco x c_agua")| cons_o | groups | |
|---|---|---|
| B:50 | 12.326 | a |
| A:50 | 12.175 | a |
| A:100 | 9.936 | ab |
| A:75 | 7.890 | bc |
| B:100 | 7.406 | bc |
| B:75 | 6.095 | c |
Interpretación de resultados — Punto 2: la interacción molusco:c_agua no resulta estadísticamente significativa (F = 0.88; p = 0.424), lo cual se refleja gráficamente en un razonable paralelismo entre los perfiles de consumo de oxígeno de ambas especies de molusco a lo largo de las concentraciones de agua de mar evaluadas: la forma en que cada especie responde a la salinidad es, en términos generales, similar. El factor concentración de agua (c_agua) sí ejerce un efecto principal altamente significativo sobre el consumo de oxígeno (F = 13.17; p = <0.001), mientras que el factor especie de molusco, considerado de forma aislada, no presenta un efecto principal significativo (F = 2.65; p = 0.111). En conjunto, los resultados indican que el consumo de oxígeno está determinado principalmente por la concentración salina del medio, sin evidencia de que la especie de molusco module dicha respuesta. La combinación de tratamiento con mayor consumo de oxígeno, según la prueba LSD de Fisher, corresponde a B:50, estadísticamente equivalente a A:50 pero superior a las combinaciones con menor concentración de agua de mar.
Se investiga el efecto de la fragmentación del hábitat y el uso de la tierra sobre las comunidades de anfibios, mediante el monitoreo de 52 unidades muestrales. Dichas parcelas se distribuyen en cuatro modalidades de uso del suelo: Bosque primario, Bosque secundario, Sistema silvopastoril y Potrero, considerando como variables dependientes la Riqueza de especies y el Índice de diversidad de Shannon.
load("Biodiversidad.RData")
BD_biodiversidad <- BD_biodiversidad %>%
mutate(Habitat = as.factor(Habitat))
# Resumen univariado de indicadores ecológicos y altitud
tabla_p3_univariado <- resumen_univariado(BD_biodiversidad %>% select(Riqueza, Shannon, Altitud))
kable(tabla_p3_univariado, digits = 2,
caption = "Tabla 10. Estadísticos descriptivos univariados — Punto 3 (Biodiversidad)")| Variable | N | Media | Mediana | Desv_Std | CV_pct | Minimo | Maximo |
|---|---|---|---|---|---|---|---|
| Altitud | 52 | 1243.89 | 1254.80 | 172.71 | 13.88 | 950.90 | 1600.80 |
| Riqueza | 52 | 9.73 | 9.50 | 4.37 | 44.92 | 2.00 | 21.00 |
| Shannon | 52 | 1.76 | 1.85 | 0.61 | 34.44 | 0.67 | 2.98 |
# Visualización bivariada por tipo de hábitat
g_riq <- ggplot(BD_biodiversidad, aes(x = Habitat, y = Riqueza, fill = Habitat)) +
geom_boxplot(alpha = 0.7) + geom_jitter(width = 0.1, alpha = 0.5) +
scale_fill_brewer(palette = "Dark2") + labs(title = "Riqueza por Hábitat", x = "Hábitat") +
theme(legend.position = "none")
g_sha <- ggplot(BD_biodiversidad, aes(x = Habitat, y = Shannon, fill = Habitat)) +
geom_boxplot(alpha = 0.7) + geom_jitter(width = 0.1, alpha = 0.5) +
scale_fill_brewer(palette = "Dark2") + labs(title = "Shannon por Hábitat", x = "Hábitat") +
theme(legend.position = "none")
g_alt <- ggplot(BD_biodiversidad, aes(x = Altitud, y = Shannon, color = Habitat)) +
geom_point(size = 2.5) + geom_smooth(method = "lm", se = FALSE, color = "black", linetype = "dashed") +
scale_color_brewer(palette = "Dark2") + labs(title = "Altitud vs Shannon", x = "Altitud (m.s.n.m.)", y = "Shannon")
(g_riq + g_sha) / g_alt# Ajuste del modelo ANOVA unifactorial
modelo_p3 <- aov(Shannon ~ Habitat, data = BD_biodiversidad)
anova_p3 <- summary(modelo_p3)[[1]]
kable(anova_p3, digits = 4, caption = "Tabla 11. Tabla ANOVA — Efecto de Habitat sobre Shannon")| Df | Sum Sq | Mean Sq | F value | Pr(>F) | |
|---|---|---|---|---|---|
| Habitat | 3 | 14.8624 | 4.9541 | 60.6112 | 0 |
| Residuals | 48 | 3.9233 | 0.0817 | NA | NA |
# Evaluación de supuestos
res_p3 <- residuals(modelo_p3)
test_shapiro_p3 <- shapiro.test(res_p3)
test_levene_p3 <- leveneTest(Shannon ~ Habitat, data = BD_biodiversidad)
tabla_supuestos_p3 <- data.frame(
Supuesto = c("Normalidad (Shapiro-Wilk)", "Homocedasticidad (Levene)"),
Estadistico = c(test_shapiro_p3$statistic, test_levene_p3$`F value`[1]),
p_valor = c(test_shapiro_p3$p.value, test_levene_p3$`Pr(>F)`[1]),
Evaluacion = c(
ifelse(test_shapiro_p3$p.value > 0.05, "Cumple (p > 0.05)", "No cumple (p < 0.05)"),
ifelse(test_levene_p3$`Pr(>F)`[1] > 0.05, "Cumple (p > 0.05)", "No cumple (p < 0.05)")
)
)
kable(tabla_supuestos_p3, digits = 4, caption = "Tabla 12. Validación de supuestos — Punto 3")| Supuesto | Estadistico | p_valor | Evaluacion | |
|---|---|---|---|---|
| W | Normalidad (Shapiro-Wilk) | 0.9785 | 0.4625 | Cumple (p > 0.05) |
| Homocedasticidad (Levene) | 1.2768 | 0.2930 | Cumple (p > 0.05) |
# Prueba post-hoc LSD de Fisher
lsd_p3 <- LSD.test(modelo_p3, "Habitat", p.adj = "none", console = FALSE)
kable(lsd_p3$groups, digits = 3, caption = "Tabla 13. Prueba LSD de Fisher — Habitat")| Shannon | groups | |
|---|---|---|
| Bosque primario | 2.468 | a |
| Bosque secundario | 1.975 | b |
| Sistema silvopastoril | 1.603 | c |
| Potrero | 1.004 | d |
# Gráfico de cajas con grupos de significancia
ggplot(BD_biodiversidad, aes(x = Habitat, y = Shannon, fill = Habitat)) +
geom_boxplot(alpha = 0.7) +
geom_jitter(width = 0.15, alpha = 0.5, size = 2) +
scale_fill_brewer(palette = "Set1") +
labs(
title = "Efecto de la Transformación del Hábitat sobre la Diversidad de Anfibios",
x = "Cobertura / Uso del Suelo",
y = "Índice de Shannon-Wiener"
) +
theme(legend.position = "none")Interpretación de resultados — Punto 3: el efecto del hábitat sobre el índice de Shannon es altamente significativo (F = 60.61; p = <0.001), y los residuales cumplen tanto el supuesto de normalidad (Shapiro-Wilk: p = 0.463) como el de homocedasticidad (Levene: p = 0.293), lo que respalda plenamente la validez del modelo. La prueba LSD separa las cuatro coberturas en grupos completamente distintos entre sí, evidenciando un gradiente de diversidad claro y monotónico: Bosque primario presenta el mayor índice de Shannon, seguido en orden descendente por Bosque secundario, Sistema silvopastoril y, por último, Potrero, con el valor más bajo. Este patrón confirma que la transformación progresiva del hábitat hacia coberturas abiertas está asociada con una pérdida sistemática de diversidad de anfibios.
tabla_resumen_integrada <- data.frame(
Punto = c("1", "2", "3"),
Base_de_Datos = c("Salinidad.RData", "moluscos.RData", "Biodiversidad.RData"),
Variable_Respuesta = c("Biomasa (g)", "Consumo de O2", "Índice de Shannon"),
Factores_Covariables = c(
paste("Nivel de", var_seleccionada),
"molusco (2) x c_agua (3)",
"Habitat (4 coberturas)"
),
Validacion_Supuestos = c(
ifelse(test_shapiro_p1$p.value > 0.05 & test_levene_p1[1, "Pr(>F)"] > 0.05,
"Cumple", "Revisar supuestos"),
ifelse(test_shapiro_p2$p.value > 0.05 & test_levene_p2$`Pr(>F)`[1] > 0.05,
"Cumple", "Revisar supuestos"),
ifelse(test_shapiro_p3$p.value > 0.05 & test_levene_p3$`Pr(>F)`[1] > 0.05,
"Cumple", "Revisar supuestos")
),
Resultado_ANOVA = c(
paste0("p = ", format.pval(anova_p1[1, "Pr(>F)"], digits = 3, eps = 0.001)),
paste0("Interacción p = ", format.pval(anova_p2[3, "Pr(>F)"], digits = 3, eps = 0.001)),
paste0("p = ", format.pval(anova_p3[1, "Pr(>F)"], digits = 3, eps = 0.001))
),
Conclusion_Principal = c(
"La biomasa vegetal responde al gradiente de la variable edáfica seleccionada.",
"El consumo de O2 depende de la concentración salina, sin interacción significativa con la especie.",
"La conversión del hábitat reduce sistemáticamente la diversidad de anfibios."
)
)
kable(
tabla_resumen_integrada,
col.names = c(
"Punto",
"Base de Datos",
"Variable Respuesta",
"Factores / Covariables",
"Validación Supuestos",
"Resultado ANOVA",
"Conclusión Principal"
),
caption = "Tabla 14. Consolidado general de hallazgos estadísticos y biológicos",
align = c("c", "l", "l", "l", "c", "c", "l")
)| Punto | Base de Datos | Variable Respuesta | Factores / Covariables | Validación Supuestos | Resultado ANOVA | Conclusión Principal |
|---|---|---|---|---|---|---|
| 1 | Salinidad.RData | Biomasa (g) | Nivel de pH | Revisar supuestos | p = <0.001 | La biomasa vegetal responde al gradiente de la variable edáfica seleccionada. |
| 2 | moluscos.RData | Consumo de O2 | molusco (2) x c_agua (3) | Cumple | Interacción p = 0.424 | El consumo de O2 depende de la concentración salina, sin interacción significativa con la especie. |
| 3 | Biodiversidad.RData | Índice de Shannon | Habitat (4 coberturas) | Cumple | p = <0.001 | La conversión del hábitat reduce sistemáticamente la diversidad de anfibios. |
Los tres ejercicios desarrollados evidencian que las variables de respuesta biológicas evaluadas responden de forma medible a los factores ambientales y antrópicos considerados en cada diseño experimental, aunque con matices propios de cada sistema biológico. En el Punto 1, la biomasa forrajera se asocia de forma altamente significativa con el nivel de la covariable edáfica seleccionada; no obstante, la violación del supuesto de homocedasticidad detectada por la prueba de Levene hizo necesario complementar el análisis con la prueba no paramétrica de Kruskal-Wallis, cuyo resultado refuerza la conclusión del ANOVA clásico. En el Punto 2, el consumo de oxígeno de los moluscos depende de manera determinante de la concentración de agua de mar, sin que se evidencie una interacción significativa entre la especie y dicha concentración, es decir, ambas especies responden de forma comparable al gradiente de salinidad. En el Punto 3, la transformación del hábitat afecta de manera contundente y sistemática la diversidad de anfibios, describiendo un gradiente monotónico desde el bosque primario hasta el potrero. En conjunto, estos resultados resaltan la utilidad del análisis de varianza —acompañado de una verificación rigurosa de sus supuestos y, cuando es necesario, de pruebas complementarias— como herramienta para cuantificar el efecto de perturbaciones ambientales y de manejo sobre la biología de los organismos y los ecosistemas estudiados.