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

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.
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
| 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
| 0.752 |
0.603 |
0.851 |
1.29e-10 |
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.
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
| Habitat |
3 |
14.862 |
4.954 |
60.611 |
0 |
| Residuals |
48 |
3.923 |
0.082 |
NA |
NA |
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)
| 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")

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.
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.
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)
| 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
| Bosque primario |
2.468 |
13 |
| Bosque secundario |
1.975 |
13 |
| Sistema silvopastoril |
1.603 |
13 |
| Potrero |
1.004 |
13 |
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.
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.