Introducción

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.

1. Marco Metodológico General

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:

  1. Análisis exploratorio univariado (EDA): cálculo de medidas de tendencia central (media, mediana), dispersión (desviación estándar, coeficiente de variación, rango) y forma, con el fin de caracterizar la distribución de cada variable.
  2. Análisis exploratorio bivariado (EDA): evaluación de la relación entre covariables continuas mediante coeficientes de correlación de Pearson, o comparación gráfica entre factores mediante diagramas de caja (boxplots).
  3. Ajuste del modelo ANOVA: estimación de la variabilidad explicada por el factor o los factores principales frente al error experimental.
  4. Verificación formal de supuestos:
    • Normalidad de residuales: prueba de Shapiro-Wilk (H₀: los errores siguen una distribución normal).
    • Homocedasticidad: prueba de Levene (H₀: igualdad de varianzas entre todos los tratamientos).
  5. Prueba post-hoc de comparaciones múltiples: aplicación de la prueba de Diferencia Mínima Significativa (LSD) de Fisher para identificar la ordenación y separación de grupos homogéneos, cuando el ANOVA resulta estadísticamente significativo (p < 0.05).

2. Punto 1: Base de Datos Salinidad.RData

2.1 Contexto del experimento

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.

2.2 Fase 1: Carga de datos y análisis exploratorio univariado

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

2.3 Fase 2: Análisis exploratorio bivariado y selección de covariable

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

2.4 Fase 3: Categorización por terciles, modelo ANOVA, supuestos y prueba LSD

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

3. Punto 2: Base de Datos moluscos.RData

3.1 Contexto del experimento

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.

3.2 Fase 1: Análisis exploratorio univariado, bivariado y descriptivo por tratamiento

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

3.3 Fase 2: ANOVA factorial con interacción, supuestos y prueba LSD

# 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")
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")
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")
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.

4. Punto 3: Base de Datos Biodiversidad.RData

4.1 Contexto del experimento

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.

4.2 Fase 1: Análisis exploratorio univariado y bivariado

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

4.3 Fase 2: Modelo ANOVA unifactorial, supuestos y prueba LSD

# 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")
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")
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")
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.

5. Síntesis General de Resultados

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")
)
Tabla 14. Consolidado general de hallazgos estadísticos y biológicos
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.

6. Conclusiones Generales

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.