library(ggplot2)
library(car)
library(knitr)

load("Biodiversidad.RData")   
df <- BD_biodiversidad

# Orden logico del gradiente de intervencion antropica
df$Habitat <- factor(df$Habitat,
                      levels = c("Bosque primario", "Bosque secundario",
                                 "Sistema silvopastoril", "Potrero"))

theme_set(theme_minimal(base_size = 12))

1 Introduccion

Se evalua el efecto del uso del suelo sobre la biodiversidad de anfibios en una reserva forestal, usando 52 parcelas de muestreo (13 por habitat) distribuidas en cuatro tipos de habitat que representan un gradiente de intervencion antropica: bosque primario, bosque secundario, sistema silvopastoril y potrero. En cada parcela se registro la riqueza de especies, el indice de diversidad de Shannon-Wiener y la altitud (m.s.n.m.).

2 a. Analisis exploratorio univariado

resumen_uni <- function(x) {
  c(n = length(x), Media = mean(x), Mediana = median(x), DE = sd(x),
    CV = sd(x) / mean(x) * 100, Min = min(x), Max = max(x),
    Asimetria = (sum((x - mean(x))^3) / length(x)) / (sd(x)^3))
}

tab_uni <- round(rbind(
  Riqueza = resumen_uni(df$Riqueza),
  Shannon = resumen_uni(df$Shannon),
  Altitud = resumen_uni(df$Altitud)
), 3)

kable(tab_uni, caption = "Estadisticos descriptivos por variable")
Estadisticos descriptivos por variable
n Media Mediana DE CV Min Max Asimetria
Riqueza 52 9.731 9.50 4.371 44.916 2.00 21.00 0.285
Shannon 52 1.762 1.85 0.607 34.439 0.67 2.98 0.040
Altitud 52 1243.892 1254.80 172.708 13.885 950.90 1600.80 0.090
ggplot(df, aes(x = Riqueza)) +
  geom_histogram(bins = 8, fill = "#3B7A57", color = "white") +
  labs(title = "Distribucion de la Riqueza de especies",
       x = "Riqueza (no. especies)", y = "Frecuencia")

ggplot(df, aes(x = Shannon)) +
  geom_histogram(bins = 8, fill = "#4C72B0", color = "white") +
  labs(title = "Distribucion del indice de Shannon-Wiener",
       x = "Indice de Shannon", y = "Frecuencia")

ggplot(df, aes(x = Altitud)) +
  geom_histogram(bins = 8, fill = "#C44E52", color = "white") +
  labs(title = "Distribucion de la Altitud",
       x = "Altitud (m.s.n.m.)", y = "Frecuencia")

2.1 Interpretacion

  • Riqueza: promedio de 9.73 especies por parcela (mediana 9.5), con dispersion relativamente alta (CV ~45%) y un rango amplio (2 a 21 especies). La asimetria es baja (0.29), compatible con una distribucion aproximadamente simetrica con una leve cola hacia la derecha. Esta dispersion tan marcada sugiere heterogeneidad real entre parcelas, probablemente asociada al tipo de habitat (se explora en la seccion b).
  • Shannon: promedio de 1.76 (mediana 1.85), con dispersion moderada (CV ~34%) y rango de 0.67 a 2.98. La asimetria es practicamente nula (0.04), lo que indica una distribucion simetrica sin valores extremos evidentes.
  • Altitud: promedio de 1243.9 m.s.n.m., con baja dispersion relativa (CV ~14%) y rango de 951 a 1601 m. Esto es consistente con parcelas ubicadas en un mismo gradiente altitudinal moderado dentro de la reserva, sin valores atipicos marcados.
  • En conjunto, ninguna variable presenta asimetria fuerte ni indicios claros de valores atipicos extremos, lo cual es un buen indicio para los supuestos que se evaluaran mas adelante en el ANOVA.

3 b. Analisis exploratorio bivariado

ggplot(df, aes(x = Habitat, y = Riqueza, fill = Habitat)) +
  geom_boxplot(alpha = .7, show.legend = FALSE) +
  labs(title = "Riqueza de especies por tipo de habitat", x = "", y = "Riqueza (no. especies)") +
  theme(axis.text.x = element_text(angle = 20, hjust = 1))

ggplot(df, aes(x = Habitat, y = Shannon, fill = Habitat)) +
  geom_boxplot(alpha = .7, show.legend = FALSE) +
  labs(title = "Indice de Shannon por tipo de habitat", x = "", y = "Indice de Shannon") +
  theme(axis.text.x = element_text(angle = 20, hjust = 1))

tab_bi <- aggregate(cbind(Riqueza, Shannon) ~ Habitat, df,
                     function(x) c(Media = round(mean(x), 2), DE = round(sd(x), 2)))
kable(tab_bi, caption = "Riqueza y Shannon (media, DE) por tipo de habitat")
Riqueza y Shannon (media, DE) por tipo de habitat
Habitat Riqueza Shannon
Bosque primario 14.77 2.74
Bosque secundario 11.08 3.01
Sistema silvopastoril 8.08 2.50
Potrero 5.00 1.29
ggplot(df, aes(x = Altitud, y = Shannon, color = Habitat)) +
  geom_point(size = 2.5, alpha = .8) +
  geom_smooth(method = "lm", se = FALSE, color = "black", linetype = "dashed", linewidth = .6) +
  labs(title = "Relacion entre Altitud y el indice de Shannon",
       x = "Altitud (m.s.n.m.)", y = "Indice de Shannon")

cor_alt_shannon <- cor.test(df$Altitud, df$Shannon)
kable(data.frame(
  r = round(cor_alt_shannon$estimate, 3),
  IC_95_inf = round(cor_alt_shannon$conf.int[1], 3),
  IC_95_sup = round(cor_alt_shannon$conf.int[2], 3),
  p_valor = format.pval(cor_alt_shannon$p.value, digits = 3)
), row.names = FALSE, caption = "Correlacion de Pearson: Altitud vs. Shannon")
Correlacion de Pearson: Altitud vs. Shannon
r IC_95_inf IC_95_sup p_valor
0.752 0.603 0.851 1.29e-10

3.1 Interpretacion

  • Se observa un gradiente muy claro y consistente en ambas variables (riqueza y Shannon) a lo largo del gradiente de intervencion antropica: Bosque primario > Bosque secundario > Sistema silvopastoril > Potrero. Tanto la mediana como la dispersion decrecen conforme aumenta la intervencion humana.
  • Los boxplots muestran poco solapamiento entre los grupos extremos (bosque primario vs. potrero), y solapamiento parcial entre habitats intermedios (bosque secundario y sistema silvopastoril), lo que sugiere diferencias reales pero de distinta magnitud entre pares de habitats.
  • La relacion entre altitud y Shannon es positiva, moderada-fuerte y estadisticamente significativa (r = 0.75; p < 0.001): a mayor altitud, mayor diversidad de anfibios en la muestra. Sin embargo, dado que los habitats no estan distribuidos aleatoriamente en altitud (se aprecia agrupamiento por color en el grafico de dispersion), esta asociacion podria estar parcialmente confundida con el efecto del tipo de habitat, y no deberia interpretarse como una relacion causal aislada.

4 c. ANOVA de una via: Shannon ~ Habitat

Hipotesis del modelo:

  • H0: las medias del indice de Shannon son iguales en los cuatro habitats.
  • H1: al menos un habitat tiene una media diferente.
mod <- aov(Shannon ~ Habitat, data = df)
kable(as.data.frame(summary(mod)[[1]]), digits = 3, caption = "Tabla ANOVA")
Tabla ANOVA
Df Sum Sq Mean Sq F value Pr(>F)
Habitat 3 14.862 4.954 60.611 0
Residuals 48 3.923 0.082 NA NA

4.1 Verificacion de supuestos

res <- residuals(mod)
shapiro_res <- shapiro.test(res)
levene_res  <- leveneTest(Shannon ~ Habitat, data = df)
kable(data.frame(
  Prueba = c("Shapiro-Wilk (normalidad de residuales)", "Levene (homogeneidad de varianzas)"),
  Estadistico = c(round(shapiro_res$statistic, 3), round(levene_res$`F value`[1], 3)),
  p_valor = c(format.pval(shapiro_res$p.value, digits = 3),
              format.pval(levene_res$`Pr(>F)`[1], digits = 3))
), row.names = FALSE)
Prueba Estadistico p_valor
Shapiro-Wilk (normalidad de residuales) 0.978 0.463
Levene (homogeneidad de varianzas) 1.277 0.293
qqPlot(res, main = "QQ-plot de residuales del ANOVA", ylab = "Residuales")

## [1]  8 18
df$fitted <- fitted(mod)
df$resid  <- res

ggplot(df, aes(x = fitted, y = resid)) +
  geom_point(size = 2, alpha = .7) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  labs(title = "Residuales vs valores ajustados", x = "Valores ajustados", y = "Residuales")

4.1.1 Interpretacion de los supuestos

  • Normalidad de los residuales (Shapiro-Wilk): W = 0.978, p = 0.463 -> no se rechaza la normalidad. Los residuales del modelo son compatibles con una distribucion normal, y el QQ-plot confirma que los puntos caen dentro de la banda de confianza, cercanos a la recta.
  • Homogeneidad de varianzas (Levene, centrado en la mediana): F(3,48) = 1.28, p = 0.293 -> no se rechaza la homocedasticidad. Las varianzas entre los cuatro grupos pueden considerarse estadisticamente similares, y el grafico de residuales vs. ajustados no muestra un patron de embudo.
  • Conclusion: ambos supuestos se cumplen razonablemente, por lo que el ANOVA parametrico es adecuado y sus resultados son confiables; no es necesario recurrir a Kruskal-Wallis ni a una version robusta tipo Welch.

4.2 Resultado global del ANOVA

El estadistico F = 60.61 con p < 0.001 lleva a rechazar H0: existe evidencia muy fuerte de que el indice de Shannon difiere entre al menos un par de habitats.

4.3 Comparaciones post-hoc: prueba de LSD (Fisher)

Dado que el ANOVA global fue significativo, se aplica la prueba de diferencia minima significativa de Fisher (LSD) para identificar que pares de habitats difieren entre si. La prueba LSD equivale a realizar t-tests de a pares usando el cuadrado medio del error (CME) del ANOVA como estimador comun de la varianza, sin correccion adicional por comparaciones multiples; se justifica su uso porque el ANOVA global ya fue significativo y solo se realizan 6 comparaciones.

MSE <- summary(mod)[[1]]["Residuals", "Mean Sq"]
dfe <- summary(mod)[[1]]["Residuals", "Df"]

grp   <- split(df$Shannon, df$Habitat)
means <- sapply(grp, mean)
ns    <- sapply(grp, length)
lv    <- names(grp)
pares <- combn(lv, 2)

lsd_res <- data.frame()
for (i in 1:ncol(pares)) {
  a <- pares[1, i]; b <- pares[2, i]
  diff <- means[a] - means[b]
  se   <- sqrt(MSE * (1/ns[a] + 1/ns[b]))
  tval <- diff / se
  pval <- 2 * pt(-abs(tval), dfe)
  lsd_crit <- qt(0.975, dfe) * se
  lsd_res <- rbind(lsd_res, data.frame(
    Comparacion = paste(a, "vs", b),
    Diferencia  = round(diff, 3),
    SE          = round(se, 3),
    t           = round(tval, 3),
    p_valor     = round(pval, 4),
    LSD_0.05    = round(lsd_crit, 3),
    Sig         = ifelse(pval < 0.05, "Si", "No")
  ))
}

kable(lsd_res, row.names = FALSE, caption = "Comparaciones post-hoc LSD (alfa = 0.05)")
Comparaciones post-hoc LSD (alfa = 0.05)
Comparacion Diferencia SE t p_valor LSD_0.05 Sig
Bosque primario vs Bosque secundario 0.493 0.112 4.397 0.0001 0.225 Si
Bosque primario vs Sistema silvopastoril 0.865 0.112 7.710 0.0000 0.225 Si
Bosque primario vs Potrero 1.464 0.112 13.054 0.0000 0.225 Si
Bosque secundario vs Sistema silvopastoril 0.372 0.112 3.313 0.0018 0.225 Si
Bosque secundario vs Potrero 0.971 0.112 8.657 0.0000 0.225 Si
Sistema silvopastoril vs Potrero 0.599 0.112 5.344 0.0000 0.225 Si
kable(data.frame(Habitat = names(means), Media_Shannon = round(means, 3), n = ns),
      row.names = FALSE, caption = "Medias de Shannon por habitat, ordenadas de mayor a menor intervencion")
Medias de Shannon por habitat, ordenadas de mayor a menor intervencion
Habitat Media_Shannon n
Bosque primario 2.468 13
Bosque secundario 1.975 13
Sistema silvopastoril 1.603 13
Potrero 1.004 13

4.3.1 Interpretacion de las comparaciones

  • Las seis comparaciones de pares resultaron estadisticamente significativas (p < 0.01 en todos los casos): los cuatro habitats difieren entre si en su diversidad de Shannon, no hay dos habitats que puedan considerarse estadisticamente iguales.
  • El orden de las medias es claro y monotono: Bosque primario (2.47) > Bosque secundario (1.97) > Sistema silvopastoril (1.60) > Potrero (1.00).
  • La mayor diferencia se da entre los extremos del gradiente de intervencion: Bosque primario vs. Potrero (diferencia = 1.46; t = 13.05), lo que confirma que la conversion total del bosque a pastizal reduce drasticamente la diversidad de anfibios.
  • Incluso las diferencias entre habitats “adyacentes” en el gradiente (por ejemplo, Bosque secundario vs. Sistema silvopastoril, diferencia = 0.37) son significativas, aunque de menor magnitud, lo que indica que cada nivel adicional de intervencion antropica se asocia con una perdida progresiva y medible de diversidad.

5 Conclusion general

El uso del suelo tiene un efecto claro, gradual y estadisticamente significativo sobre la diversidad de anfibios en la reserva. Los bosques primarios sostienen la mayor diversidad y los potreros la menor, con los sistemas de uso intermedio (bosque secundario, sistema silvopastoril) ocupando posiciones intermedias tambien significativamente distintas entre si. Esto sugiere que la conservacion de bosque primario y, en su defecto, de bosque secundario y sistemas silvopastoriles, es clave para mantener la diversidad de anfibios en la reserva.