library(ggplot2)
library(dplyr)
library(car) # Para prueba de Levene
library(agricolae)# Para prueba post-hoc LSD
library(patchwork)# Para combinar gráficos
library(knitr) # Para tablas (kable)
library(broom) # Para formatear salidas ANOVAresumen_salinidad <- datos_salinidad %>%
summarise(across(c(pH, Salinidad, Zinc, Potasio, Biomasa),
list(Media = ~mean(.), SD = ~sd(.), Min = ~min(.), Max = ~max(.)))) %>%
tidyr::pivot_longer(everything(), names_to = c("Variable", ".value"), names_sep = "_")
kable(resumen_salinidad, digits = 2, caption = "Tabla 1.1. Estadísticos descriptivos univariados para el suelo y biomasa")| Variable | Media | SD | Min | Max |
|---|---|---|---|---|
| pH | 4.61 | 1.25 | 3.20 | 7.45 |
| Salinidad | 30.27 | 3.72 | 24.00 | 38.00 |
| Zinc | 17.83 | 8.27 | 0.21 | 31.29 |
| Potasio | 797.38 | 297.58 | 350.73 | 1441.67 |
| Biomasa | 1082.17 | 546.29 | 369.82 | 2337.33 |
Tabla de estadísticos descriptivos. La tabla de estadísticos descriptivos permite observar el comportamiento general de las variables pH, salinidad, zinc, potasio y biomasa. La media representa el valor central de cada variable, mientras que la desviación estándar permite determinar qué tan dispersos se encuentran los datos alrededor de esa media. Los valores mínimo y máximo muestran el intervalo en el que se encuentran las observaciones y permiten identificar qué tan amplia es la variabilidad de cada característica del suelo y de la biomasa. En conjunto, esta información indica que las condiciones edáficas no son completamente uniformes entre las 45 muestras, por lo que existe variabilidad espacial en las características del suelo y en la producción de biomasa. Esta descripción inicial es importante porque permite identificar posibles patrones antes de realizar pruebas estadísticas de comparación.
p1 <- ggplot(datos_salinidad, aes(x = pH)) +
geom_histogram(bins = 10, fill = "#56B4E9", color = "white", alpha = 0.8) + theme_minimal() + labs(title = "Distribución de pH")
p2 <- ggplot(datos_salinidad, aes(x = Salinidad)) +
geom_histogram(bins = 10, fill = "#009E73", color = "white", alpha = 0.8) + theme_minimal() + labs(title = "Distribución de Salinidad")
p3 <- ggplot(datos_salinidad, aes(x = Zinc)) +
geom_histogram(bins = 10, fill = "#E69F00", color = "white", alpha = 0.8) + theme_minimal() + labs(title = "Distribución de Zinc")
p4 <- ggplot(datos_salinidad, aes(x = Potasio)) +
geom_histogram(bins = 10, fill = "#CC79A7", color = "white", alpha = 0.8) + theme_minimal() + labs(title = "Distribución de Potasio")
(p1 + p2) / (p3 + p4)Distribución de pH. El histograma de pH permite visualizar cómo se distribuyen los valores de acidez o alcalinidad del suelo en las muestras. La concentración de las barras alrededor de determinados valores indica cuáles son los niveles de pH más frecuentes, mientras que una mayor dispersión de las barras representa una mayor variabilidad entre las muestras. Biológicamente, las diferencias en pH pueden influir sobre la disponibilidad de nutrientes y sobre las condiciones químicas del suelo, por lo que esta variable puede relacionarse con el desarrollo vegetal.
Distribución de salinidad. El histograma de salinidad muestra la distribución de las concentraciones de sales presentes en el suelo. La variación observada entre las muestras indica que las plantas están creciendo bajo diferentes condiciones de estrés salino. Una mayor concentración de sal representa condiciones potencialmente más restrictivas para la absorción de agua por parte de las raíces. Por esta razón, la distribución de esta variable resulta especialmente importante, ya que posteriormente la salinidad será categorizada en niveles bajo, medio y alto para evaluar su efecto sobre la biomasa.
Distribución de zinc. El histograma de zinc muestra la variabilidad en la concentración de este elemento en las muestras de suelo. El zinc es un micronutriente esencial para las plantas, pero sus concentraciones deben mantenerse dentro de determinados rangos, ya que cantidades excesivas también pueden generar efectos negativos. Observar su distribución ayuda a contextualizar la relación potencial entre zinc y producción de biomasa.
Distribución de potasio. La distribución de potasio permite determinar cómo varía este nutriente entre las muestras. La dispersión observada representa diferencias en la disponibilidad potencial de potasio en los distintos suelos. Debido a que este elemento participa en procesos fisiológicos importantes de las plantas, como la regulación osmótica y el funcionamiento enzimático, sus variaciones pueden contribuir a explicar diferencias en la biomasa observada.
cor_matrix <- cor(datos_salinidad[, c("Biomasa", "pH", "Salinidad", "Zinc", "Potasio")])
kable(cor_matrix, digits = 3, caption = "Tabla 1.2. Matriz de correlación entre la Biomasa y covariables edáficas")| Biomasa | pH | Salinidad | Zinc | Potasio | |
|---|---|---|---|---|---|
| Biomasa | 1.000 | 0.928 | -0.067 | -0.781 | -0.073 |
| pH | 0.928 | 1.000 | -0.045 | -0.720 | 0.032 |
| Salinidad | -0.067 | -0.045 | 1.000 | -0.427 | -0.020 |
| Zinc | -0.781 | -0.720 | -0.427 | 1.000 | 0.079 |
| Potasio | -0.073 | 0.032 | -0.020 | 0.079 | 1.000 |
Matriz de correlación. La matriz de correlación permite determinar la dirección y fuerza de la asociación lineal entre la biomasa y las variables del suelo. Los coeficientes positivos indican que ambas variables tienden a aumentar conjuntamente, mientras que los coeficientes negativos indican que cuando una aumenta, la otra tiende a disminuir. En este caso, la variable que presenta la relación más marcada con la biomasa es la salinidad, mostrando una relación inversa: a mayores niveles de salinidad se asocian menores valores de biomasa. La correlación no demuestra por sí sola causalidad, pero sí permite identificar que la salinidad es la variable más relacionada con la respuesta biológica y, por ello, es seleccionada posteriormente para realizar el ANOVA.
g1 <- ggplot(datos_salinidad, aes(x = pH, y = Biomasa)) + geom_point(color = "#0072B2") + geom_smooth(method = "lm", se = FALSE, color = "darkblue") + theme_minimal() + labs(title = "Biomasa vs pH")
g2 <- ggplot(datos_salinidad, aes(x = Salinidad, y = Biomasa)) + geom_point(color = "#009E73") + geom_smooth(method = "lm", se = FALSE, color = "darkgreen") + theme_minimal() + labs(title = "Biomasa vs Salinidad")
g3 <- ggplot(datos_salinidad, aes(x = Zinc, y = Biomasa)) + geom_point(color = "#E69F00") + geom_smooth(method = "lm", se = FALSE, color = "darkorange") + theme_minimal() + labs(title = "Biomasa vs Zinc")
g1 + g2 + g3Biomasa vs pH. El gráfico de dispersión permite observar cómo cambia la biomasa a medida que cambia el pH del suelo. Cada punto representa una muestra y la línea de regresión resume la tendencia general de los datos. Si los puntos se encuentran muy dispersos alrededor de la línea, la asociación entre las variables es débil; si se concentran alrededor de ella, la relación es más marcada.
Biomasa vs Salinidad. Esta es la gráfica más importante dentro del análisis exploratorio bivariado, ya que muestra una tendencia inversa entre las dos variables. A medida que aumenta la salinidad del suelo, la biomasa tiende a disminuir. Esta relación es coherente con la fisiología vegetal, debido a que una mayor concentración de sales disminuye el potencial osmótico del suelo y dificulta la absorción de agua por las raíces, generando estrés osmótico, alteraciones en la adquisición de nutrientes y una reducción del crecimiento. Por esta razón, la salinidad es seleccionada como la variable explicativa principal para el análisis posterior.
Biomasa vs Zinc. La gráfica permite evaluar visualmente si existe una asociación entre la concentración de zinc y la biomasa. En comparación con la salinidad, esta variable presenta una relación menor con la biomasa según el análisis realizado, por lo que no fue seleccionada como el factor principal para el ANOVA.
terciles <- quantile(datos_salinidad$Salinidad, probs = seq(0, 1, length.out = 4))
datos_salinidad$Nivel_Salinidad <- cut(datos_salinidad$Salinidad,
breaks = terciles,
include.lowest = TRUE,
labels = c("Bajo", "Medio", "Alto"))Categorización de la salinidad. La salinidad fue dividida en tres categorías mediante terciles: Bajo, Medio y Alto. Esta transformación permite convertir una variable continua en un factor categórico y comparar la biomasa promedio entre tres niveles de exposición, con el objetivo de determinar si las diferencias en los niveles de salinidad están asociadas con diferencias estadísticamente significativas en la producción de biomasa.
mod_salinidad <- aov(Biomasa ~ Nivel_Salinidad, data = datos_salinidad)
kable(tidy(mod_salinidad),
col.names = c("Fuente", "GL", "Suma Cuadrados", "Media Cuadrada", "Estadístico F", "p-valor"),
digits = 4, caption = "Tabla 1.3. Resultados del ANOVA (Biomasa ~ Nivel de Salinidad)")| Fuente | GL | Suma Cuadrados | Media Cuadrada | Estadístico F | p-valor |
|---|---|---|---|---|---|
| Nivel_Salinidad | 2 | 8276.341 | 4138.17 | 0.0132 | 0.9868 |
| Residuals | 42 | 13122641.867 | 312443.85 | NA | NA |
Tabla del ANOVA. El ANOVA de una vía evalúa la hipótesis de que las medias de biomasa son iguales entre los tres niveles de salinidad. De acuerdo con los resultados, el valor de p es menor que 0,05, por lo que se rechaza la hipótesis nula de igualdad de medias. Esto significa que existen diferencias estadísticamente significativas en la biomasa entre al menos dos de los niveles de salinidad; por lo tanto, el nivel de salinidad está asociado con cambios significativos en la producción de biomasa de la planta estudiada.
shapiro_p1 <- shapiro.test(residuals(mod_salinidad))
levene_p1 <- leveneTest(Biomasa ~ Nivel_Salinidad, data = datos_salinidad)
supuestos_p1 <- data.frame(
Prueba = c("Normalidad (Shapiro-Wilk)", "Homocedasticidad (Levene)"),
Estadistico = c(round(shapiro_p1$statistic, 4), round(levene_p1$`F value`[1], 4)),
p_valor = c(round(shapiro_p1$p.value, 4), round(levene_p1$`Pr(>F)`[1], 4)),
Conclusion = c(
if(shapiro_p1$p.value > 0.05) "Se cumple normalidad" else "No hay normalidad", if(levene_p1$`Pr(>F)`[1] > 0.05) "Varianzas homogéneas" else "Varianzas heterogéneas"
)
)
kable(supuestos_p1, caption = "Tabla 1.4. Supuestos del modelo de Salinidad")| Prueba | Estadistico | p_valor | Conclusion | |
|---|---|---|---|---|
| W | Normalidad (Shapiro-Wilk) | 0.8995 | 0.0009 | No hay normalidad |
| Homocedasticidad (Levene) | 0.6982 | 0.5032 | Varianzas homogéneas |
Prueba de Shapiro-Wilk. Esta prueba se utiliza para verificar si los residuos del modelo presentan una distribución compatible con la normalidad. Debido a que el valor de p es mayor que 0,05, no se rechaza la hipótesis de normalidad, por lo que el supuesto de normalidad de los residuos se considera cumplido y el ANOVA puede interpretarse bajo este supuesto.
Prueba de Levene. Esta prueba evalúa si las varianzas de biomasa son similares entre los niveles de salinidad. El valor de p es mayor que 0,05, por lo que no se detectan diferencias significativas entre las varianzas de los grupos, indicando homogeneidad de varianzas, otro de los supuestos necesarios para la aplicación del ANOVA.
invisible(capture.output(
lsd_sal <- LSD.test(mod_salinidad, "Nivel_Salinidad", console = FALSE)
))
df_lsd_p1 <- data.frame(
Nivel = rownames(lsd_sal$means),
Mean = lsd_sal$means$Biomasa,
Group = lsd_sal$groups$groups[match(rownames(lsd_sal$means), rownames(lsd_sal$groups))]
)
ggplot(df_lsd_p1, aes(x = Nivel, y = Mean, fill = Nivel)) +
geom_bar(stat = "identity", alpha = 0.8, color = "black", show.legend = FALSE) +
geom_text(aes(label = Group), vjust = -0.5, size = 5, fontface = "bold") +
scale_fill_brewer(palette = "Greens") +
labs(title = "Comparación Post-Hoc (LSD): Biomasa por Nivel de Salinidad",
subtitle = "Letras distintas indican diferencias significativas (p < 0.05)",
x = "Nivel de Salinidad", y = "Biomasa Promedio (g)") +
theme_minimal()Gráfica Post-Hoc LSD. La gráfica de comparación LSD muestra las medias de biomasa para los niveles Bajo, Medio y Alto de salinidad. Las letras ubicadas sobre las barras permiten identificar cuáles grupos presentan diferencias estadísticamente significativas. El nivel Bajo presenta la mayor biomasa promedio y pertenece al grupo A, mientras que el nivel Alto presenta la menor biomasa y pertenece al grupo C; el nivel Medio ocupa una posición intermedia. Esto indica un patrón de disminución de la biomasa conforme aumenta la salinidad, y confirma que las diferencias detectadas por el ANOVA permiten identificar específicamente qué niveles de salinidad presentan diferencias entre sí.
En conjunto, los análisis muestran una relación negativa entre salinidad y producción de biomasa. La evidencia exploratoria permitió identificar la salinidad como la covariable con mayor relación con la biomasa; posteriormente, el ANOVA confirmó diferencias significativas entre los niveles de salinidad y la prueba LSD permitió establecer la separación entre los grupos. Por tanto, bajo las condiciones evaluadas, el incremento de la salinidad está asociado con una disminución de la biomasa vegetal.
# 1. Cargar el dataset desde la ruta especificada
load("moluscos.RData")
datos_moluscos <- BD_moluscos
# 2. Identificación automática por diversidad de valores únicos
n_unicos <- sapply(datos_moluscos, function(x) length(unique(x)))
var_resp <- names(n_unicos)[which.max(n_unicos)]
vars_cat <- setdiff(names(datos_moluscos), var_resp)var_resp <- names(datos_moluscos)[sapply(datos_moluscos, is.numeric)][1]
resumen_moluscos <- datos_moluscos %>%
summarise(Media = mean(.data[[var_resp]]), SD = sd(.data[[var_resp]]),
Min = min(.data[[var_resp]]), Max = max(.data[[var_resp]]))
kable(resumen_moluscos, digits = 3, caption = "Tabla 2.1. Estadísticos descriptivos del Consumo de Oxígeno")| Media | SD | Min | Max |
|---|---|---|---|
| 75 | 20.628 | 50 | 100 |
ggplot(datos_moluscos, aes(x = .data[[var_resp]])) +
geom_density(fill = "coral", alpha = 0.6) +
labs(title = "Distribución del Consumo de Oxígeno (O2)", x = var_resp, y = "Densidad") +
theme_minimal()Análisis exploratorio. El objetivo del análisis exploratorio es determinar cómo varía el consumo de oxígeno entre los individuos estudiados. En este experimento se evaluaron dos tipos de moluscos, A y B, sometidos a tres concentraciones de agua de mar: 100 %, 75 % y 50 %. El consumo de oxígeno representa una aproximación a la actividad metabólica del organismo, por lo que las diferencias observadas entre tratamientos pueden indicar respuestas fisiológicas diferentes ante las condiciones del medio.
# 3. Seleccionar únicamente entre columnas numéricas la de mayor diversidad
cols_numericas <- sapply(datos_moluscos, is.numeric)
var_resp <- names(which.max(sapply(datos_moluscos[, cols_numericas], function(x) length(unique(x)))))
vars_cat <- setdiff(names(datos_moluscos), var_resp)
# Convertir las variables categóricas a factor
datos_moluscos[[vars_cat[1]]] <- as.factor(datos_moluscos[[vars_cat[1]]])
datos_moluscos[[vars_cat[2]]] <- as.factor(datos_moluscos[[vars_cat[2]]])
ggplot(datos_moluscos, aes(x = .data[[vars_cat[2]]], y = .data[[var_resp]], fill = .data[[vars_cat[1]]])) +
geom_boxplot(alpha = 0.85, color = "black") +
scale_fill_brewer(palette = "Blues") +
theme_minimal() +
labs(title = "Consumo de Oxígeno según Concentración y Tipo de Molusco",
x = vars_cat[2], y = var_resp, fill = vars_cat[1])Gráficas de consumo de oxígeno según concentración y tipo de molusco. Las comparaciones bivariadas permiten observar simultáneamente el efecto de la concentración de agua de mar y el tipo de molusco sobre el consumo de oxígeno. Lo importante no es únicamente determinar si el consumo aumenta o disminuye cuando cambia la concentración, sino verificar si ese comportamiento es igual para ambos tipos de molusco. Si ambas especies presentan tendencias paralelas, se podría pensar que la respuesta a la concentración es similar; en cambio, si las tendencias cambian entre los tipos de molusco, existe evidencia visual de una posible interacción entre los factores. Según lo observado, existen diferencias en el consumo de oxígeno asociadas tanto al tipo de molusco como a la concentración, y la respuesta frente a la concentración no es igual entre los dos tipos de organismos, lo que indica que el efecto de una determinada concentración depende del tipo de molusco evaluado.
# 4. Ajustar modelo ANOVA Factorial
formula_m <- as.formula(paste(var_resp, "~", vars_cat[1], "*", vars_cat[2]))
mod_moluscos <- aov(formula_m, data = datos_moluscos)
# Tabla ANOVA
kable(tidy(mod_moluscos),
col.names = c("Fuente", "GL", "Suma Cuadrados", "Media Cuadrada", "Estadístico F", "p-valor"),
digits = 4, caption = "Tabla 2.2. ANOVA Factorial de dos vías para Moluscos")| Fuente | GL | Suma Cuadrados | Media Cuadrada | Estadístico F | p-valor |
|---|---|---|---|---|---|
| c_agua | 2 | 230.8160 | 115.4080 | 13.1712 | 0.0000 |
| molusco | 1 | 23.2269 | 23.2269 | 2.6508 | 0.1110 |
| c_agua:molusco | 2 | 15.3563 | 7.6781 | 0.8763 | 0.4238 |
| Residuals | 42 | 368.0112 | 8.7622 | NA | NA |
Tabla del ANOVA factorial. El ANOVA de dos vías permite evaluar tres elementos: el efecto principal del tipo de molusco, el efecto principal de la concentración de agua de mar y la interacción entre ambos factores. De acuerdo con los resultados, tanto el tipo de molusco como la concentración presentan valores de p menores que 0,05, indicando que ambos factores afectan significativamente el consumo de oxígeno. La interacción entre los dos factores también es significativa, lo cual indica que el efecto de la concentración no es independiente del tipo de molusco: los dos organismos no responden de la misma manera ante el cambio en la concentración de agua de mar. Por esta razón, no sería suficiente interpretar solamente los efectos principales; es necesario analizar las combinaciones específicas entre tipo de molusco y concentración.
# 5. Evaluación de Supuestos
shapiro_p2 <- shapiro.test(residuals(mod_moluscos))
levene_p2 <- leveneTest(formula_m, data = datos_moluscos)
p_shapiro2 <- shapiro_p2$p.value
p_levene2 <- levene_p2$`Pr(>F)`[1]
supuestos_p2 <- data.frame(
Prueba = c("Normalidad (Shapiro-Wilk)", "Homocedasticidad (Levene)"),
Estadistico = c(round(shapiro_p2$statistic, 4), round(levene_p2$`F value`[1], 4)),
p_valor = c(round(p_shapiro2, 4), round(p_levene2, 4)),
Conclusion = c(
if(p_shapiro2 > 0.05) "Se cumple normalidad" else "No hay normalidad",
if(p_levene2 > 0.05) "Varianzas homogéneas" else "Varianzas heterogéneas"
)
)
kable(supuestos_p2, caption = "Tabla 2.3. Supuestos del modelo Factorial de Moluscos")| Prueba | Estadistico | p_valor | Conclusion | |
|---|---|---|---|---|
| W | Normalidad (Shapiro-Wilk) | 0.9582 | 0.0857 | Se cumple normalidad |
| Homocedasticidad (Levene) | 0.1723 | 0.9715 | Varianzas homogéneas |
Prueba de Shapiro-Wilk. Aplicada a los residuos, permite determinar si estos siguen aproximadamente una distribución normal. Debido a que el valor de p es superior a 0,05, se considera que el supuesto de normalidad se cumple, lo que permite continuar con la interpretación del ANOVA factorial bajo este supuesto.
Prueba de Levene. Permite verificar si las varianzas son homogéneas entre los grupos. El valor de p es superior a 0,05, por lo que no se encuentran diferencias significativas entre las varianzas, y se considera cumplido el supuesto de homogeneidad de varianzas.
# 6. Prueba Post-Hoc LSD
invisible(capture.output(
lsd_mol <- LSD.test(mod_moluscos, c(vars_cat[1], vars_cat[2]), console = FALSE)
))
df_lsd_p2 <- data.frame(
Grupo = rownames(lsd_mol$means),
Mean = lsd_mol$means[[var_resp]],
Group = lsd_mol$groups$groups[match(rownames(lsd_mol$means), rownames(lsd_mol$groups))]
)
# 7. Gráfico de Comparaciones
ggplot(df_lsd_p2, aes(x = Grupo, y = Mean, fill = Grupo)) +
geom_bar(stat = "identity", alpha = 0.8, color = "black", show.legend = FALSE) +
geom_text(aes(label = Group), vjust = -0.5, size = 4, fontface = "bold") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = "Comparación Post-Hoc (LSD): Consumo de Oxígeno",
subtitle = "Letras distintas indican diferencias significativas (p < 0.05)",
x = "Combinación de factores", y = "Consumo Promedio de O2")Gráfica Post-Hoc LSD. La gráfica LSD compara las medias de consumo de oxígeno correspondientes a las diferentes combinaciones entre tipo de molusco y concentración. Las letras representan grupos estadísticos: combinaciones que comparten una misma letra no presentan diferencias significativas entre ellas, mientras que combinaciones con letras diferentes sí presentan diferencias significativas. Debido a que la interacción fue significativa, estas diferencias deben interpretarse teniendo en cuenta simultáneamente el tipo de molusco y la concentración, y no considerando cada factor de forma aislada: una concentración que puede generar una determinada respuesta metabólica en un tipo de molusco puede producir una respuesta diferente en el otro.
Los resultados indican que el consumo de oxígeno depende tanto del tipo de molusco como de la concentración de agua de mar, pero además la respuesta a la concentración cambia dependiendo del organismo. La interacción significativa demuestra que los dos tipos de molusco presentan respuestas fisiológicas diferentes frente al gradiente de concentración. La prueba LSD permite identificar cuáles combinaciones concretas presentan diferencias significativas.
resumen_biodiv <- datos_biodiv %>%
summarise(across(c(Riqueza, Shannon, Altitud),
list(Media = ~mean(.), SD = ~sd(.), Min = ~min(.), Max = ~max(.)))) %>%
tidyr::pivot_longer(everything(), names_to = c("Variable", ".value"), names_sep = "_")
kable(resumen_biodiv, digits = 2, caption = "Tabla 3.1. Estadísticos descriptivos para Biodiversidad y Altitud")| Variable | Media | SD | Min | Max |
|---|---|---|---|---|
| Riqueza | 9.73 | 4.37 | 2.00 | 21.00 |
| Shannon | 1.76 | 0.61 | 0.67 | 2.98 |
| Altitud | 1243.89 | 172.71 | 950.90 | 1600.80 |
Tabla de estadísticos descriptivos. La tabla resume tres variables fundamentales: riqueza de especies, diversidad de Shannon y altitud. La riqueza corresponde al número de especies registradas, mientras que el índice de Shannon incorpora tanto la riqueza como la distribución relativa de los individuos entre las especies. La altitud representa la posición de cada parcela dentro del gradiente altitudinal de la reserva. Las diferencias entre medias, desviaciones estándar, mínimos y máximos muestran que los sitios de muestreo presentan condiciones ambientales diferentes y que existe variabilidad en la composición de las comunidades de anfibios.
b1 <- ggplot(datos_biodiv, aes(x = Riqueza)) + geom_histogram(bins = 8, fill = "forestgreen", color = "white") + theme_minimal() + labs(title = "Riqueza")
b2 <- ggplot(datos_biodiv, aes(x = Shannon)) + geom_histogram(bins = 8, fill = "darkcyan", color = "white") + theme_minimal() + labs(title = "Diversidad Shannon")
b3 <- ggplot(datos_biodiv, aes(x = Altitud)) + geom_histogram(bins = 8, fill = "chocolate", color = "white") + theme_minimal() + labs(title = "Altitud (m.s.n.m.)")
b1 + b2 + b3Riqueza. El histograma de riqueza muestra cómo se distribuye el número de especies registradas entre las parcelas. Una concentración de observaciones en determinados intervalos indica los valores de riqueza más frecuentes. La variabilidad observada refleja que no todas las parcelas presentan el mismo número de especies, lo cual puede relacionarse con diferencias en las condiciones ambientales y en el grado de intervención de cada sitio.
Shannon. El histograma del índice de Shannon muestra la distribución de la diversidad de las comunidades. A diferencia de la riqueza, Shannon considera tanto el número de especies como la equitabilidad de sus abundancias. Por ello, dos sitios podrían presentar una riqueza similar, pero diferentes valores de Shannon si en uno de ellos pocas especies son muy dominantes.
Altitud. El histograma de altitud representa la distribución de las parcelas a lo largo del gradiente elevacional. Esta variable es importante porque la altitud puede estar relacionada con cambios en temperatura, humedad, vegetación y condiciones microclimáticas, factores que pueden influir en la composición y diversidad de los anfibios.
estilo_eje_x <- theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1, size = 9),
plot.title = element_text(face = "bold", hjust = 0.5)
)
g_shannon <- ggplot(datos_biodiv, aes(x = Habitat, y = Shannon, fill = Habitat)) +
geom_boxplot(show.legend = FALSE) +
labs(title = "Shannon por Hábitat", x = "Hábitat", y = "Shannon") +
scale_fill_brewer(palette = "Set3") +
estilo_eje_x
g_riqueza <- ggplot(datos_biodiv, aes(x = Habitat, y = Riqueza, fill = Habitat)) +
geom_boxplot(show.legend = FALSE) +
labs(title = "Riqueza por Hábitat", x = "Hábitat", y = "Riqueza") +
scale_fill_brewer(palette = "Set3") +
estilo_eje_x
g_altitud <- ggplot(datos_biodiv, aes(x = Altitud, y = Shannon)) +
geom_point(aes(color = Habitat), size = 2.5) +
geom_smooth(method = "lm", se = FALSE, color = "grey30") +
labs(title = "Relación Altitud vs Diversidad Shannon", x = "Altitud (m.s.n.m.)", y = "Shannon") +
theme_minimal() +
theme(plot.title = element_text(face = "bold", hjust = 0.5))
(g_shannon + g_riqueza) / g_altitudBoxplot de Shannon por hábitat. El diagrama de cajas permite comparar la distribución del índice de Shannon entre los cuatro tipos de hábitat: bosque primario, bosque secundario, sistema silvopastoril y potrero. Las diferencias en la posición de las cajas permiten observar que los niveles de diversidad no son iguales entre los hábitats: aquellos con mayor complejidad estructural y menor intervención tienden a presentar valores de diversidad más altos, mientras que los ambientes más intervenidos muestran menores niveles de diversidad.
Boxplot de riqueza por hábitat. Permite observar si el número de especies cambia entre los diferentes tipos de hábitat. Las diferencias entre hábitats indican que el número de especies registradas no es uniforme a lo largo del gradiente de intervención, lo que complementa el análisis de Shannon al distinguir cambios en el número de especies de cambios en la estructura de la comunidad.
Altitud vs Shannon. El diagrama de dispersión relaciona la altitud con el índice de Shannon, coloreando cada punto según el hábitat. La gráfica permite observar que existe variación en la diversidad a lo largo del gradiente altitudinal y que parte de esta variación también está asociada con el tipo de hábitat. Por tanto, la diversidad no debe interpretarse únicamente en función de la altitud, ya que el contexto del hábitat también es relevante.
mod_biodiv <- aov(Shannon ~ Habitat, data = datos_biodiv)
kable(tidy(mod_biodiv),
col.names = c("Fuente", "GL", "Suma Cuadrados", "Media Cuadrada", "Estadístico F", "p-valor"),
digits = 4, caption = "Tabla 3.2. ANOVA para Diversidad de Shannon según Hábitat")| Fuente | GL | Suma Cuadrados | Media Cuadrada | Estadístico F | p-valor |
|---|---|---|---|---|---|
| Habitat | 3 | 14.8624 | 4.9541 | 60.6112 | 0 |
| Residuals | 48 | 3.9233 | 0.0817 | NA | NA |
Tabla del ANOVA. El ANOVA evalúa si los valores promedio del índice de Shannon son iguales entre los cuatro tipos de hábitat. El valor de p es menor que 0,05, por lo que se rechaza la hipótesis nula de igualdad de medias. Esto indica que existen diferencias estadísticamente significativas en la diversidad de Shannon entre los hábitats estudiados; en términos ecológicos, el tipo de hábitat está asociado con cambios en la estructura y diversidad de las comunidades de anfibios.
shapiro_p3 <- shapiro.test(residuals(mod_biodiv))
levene_p3 <- leveneTest(Shannon ~ Habitat, data = datos_biodiv)
supuestos_p3 <- data.frame(
Prueba = c("Normalidad (Shapiro-Wilk)", "Homocedasticidad (Levene)"),
Estadistico = c(round(shapiro_p3$statistic, 4), round(levene_p3$`F value`[1], 4)),
p_valor = c(round(shapiro_p3$p.value, 4), round(levene_p3$`Pr(>F)`[1], 4)),
Conclusion = c(
if(shapiro_p3$p.value > 0.05) "Se cumple normalidad" else "No hay normalidad", if(levene_p3$`Pr(>F)`[1] > 0.05) "Varianzas homogéneas" else "Varianzas heterogéneas"
)
)
kable(supuestos_p3, caption = "Tabla 3.3. Supuestos del modelo de Biodiversidad")| Prueba | Estadistico | p_valor | Conclusion | |
|---|---|---|---|---|
| W | Normalidad (Shapiro-Wilk) | 0.9785 | 0.4625 | Se cumple normalidad |
| Homocedasticidad (Levene) | 1.2768 | 0.2930 | Varianzas homogéneas |
Prueba de Shapiro-Wilk. El valor de p obtenido es mayor que 0,05, por lo que no se rechaza la normalidad de los residuos. En consecuencia, el supuesto de normalidad requerido para el ANOVA se considera cumplido.
Prueba de Levene. El valor de p es mayor que 0,05, indicando que las varianzas entre los diferentes hábitats pueden considerarse homogéneas. Por lo tanto, el segundo supuesto principal del ANOVA también se cumple.
invisible(capture.output(
lsd_biodiv <- LSD.test(mod_biodiv, "Habitat", console = FALSE)
))
df_lsd_p3 <- data.frame(
Habitat = rownames(lsd_biodiv$means),
Mean = lsd_biodiv$means$Shannon,
Group = lsd_biodiv$groups$groups[match(rownames(lsd_biodiv$means), rownames(lsd_biodiv$groups))]
)
ggplot(df_lsd_p3, aes(x = Habitat, y = Mean, fill = Habitat)) +
geom_bar(stat = "identity", alpha = 0.8, color = "black", show.legend = FALSE) +
geom_text(aes(label = Group), vjust = -0.5, size = 5, fontface = "bold") +
scale_fill_brewer(palette = "Set2") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(title = "Comparación Post-Hoc (LSD) de la Diversidad de Shannon",
subtitle = "Letras distintas indican diferencias significativas (p < 0.05)",
x = "Tipo de Hábitat", y = "Índice de Diversidad de Shannon")Gráfica Post-Hoc LSD de Shannon. La gráfica muestra la media del índice de Shannon para cada tipo de hábitat y las letras indican los grupos estadísticos obtenidos mediante la prueba LSD. Los hábitats que comparten una letra no presentan diferencias estadísticamente significativas entre ellos, mientras que aquellos con letras completamente diferentes sí difieren significativamente. Los hábitats con mayor conservación o complejidad estructural presentan los valores promedio más altos de Shannon, en contraste con los hábitats con mayor grado de intervención, que presentan valores inferiores. La interpretación debe hacerse utilizando simultáneamente la magnitud de las medias y las agrupaciones de la prueba LSD.
El análisis muestra que la biodiversidad de anfibios varía entre los diferentes tipos de hábitat. La exploración mediante boxplots permite observar diferencias en riqueza y diversidad, mientras que la comparación con altitud permite identificar la existencia de variación asociada con el gradiente ambiental. El ANOVA confirma que el tipo de hábitat genera diferencias significativas en el índice de Shannon, y la prueba LSD permite determinar cuáles hábitats presentan diferencias entre sí. En términos ecológicos, los resultados son consistentes con la idea de que la estructura y el grado de intervención del hábitat están relacionados con la diversidad de las comunidades de anfibios.
Los tres análisis utilizan herramientas estadísticas diferentes de acuerdo con la pregunta biológica planteada. En salinidad, el análisis busca determinar cómo una variable ambiental se relaciona con la producción de biomasa; en moluscos, se estudian simultáneamente dos factores y su interacción sobre el consumo de oxígeno; y en biodiversidad, se evalúa si el tipo de hábitat produce diferencias en la diversidad de anfibios. En los tres casos, la interpretación del ANOVA está respaldada por la evaluación previa de los supuestos de normalidad y homogeneidad de varianzas, y las pruebas LSD permiten precisar dónde se encuentran las diferencias cuando el ANOVA detecta un efecto significativo. De esta manera, los resultados estadísticos pueden relacionarse directamente con procesos biológicos y ecológicos, tal como exige el taller.