🐸 Contexto del estudio Este informe explora cómo el uso que se le da al suelo afecta la biodiversidad de anfibios dentro de una reserva forestal. Para ello se muestrearon parcelas ubicadas en cuatro tipos de hábitat, ordenados según su grado de intervención humana: bosque primario, bosque secundario, sistema silvopastoril y potrero. En cada una de las 52 parcelas (13 por hábitat) se registraron tres variables: la riqueza de especies, el índice de diversidad de Shannon-Wiener y la altitud del sitio (m.s.n.m.).
52Parcelas
4Tipos de hábitat
13Parcelas por hábitat
3Variables registradas
Antes de comparar los hábitats entre sí, conviene entender cómo se comporta cada variable por separado. A continuación se describe individualmente la Riqueza, el Shannon y la Altitud.
load("Biodiversidad.RData")
library(psych)
library(knitr)
library(kableExtra)
library(ggplot2)
library(dplyr)
diccionario <- data.frame(
Variable = c("Parcela", "Habitat", "Riqueza", "Shannon", "Altitud"),
Tipo = c("Texto", "Texto", "Numérico", "Numérico", "Numérico"),
Descripcion = c("Identificador de la parcela de muestreo",
"Tipo de hábitat",
"Riqueza de especies (número de especies por parcela)",
"Índice de diversidad de Shannon",
"Altitud de la parcela (m.s.n.m.)")
)
kable(diccionario, caption = "Estructura del conjunto de datos BD_biodiversidad") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
| Variable | Tipo | Descripcion |
|---|---|---|
| Parcela | Texto | Identificador de la parcela de muestreo |
| Habitat | Texto | Tipo de hábitat |
| Riqueza | Numérico | Riqueza de especies (número de especies por parcela) |
| Shannon | Numérico | Índice de diversidad de Shannon |
| Altitud | Numérico | Altitud de la parcela (m.s.n.m.) |
tabla_describe <- describe(BD_biodiversidad[, c("Riqueza", "Shannon", "Altitud")])
kable(round(tabla_describe, 2),
caption = "Estadísticos descriptivos",
table.attr = "class='tabla-verde'") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE) %>%
scroll_box(width = "100%")
| vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Riqueza | 1 | 52 | 9.73 | 4.37 | 9.50 | 9.60 | 5.19 | 2.00 | 21.00 | 19.00 | 0.28 | -0.72 | 0.61 |
| Shannon | 2 | 52 | 1.76 | 0.61 | 1.85 | 1.76 | 0.64 | 0.67 | 2.98 | 2.31 | 0.04 | -0.84 | 0.08 |
| Altitud | 3 | 52 | 1243.89 | 172.71 | 1254.80 | 1240.59 | 215.64 | 950.90 | 1600.80 | 649.90 | 0.09 | -1.26 | 23.95 |
La base está completa: 52 parcelas sin datos faltantes, repartidas equitativamente entre los 4 hábitats (13 cada uno). Como las tres variables se miden en escalas muy diferentes —la Riqueza en número de especies, el Shannon entre 0 y 3 aproximadamente, y la Altitud en cientos o miles de m.s.n.m.—, comparar directamente sus desviaciones estándar no sería informativo. Por eso se recurre al coeficiente de variación, que expresa la dispersión de cada variable en términos relativos a su propia media.
cv <- function(x) (sd(x) / mean(x)) * 100
cv_tabla <- data.frame(
Variable = c("Riqueza", "Shannon", "Altitud"),
CV = round(sapply(BD_biodiversidad[, c("Riqueza", "Shannon", "Altitud")], cv), 2)
)
kable(cv_tabla,
caption = "Coeficiente de variación (%)",
col.names = c("Variable", "CV (%)"),
row.names = FALSE,
table.attr = "class='tabla-verde'") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)
| Variable | CV (%) |
|---|---|
| Riqueza | 44.92 |
| Shannon | 34.44 |
| Altitud | 13.88 |
De las tres, la riqueza de especies es la que más varía entre parcelas (CV ≈ 45%), seguida del índice de Shannon (CV ≈ 34%). La altitud, en cambio, es notablemente más estable (CV ≈ 14%), lo que ya empieza a sugerir que las diferencias de biodiversidad entre parcelas no se explican simplemente por dónde queda cada una en el terreno.
p1 <- ggplot(BD_biodiversidad, aes(x = Riqueza)) +
geom_histogram(bins = 10, fill = "#234e52", color = "white") +
theme_minimal() + labs(title = "Riqueza de especies", x = "Riqueza", y = "Frecuencia")
p2 <- ggplot(BD_biodiversidad, aes(x = Shannon)) +
geom_histogram(bins = 10, fill = "#c1502e", color = "white") +
theme_minimal() + labs(title = "Índice de Shannon", x = "Shannon", y = "Frecuencia")
p3 <- ggplot(BD_biodiversidad, aes(x = Altitud)) +
geom_histogram(bins = 10, fill = "#b8862e", color = "white") +
theme_minimal() + labs(title = "Altitud", x = "Altitud (m.s.n.m.)", y = "Frecuencia")
library(gridExtra)
grid.arrange(p1, p2, p3, ncol = 3)
Riqueza y Altitud se distribuyen de forma aproximadamente simétrica, con un sesgo positivo apenas perceptible; el Shannon, por su parte, es prácticamente simétrico. Ninguno de los tres histogramas muestra una forma bimodal clara, aunque vale aclarar que aquí se están mezclando los cuatro hábitats en un solo gráfico —la dispersión que se ve responde en parte a esa mezcla de grupos distintos, algo que se examina con más detalle en el literal b.
b1 <- ggplot(BD_biodiversidad, aes(y = Riqueza)) +
geom_boxplot(fill = "#a8c3a1") + theme_minimal() +
labs(title = "Riqueza") + theme(axis.text.x = element_blank())
b2 <- ggplot(BD_biodiversidad, aes(y = Shannon)) +
geom_boxplot(fill = "#a8c3a1") + theme_minimal() +
labs(title = "Shannon") + theme(axis.text.x = element_blank())
b3 <- ggplot(BD_biodiversidad, aes(y = Altitud)) +
geom_boxplot(fill = "#a8c3a1") + theme_minimal() +
labs(title = "Altitud") + theme(axis.text.x = element_blank())
grid.arrange(b1, b2, b3, ncol = 3)
Aplicando la regla de 1.5×RIC, ninguna de las tres variables muestra valores atípicos. Es una buena señal: la base está limpia y no hay mediciones extremas que revisar antes de avanzar con el análisis.
🔍 Interpretación
Riqueza (N° de especies): en promedio se registran 9.73 especies por parcela (mediana 9.5), con una desviación estándar de 4.37 (CV ≈ 45%). Esa variabilidad tiene sentido: las parcelas vienen de hábitats con niveles de intervención muy distintos entre sí. La distribución tiene un sesgo positivo leve (skew ≈ 0.30) y no se detectaron valores atípicos.
Shannon: el promedio es de 1.76 (mediana 1.85), con un CV cercano al 34% y una distribución casi perfectamente simétrica (skew ≈ 0.04). Tampoco aquí hay outliers.
Altitud (m.s.n.m.): las parcelas se ubican en promedio a 1243.9 m.s.n.m. (mediana 1254.8). Es, de las tres, la variable más homogénea (CV ≈ 14%), con un sesgo mínimo (skew ≈ 0.10) y sin valores atípicos.
En conjunto, este panorama ya deja entrever algo importante: mientras la Riqueza y el Shannon varían bastante, la Altitud se mantiene relativamente estable. Eso apunta a que la diversidad observada responde más al tipo de hábitat que a un efecto directo de la altitud —una hipótesis que se pone a prueba en el siguiente literal.
📐 Enfoque estadístico En esta sección se comparan la Riqueza y el Shannon entre los cuatro hábitats mediante boxplots agrupados, y se examina si la Altitud se relaciona con la diversidad (Shannon) a través de un diagrama de dispersión y el coeficiente de correlación de Pearson.
BD_biodiversidad$Habitat <- factor(BD_biodiversidad$Habitat,
levels = c("Bosque primario", "Bosque secundario",
"Sistema silvopastoril", "Potrero"))
g1 <- ggplot(BD_biodiversidad, aes(x = Habitat, y = Riqueza, fill = Habitat)) +
geom_boxplot() + theme_minimal() +
labs(title = "Riqueza de especies por hábitat", x = "", y = "Riqueza") +
theme(axis.text.x = element_text(angle = 20, hjust = 1), legend.position = "none")
g2 <- ggplot(BD_biodiversidad, aes(x = Habitat, y = Shannon, fill = Habitat)) +
geom_boxplot() + theme_minimal() +
labs(title = "Índice de Shannon por hábitat", x = "", y = "Shannon") +
theme(axis.text.x = element_text(angle = 20, hjust = 1), legend.position = "none")
grid.arrange(g1, g2, ncol = 2)
tabla_grupo <- BD_biodiversidad %>%
group_by(Habitat) %>%
summarise(
n = n(),
Riqueza_media = round(mean(Riqueza), 2),
Riqueza_sd = round(sd(Riqueza), 2),
Shannon_media = round(mean(Shannon), 2),
Shannon_sd = round(sd(Shannon), 2)
)
kable(tabla_grupo,
caption = "Riqueza y Shannon promedio por tipo de hábitat",
table.attr = "class='tabla-verde'") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)
| Habitat | n | Riqueza_media | Riqueza_sd | Shannon_media | Shannon_sd |
|---|---|---|---|---|---|
| Bosque primario | 13 | 14.77 | 2.74 | 2.47 | 0.38 |
| Bosque secundario | 13 | 11.08 | 3.01 | 1.97 | 0.22 |
| Sistema silvopastoril | 13 | 8.08 | 2.50 | 1.60 | 0.28 |
| Potrero | 13 | 5.00 | 1.29 | 1.00 | 0.24 |
El patrón es claro y se repite en ambas variables: tanto la Riqueza como el Shannon van bajando a medida que aumenta la intervención del hábitat. Los valores más altos aparecen en el bosque primario, bajan en el bosque secundario, siguen bajando en el sistema silvopastoril y llegan a su mínimo en el potrero. En otras palabras, entre más se interviene un hábitat, menos anfibios diversos se encuentran en él.
ggplot(BD_biodiversidad, aes(x = Altitud, y = Shannon)) +
geom_point(aes(color = Habitat), size = 2) +
geom_smooth(method = "lm", se = FALSE, color = "#3a332c", linetype = "dashed") +
theme_minimal() +
labs(title = "Shannon vs Altitud", x = "Altitud (m.s.n.m.)", y = "Índice de Shannon")
cor_alt <- cor.test(BD_biodiversidad$Altitud, BD_biodiversidad$Shannon, method = "pearson")
cor_tabla <- data.frame(
Relacion = "Altitud vs Shannon",
r = round(cor_alt$estimate, 3),
p_valor = signif(cor_alt$p.value, 3)
)
kable(cor_tabla,
caption = "Correlación de Pearson entre Altitud y Shannon",
row.names = FALSE,
table.attr = "class='tabla-verde'") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)
| Relacion | r | p_valor |
|---|---|---|
| Altitud vs Shannon | 0.752 | 0 |
🔍 Interpretación Los boxplots dejan ver diferencias marcadas y ordenadas entre hábitats, tanto en Riqueza como en Shannon, y siguen exactamente el gradiente esperado: Bosque primario > Bosque secundario > Sistema silvopastoril > Potrero. Esto confirma que el uso que se le da al suelo sí incide sobre la biodiversidad de anfibios que se observa.
Por otro lado, la Altitud muestra una correlación positiva y fuerte con el Shannon (r = 0.752, p < 0.001): a mayor altitud, mayor diversidad. Pero hay que leer este resultado con cuidado. En el diagrama de dispersión, los puntos se agrupan por color (por hábitat) siguiendo ese mismo gradiente altitudinal, lo que sugiere que la correlación podría estar reflejando algo distinto: que los hábitats menos intervenidos —el bosque primario, sobre todo— simplemente se ubican en las zonas más altas de la reserva. Es decir, la altitud y el hábitat están entrelazados, y no puede afirmarse con esta evidencia que la altitud tenga un efecto propio e independiente sobre la diversidad.
📐 Enfoque estadístico Para confirmar formalmente lo que sugieren los boxplots, se aplica un ANOVA de una vía que evalúa si el Shannon difiere de manera significativa entre los cuatro hábitats. Antes de confiar en ese resultado, se comprueban los supuestos del modelo: normalidad de los residuales (Shapiro-Wilk) y homogeneidad de varianzas (Levene). Si el ANOVA resulta significativo, se complementa con comparaciones post-hoc mediante la prueba de LSD para identificar exactamente entre qué pares de hábitats están las diferencias.
anova_c <- aov(Shannon ~ Habitat, data = BD_biodiversidad)
anova_tabla <- as.data.frame(summary(anova_c)[[1]])
anova_tabla <- round(anova_tabla, 4)
kable(anova_tabla,
caption = "Tabla ANOVA: Shannon ~ Habitat",
table.attr = "class='tabla-verde'") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)
| 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 |
El resultado es contundente: el tipo de hábitat tiene un efecto altamente significativo sobre el índice de Shannon (F(3,48) = 60.61, p < 0.001). Antes de sacar conclusiones más específicas, hay que confirmar que el modelo sea válido, es decir, que cumpla sus supuestos.
library(car)
shapiro_res <- shapiro.test(residuals(anova_c))
levene_res <- leveneTest(Shannon ~ Habitat, data = BD_biodiversidad)
supuestos_tabla <- data.frame(
Prueba = c("Shapiro-Wilk (normalidad)", "Levene (homogeneidad de varianzas)"),
Estadistico = c(round(shapiro_res$statistic, 4), round(levene_res$`F value`[1], 4)),
p_valor = c(round(shapiro_res$p.value, 4), round(levene_res$`Pr(>F)`[1], 4))
)
kable(supuestos_tabla,
caption = "Verificación de supuestos del ANOVA",
col.names = c("Prueba", "Estadístico", "p-valor"),
row.names = FALSE,
table.attr = "class='tabla-verde'") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)
| Prueba | Estadístico | p-valor |
|---|---|---|
| Shapiro-Wilk (normalidad) | 0.9785 | 0.4625 |
| Levene (homogeneidad de varianzas) | 1.2768 | 0.2930 |
✅ Interpretación de supuestos Buenas noticias en ambos frentes: la prueba de Shapiro-Wilk sobre los residuales da un valor-p = 0.463, así que no hay motivo para rechazar el supuesto de normalidad. La prueba de Levene da un valor-p = 0.293, así que tampoco se rechaza la homogeneidad de varianzas entre grupos. Con los dos supuestos en orden, tanto el ANOVA como la prueba post-hoc de LSD quedan respaldados para este conjunto de datos.
Con el ANOVA significativo y los supuestos cumplidos, el siguiente paso natural es preguntar: ¿entre qué hábitats específicamente hay diferencias? Para responder eso se aplica la prueba post-hoc de LSD.
library(agricolae)
posanova_c <- LSD.test(anova_c, trt = "Habitat")
kable(as.data.frame(posanova_c$statistics),
caption = "Estadísticos generales del modelo",
row.names = FALSE,
table.attr = "class='tabla-verde'") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)
| MSerror | Df | Mean | CV | t.value | LSD |
|---|---|---|---|---|---|
| 0.0817362 | 48 | 1.762308 | 16.22279 | 2.010635 | 0.2254674 |
kable(as.data.frame(posanova_c$parameters),
caption = "Parámetros de la prueba LSD",
row.names = FALSE,
table.attr = "class='tabla-verde'") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)
| test | p.ajusted | name.t | ntr | alpha |
|---|---|---|---|---|
| Fisher-LSD | none | Habitat | 4 | 0.05 |
grupos_tabla <- posanova_c$groups
grupos_tabla$Habitat <- rownames(grupos_tabla)
grupos_tabla <- grupos_tabla[, c("Habitat", "Shannon", "groups")]
kable(grupos_tabla,
caption = "Agrupamiento LSD — Tipo de hábitat",
col.names = c("Hábitat", "Shannon promedio", "Grupo"),
row.names = FALSE,
table.attr = "class='tabla-verde'") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)
| Hábitat | Shannon promedio | Grupo |
|---|---|---|
| Bosque primario | 2.467692 | a |
| Bosque secundario | 1.974615 | b |
| Sistema silvopastoril | 1.603077 | c |
| Potrero | 1.003846 | d |
El resultado del agrupamiento LSD es contundente: cada uno de los cuatro hábitats recibe una letra distinta (a, b, c, d), lo que significa que los cuatro difieren significativamente entre sí. No hay dos hábitats que se comporten igual —hay un gradiente claro y consistente de diversidad que va descendiendo a medida que aumenta la intervención antrópica.
🔍 Interpretación El ANOVA de una vía confirma diferencias altamente significativas en el Shannon según el tipo de hábitat (F(3,48) = 60.61, p < 0.001). Los supuestos del modelo se cumplieron sin problema —normalidad de residuales (Shapiro-Wilk, p = 0.463) y homogeneidad de varianzas (Levene, p = 0.293)—, lo que da plena confianza en el resultado. La prueba post-hoc de LSD, por su parte, muestra que los cuatro hábitats se diferencian entre sí de forma clara: el Bosque primario lidera con la mayor diversidad promedio (Shannon = 2.47), seguido del Bosque secundario (1.97), el Sistema silvopastoril (1.60) y, al final, el Potrero (1.00). En conjunto, esto confirma un efecto negativo, gradual y estadísticamente sólido de la intervención antrópica sobre la biodiversidad de anfibios.
🌿 Conclusiones
Sobre el análisis univariado (a): las tres variables se comportan de forma aproximadamente simétrica y sin valores atípicos. Lo más destacable es que la Riqueza (CV ≈ 45%) y el Shannon (CV ≈ 34%) varían mucho más que la Altitud (CV ≈ 14%), una pista temprana de que la biodiversidad no es homogénea entre parcelas, sino que responde a algo más —probablemente el hábitat.
Sobre el análisis bivariado (b): esa sospecha se confirma. Tanto la Riqueza como el Shannon caen de forma ordenada a lo largo del gradiente de intervención (Bosque primario > Bosque secundario > Sistema silvopastoril > Potrero). La Altitud sí correlaciona fuerte y positivamente con la diversidad (r = 0.752, p < 0.001), pero todo indica que esa relación está mezclada con el efecto del hábitat, ya que los bosques menos intervenidos ocupan justamente las zonas más altas de la reserva.
Sobre el ANOVA (c): el análisis estadístico formal respalda todo lo anterior. El tipo de hábitat genera diferencias altamente significativas en el Shannon (F(3,48) = 60.61, p < 0.001), con ambos supuestos del modelo cumplidos (Shapiro-Wilk, p = 0.463; Levene, p = 0.293). Y las comparaciones post-hoc (LSD) van más allá: no solo hay diferencias, sino que los cuatro hábitats son distintos entre sí, siguiendo el mismo orden decreciente (Bosque primario: 2.47 > Bosque secundario: 1.97 > Sistema silvopastoril: 1.60 > Potrero: 1.00).
En síntesis: la intervención antrópica sobre el suelo tiene un efecto negativo, claro y estadísticamente sólido sobre la biodiversidad de anfibios de la reserva. La diversidad se va perdiendo de forma progresiva a medida que se avanza de bosque primario a bosque secundario, a sistema silvopastoril y, finalmente, a potrero. Esto refuerza la importancia de conservar lo que queda de bosque primario y de frenar su conversión hacia sistemas más intervenidos, si se quiere proteger a la anfibiofauna local.
💡 Recomendaciones