library(table1)
library(tidyr)
library(dplyr)
library(ggplot2)
library(kableExtra)
library(knitr)
library(car)ruta <- "C:/Users/Usuario/Documents/UNIVERSIDAD/SEMESTRE IV/DISENO/taller 1-20260915T164645Z-1-001/taller 1"
load(file.path(ruta, "Salinidad.RData"))
load(file.path(ruta, "moluscos.RData"))
load(file.path(ruta, "Biodiversidad.RData"))
ls()## [1] "BD_biodiversidad" "BD_moluscos" "ruta" "Salinidad"
Para estudiar la relación entre ciertas características del suelo y la producción de biomasa de una planta forrajera natural se obtuvieron 45 muestras en diferentes ambientes. En cada muestra se estimó la biomasa (variable respuesta \(Y\)) y se registraron las características del suelo (pH, Salinidad, Zinc y Potasio, covariables \(X\)).
Tabla 1. Estadísticas descriptivas de las variables del suelo (N = 45).
| Overall (N=45) |
|
|---|---|
| Biomasa | |
| Mean (SD) | 1080 (546) |
| Median [Min, Max] | 992 [370, 2340] |
| pH | |
| Mean (SD) | 4.61 (1.25) |
| Median [Min, Max] | 4.45 [3.20, 7.45] |
| Salinidad | |
| Mean (SD) | 30.3 (3.72) |
| Median [Min, Max] | 30.0 [24.0, 38.0] |
| Zinc | |
| Mean (SD) | 17.8 (8.27) |
| Median [Min, Max] | 19.2 [0.211, 31.3] |
| Potasio | |
| Mean (SD) | 797 (298) |
| Median [Min, Max] | 773 [351, 1440] |
Salinidad_larga <- Salinidad %>% pivot_longer(cols = c(Biomasa, pH, Salinidad, Zinc, Potasio), names_to = "Variable", values_to = "Valor")
ggplot(Salinidad_larga, aes(x = "", y = Valor, fill = Variable)) + geom_boxplot(alpha = 0.8, outlier.shape = 1, width = 0.5) + geom_jitter(width = 0.12, alpha = 0.4, size = 1.5, color = "gray30") + facet_wrap(~ Variable, scales = "free_y", ncol = 3) + scale_fill_manual(values = c("#bfd3e6", "#9ebcda", "#8c96c6", "#8856a7", "#810f7c")) + labs(x = NULL, y = "Valor", title = "Distribucion univariada de las variables del suelo") + theme_minimal(base_size = 12) + theme(axis.text.x = element_blank(), axis.ticks.x = element_blank(), panel.grid.major.x = element_blank(), panel.grid.minor = element_blank(), strip.text = element_text(face = "bold", size = 11), plot.title = element_text(face = "bold", size = 13), legend.position = "none")ggplot(Salinidad_larga, aes(x = Valor, fill = Variable)) + geom_histogram(bins = 10, color = "white", alpha = 0.85) + facet_wrap(~ Variable, scales = "free", ncol = 3) + scale_fill_manual(values = c("#bfd3e6", "#9ebcda", "#8c96c6", "#8856a7", "#810f7c")) + labs(x = "Valor", y = "Frecuencia", title = "Distribucion de las variables del suelo") + theme_minimal(base_size = 12) + theme(strip.text = element_text(face = "bold", size = 11), panel.spacing = unit(1.2, "lines"), panel.grid.minor = element_blank(), plot.title = element_text(face = "bold", size = 13), legend.position = "none")La Biomasa (media = 1080 g; mediana = 992 g) y el Potasio (media = 797; mediana = 773) presentan alta variabilidad y una ligera asimetría positiva, con medias superiores a las medianas, lo cual indica la influencia de observaciones elevadas sobre el promedio. En el caso de la Biomasa, esto es habitual en variables biológicas de producción, donde la mayoría de las muestras rinde valores intermedios y solo unas pocas alcanzan rendimientos sobresalientes; la desviación estándar (546 g) confirma que las condiciones entre muestras fueron heterogéneas. El pH (media = 4.61; mediana = 4.45) muestra una distribución bimodal, con un grupo principal en el rango ácido (3.2–5.5) y un segundo grupo cercano a la neutralidad (hasta 7.45). Esto sugiere que las muestras provienen de al menos dos condiciones edáficas distintas, lo cual anticipa que la categorización en niveles podría capturar diferencias reales entre grupos de suelo y explica por qué el pH podría tener una relación fuerte con la biomasa. La Salinidad (media = 30.3; mediana = 30.0) se comporta de forma homogénea, sin valores atípicos evidentes, lo cual indica que este factor no introdujo variabilidad importante en el conjunto de muestras. El Zinc (media = 17.8; mediana = 19.2) concentra sus valores hacia el extremo superior y presenta un valor marcadamente bajo (0.211) identificado como atípico.
Salinidad_bivariado <- Salinidad %>% pivot_longer(cols = c(pH, Salinidad, Zinc), names_to = "Covariable", values_to = "Valor")
ggplot(Salinidad_bivariado, aes(x = Valor, y = Biomasa, color = Covariable)) + geom_point(alpha = 0.7, size = 2) + geom_smooth(method = "lm", se = TRUE, linewidth = 1) + facet_wrap(~ Covariable, scales = "free_x") + scale_color_manual(values = c("#8c96c6", "#8856a7", "#810f7c")) + labs(x = NULL, y = "Biomasa", title = "Relacion entre Biomasa y cada covariable del suelo") + theme_minimal(base_size = 12) + theme(strip.text = element_text(face = "bold", size = 11), panel.grid.minor = element_blank(), plot.title = element_text(face = "bold", size = 13), legend.position = "none")cor_ph <- cor(Salinidad$Biomasa, Salinidad$pH, use = "complete.obs")
cor_zinc <- cor(Salinidad$Biomasa, Salinidad$Zinc, use = "complete.obs")
cor_salinidad <- cor(Salinidad$Biomasa, Salinidad$Salinidad, use = "complete.obs")
tabla_cor <- data.frame(Covariable = c("pH", "Zinc", "Salinidad"), r = round(c(cor_ph, cor_zinc, cor_salinidad), 3), Fuerza = c("Muy fuerte", "Fuerte", "Muy débil"), Dirección = ifelse(c(cor_ph, cor_zinc, cor_salinidad) > 0, "Positiva", "Negativa"))
knitr::kable(tabla_cor, caption = "Tabla 2. Correlaciones de Pearson entre Biomasa y cada covariable del suelo.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Covariable | r | Fuerza | Dirección |
|---|---|---|---|
| pH | 0.928 | Muy fuerte | Positiva |
| Zinc | -0.781 | Fuerte | Negativa |
| Salinidad | -0.067 | Muy débil | Negativa |
La Biomasa muestra una relación fuerte, positiva y prácticamente lineal con el pH (\(r = 0.928\)), lo cual indica que a medida que el pH del suelo se incrementa, la biomasa tiende a aumentar de manera proporcional y consistente. La relación entre Biomasa y Zinc es fuerte y negativa (\(r = -0.781\)), lo que sugiere que a mayores concentraciones de Zinc en el suelo la biomasa tiende a disminuir. No obstante, conviene tener en cuenta el valor atípico detectado en el análisis univariado (0.211), que podría estar influyendo sobre el coeficiente de correlación. La relación entre Biomasa y Salinidad es muy débil y ligeramente negativa (\(r = -0.067\)), lo cual indica ausencia de asociación lineal entre ambas variables. Esto es consistente con el comportamiento homogéneo observado en el análisis univariado y sugiere que, dentro del rango de salinidad presente en las muestras, este factor no está modulando de forma apreciable la producción de biomasa.
Con base en estos resultados, se concluye que el pH es la covariable con mayor asociación con la producción de biomasa y, por lo tanto, la variable sobre la cual se construirá el ANOVA del literal c.
Se categoriza el pH en tres niveles etiquetados como Acidez alta, Acidez media y Acidez baja, usando los terciles (33.3% y 66.7%) como criterio de corte. Esto garantiza grupos balanceados (15 observaciones por nivel) y facilita la interpretación agronómica.
Salinidad <- Salinidad %>% mutate(Nivel_pH = cut(pH, breaks = quantile(pH, probs = c(0, 1/3, 2/3, 1), na.rm = TRUE), labels = c("Acidez alta", "Acidez media", "Acidez baja"), include.lowest = TRUE))
tabla_niveles_ph <- as.data.frame(table(Nivel_pH = Salinidad$Nivel_pH))
knitr::kable(tabla_niveles_ph, col.names = c("Nivel de acidez", "Frecuencia"), caption = "Tabla 3. Numero de observaciones por nivel de acidez del suelo.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Nivel de acidez | Frecuencia |
|---|---|
| Acidez alta | 15 |
| Acidez media | 15 |
| Acidez baja | 15 |
medias_pH <- aggregate(Biomasa ~ Nivel_pH, data = Salinidad, FUN = mean)
knitr::kable(medias_pH, digits = 3, caption = "Tabla 4. Medias de biomasa por nivel de acidez del suelo.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Nivel_pH | Biomasa |
|---|---|
| Acidez alta | 593.023 |
| Acidez media | 1048.109 |
| Acidez baja | 1605.385 |
ggplot(Salinidad, aes(x = Nivel_pH, y = Biomasa, fill = Nivel_pH)) + geom_boxplot(alpha = 0.8, outlier.shape = 1, width = 0.5) + geom_jitter(width = 0.12, alpha = 0.4, size = 1.5, color = "gray30") + scale_fill_manual(values = c("#bfd3e6", "#8c96c6", "#810f7c")) + labs(x = "Nivel de pH del suelo", y = "Biomasa (g)", title = "Biomasa por nivel de acidez del suelo") + theme_minimal(base_size = 12) + theme(panel.grid.minor = element_blank(), panel.grid.major.x = element_blank(), plot.title = element_text(face = "bold", size = 13), legend.position = "none")modelo <- aov(Biomasa ~ Nivel_pH, data = Salinidad)
tabla_anova <- as.data.frame(summary(modelo)[[1]])
knitr::kable(tabla_anova, digits = 4, caption = "Tabla 5. Tabla ANOVA: Biomasa ~ Nivel_pH.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Df | Sum Sq | Mean Sq | F value | Pr(>F) | |
|---|---|---|---|---|---|
| Nivel_pH | 2 | 7712683 | 3856341.6 | 29.8928 | 0 |
| Residuals | 42 | 5418235 | 129005.6 | NA | NA |
## [1] 0.5873682
El efecto del nivel de acidez del suelo sobre la biomasa resulta altamente significativo (\(F_{2,42} = 29.89\); \(p = 8.45 \times 10^{-9}\)), con un tamaño de efecto grande (\(\eta^2 = 0.587\)), lo que indica que el nivel de pH explica aproximadamente el 58.7% de la variabilidad de la biomasa. Las medias fueron: Acidez alta = 593.0 g, Acidez media = 1048.1 g y Acidez baja = 1605.4 g, evidenciando un gradiente creciente conforme disminuye la acidez.
shapiro_res <- shapiro.test(residuals(modelo))
bartlett_res <- bartlett.test(Biomasa ~ Nivel_pH, data = Salinidad)
tabla_supuestos <- data.frame(Prueba = c("Shapiro-Wilk", "Bartlett"), Estadistico = c(sprintf("W = %.3f", shapiro_res$statistic), sprintf("K2 = %.2f", bartlett_res$statistic)), p_valor = c(sprintf("%.3f", shapiro_res$p.value), formatC(bartlett_res$p.value, format = "e", digits = 2)), Conclusion = c("No se rechaza normalidad", "Se rechaza homocedasticidad"))
knitr::kable(tabla_supuestos, caption = "Tabla 6. Pruebas de supuestos del modelo del Punto 1.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Prueba | Estadistico | p_valor | Conclusion |
|---|---|---|---|
| Shapiro-Wilk | W = 0.973 | 0.375 | No se rechaza normalidad |
| Bartlett | K2 = 20.08 | 4.35e-05 | Se rechaza homocedasticidad |
Los residuales cumplen normalidad (Shapiro-Wilk: \(W = 0.973\); \(p = 0.375\)), pero no homogeneidad de varianzas (Bartlett: \(K^2 = 20.08\); \(p = 4.35 \times 10^{-5}\)). Dado el balanceo de los grupos (\(n = 15\) por nivel), el ANOVA es robusto a esta violación; se recomienda complementar con ANOVA de Welch o Kruskal-Wallis como análisis de sensibilidad.
resultado_LSD <- pairwise.t.test(Salinidad$Biomasa, Salinidad$Nivel_pH, p.adjust.method = "none")
tabla_lsd <- as.data.frame(resultado_LSD$p.value)
tabla_lsd <- cbind(Comparación = rownames(tabla_lsd), tabla_lsd)
rownames(tabla_lsd) <- NULL
tabla_lsd[, -1] <- lapply(
tabla_lsd[, -1],
function(x) formatC(x, format = "e", digits = 1))
knitr::kable(tabla_lsd, digits = 5, caption = "Tabla 7. Valores p de comparaciones pareadas LSD para el Punto 1.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Comparación | Acidez alta | Acidez media |
|---|---|---|
| Acidez media | 1.2e-03 | NA |
| Acidez baja | 1.4e-09 | 1.2e-04 |
La prueba LSD muestra que todos los pares de niveles de acidez difieren significativamente entre sí: Acidez alta vs Acidez media (\(p = 0.00122\)), Acidez alta vs Acidez baja (\(p = 1.4 \times 10^{-9}\)) y Acidez media vs Acidez baja (\(p = 0.00012\)). La biomasa aumenta de forma escalonada conforme disminuye la acidez del suelo, sin que el efecto se estabilice dentro del rango evaluado.
El análisis de los tres literales permite sacar una conclusión general sobre cómo las características del suelo afectan la producción de biomasa en la planta forrajera. En el análisis univariado (literal a) se vio que la Biomasa y el Potasio tienen mucha variación y una ligera tendencia hacia valores altos, lo que indica que las condiciones entre las 45 muestras no fueron iguales. La Salinidad se comportó de forma estable, sin valores raros. El pH mostró una distribución bimodal, uno en el rango ácido y otro cerca de la neutralidad. El Zinc tuvo un valor muy bajo (0.211) que se sale de lo normal y que conviene revisar antes de sacar conclusiones sobre esa variable.
En el análisis bivariado (literal b) se encontró que la Biomasa tiene una relación fuerte y positiva con el pH (\(r = 0.928\)), una relación fuerte y negativa con el Zinc (\(r = -0.781\)) y una relación casi nula con la Salinidad (\(r = -0.067\)). El hecho de que la correlación con el pH sea tan alta (prácticamente 1) significa que el pH y la biomasa se mueven casi juntos: donde el pH es más alto, la biomasa es más alta, y viceversa. Esto puede tener una explicación agronómica. En suelos muy ácidos, la acidez libera aluminio, que daña las raíces y reduce la capacidad de la planta para absorber agua y nutrientes; además, nutrientes esenciales como el fósforo, el calcio y el magnesio se vuelven menos disponibles. Cuando el pH sube hacia valores cercanos a la neutralidad, esas limitaciones desaparecen y la planta puede crecer mejor. La relación negativa con el Zinc también tiene sentido biológico, ya que el Zinc es un micronutriente necesario, pero en concentraciones altas puede ser tóxico y afectar el crecimiento. La Salinidad, en cambio, no mostró relación con la biomasa, lo cual indica que, dentro del rango observado, este factor no está afectando la producción. Con estos resultados se concluyó que el pH es la variable del suelo más relacionada con la producción de biomasa.
En el ANOVA (literal c) se dividió el pH en tres niveles: Acidez alta, Acidez media y Acidez baja. El modelo mostró diferencias muy significativas entre los niveles (\(F = 29.89; gl = 2, 42; p = 8.45\times 10^{-9}\)), con un tamaño de efecto grande (\(\eta^2 = 0.587\)), lo que significa que el pH explica cerca del 58.7% de la variación en la biomasa. Que el pH por sí solo explique casi el 60% de la variación indica que la acidez del suelo es un factor determinante para esta planta forrajera. Las medias fueron: Acidez alta = 593.0 g, Acidez media = 1048.1 g y Acidez baja = 1605.4 g, mostrando que la biomasa sube a medida que el suelo es menos ácido. La diferencia es enorme: pasar de un suelo muy ácido a uno poco ácido casi triplica la biomasa producida. La prueba LSD confirmó que todos los niveles difieren entre sí (Acidez alta vs media: \(p = 0.00122\); Acidez alta vs baja: \(p = 1.4\times10^{-9}\); Acidez media vs baja: \(p = 0.00012\)). Esto quiere decir que no hay un punto de saturación.
Sobre los supuestos, los residuales cumplieron normalidad (\(Shapiro-Wilk: W = 0.973; p = 0.375\)) pero no homogeneidad de varianzas (\(Bartlett: K² = 20.08; p = 4.35\times 10^{-5}\)), lo cual se vio también en los gráficos de diagnóstico, donde la dispersión de los residuales crece con el pH. Esto significa que en los suelos menos ácidos la biomasa no solo es mayor en promedio, sino también más variable: algunas parcelas producen mucho y otras no tanto. Aun así, como los grupos son del mismo tamaño (n = 15 cada uno), el ANOVA sigue siendo confiable, porque el balanceo compensa la falta de homogeneidad.
En resumen, el pH es el factor del suelo que más influye en la producción de biomasa: mientras menos ácido sea el suelo, mayor es la biomasa obtenida. Biológicamente, esto se explica porque los suelos ácidos limitan la disponibilidad de nutrientes y favorecen la presencia de elementos tóxicos como el aluminio, mientras que los suelos cercanos a la neutralidad permiten que la planta aproveche mejor los recursos del suelo. Esto tiene implicaciones prácticas para el manejo agronómico, si se quiere aumentar la producción de biomasa, una de las primeras acciones debería ser corregir la acidez del suelo.
Se evaluó el consumo de oxígeno en dos tipos de moluscos (A y B) expuestos a distintas concentraciones de agua de mar (c_agua: 50, 75 y 100), con el fin de determinar si el tipo de molusco y la concentración del agua afectan el consumo de oxígeno, y si existe interacción entre ambos factores.
Tabla 8. Estadísticas descriptivas del consumo de oxígeno por tipo de molusco.
| A (N=24) |
B (N=24) |
Overall (N=48) |
|
|---|---|---|---|
| Consumo de oxígeno | |||
| Mean (SD) | 10.0 (3.27) | 8.61 (4.00) | 9.30 (3.68) |
| Median [Min, Max] | 9.74 [5.20, 18.8] | 8.06 [1.80, 17.7] | 9.70 [1.80, 18.8] |
knitr::kable(medias_pH, digits = 3, caption = "Tabla 4. Medias de biomasa por nivel de acidez del suelo.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Nivel_pH | Biomasa |
|---|---|
| Acidez alta | 593.023 |
| Acidez media | 1048.109 |
| Acidez baja | 1605.385 |
ggplot(BD_moluscos, aes(x = molusco, y = cons_o, fill = molusco)) + geom_boxplot(alpha = 0.8, outlier.shape = 1, width = 0.5) + geom_jitter(width = 0.12, alpha = 0.4, size = 1.5, color = "gray30") + scale_fill_manual(values = c("#67a9cf", "#02818a")) + labs(x = "Molusco", y = "Consumo de oxigeno", title = "Consumo de oxigeno por tipo de molusco") + theme_minimal(base_size = 12) + theme(panel.grid.minor = element_blank(), panel.grid.major.x = element_blank(), plot.title = element_text(face = "bold", size = 13), legend.position = "none")ggplot(BD_moluscos, aes(x = cons_o, fill = molusco)) + geom_histogram(bins = 10, color = "white", alpha = 0.85) + facet_wrap(~ molusco, scales = "free_y") + scale_fill_manual(values = c("#67a9cf", "#02818a")) + labs(x = "Consumo de oxigeno", y = "Frecuencia", title = "Distribucion del consumo de oxigeno por molusco") + theme_minimal(base_size = 12) + theme(strip.text = element_text(face = "bold", size = 11), panel.grid.minor = element_blank(), plot.title = element_text(face = "bold", size = 13), legend.position = "none")El molusco A presenta un consumo medio de oxígeno de 10.0 con desviación estándar de 3.27, mientras que el molusco B tiene una media de 8.61 con desviación estándar de 4.00. Las medianas son 9.74 y 8.06 respectivamente, lo cual muestra que el molusco A tiende a consumir un poco más de oxígeno en promedio, aunque la diferencia no es muy grande. La dispersión es mayor en el molusco B, lo cual indica que sus respuestas fueron más variables. En el molusco A se observa un valor atípico alto (18.8), mientras que en el molusco B el rango es más amplio hacia valores bajos (mínimo 1.80). Los histogramas muestran que la distribución del consumo de oxígeno no es perfectamente simétrica en ninguno de los dos grupos.
medianas_cons_o <- BD_moluscos %>%
group_by(c_agua, molusco) %>%
summarise(
Mediana = median(cons_o, na.rm = TRUE),
.groups = "drop"
) %>%
rename(
`Concentración de agua` = c_agua,
`Molusco` = molusco
)
knitr::kable(
medianas_cons_o,
digits = 3,
caption = "Tabla 9. Medianas del consumo de oxígeno según concentración de agua de mar y molusco."
) %>%
kableExtra::kable_styling(
full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed")
)| Concentración de agua | Molusco | Mediana |
|---|---|---|
| 50 | A | 11.110 |
| 50 | B | 12.850 |
| 75 | A | 7.180 |
| 75 | B | 5.595 |
| 100 | A | 9.295 |
| 100 | B | 6.140 |
ggplot(BD_moluscos, aes(x = factor(c_agua), y = cons_o, fill = molusco)) + geom_boxplot(position = position_dodge(width = 0.8))+ scale_fill_manual(values = c("#67a9cf", "#02818a")) + labs(x = "Concentración de agua de mar", y = "Consumo de oxígeno",fill = "Molusco", title = "Consumo de oxígeno según concentración de agua") + theme_minimal(base_size = 12) + theme(panel.grid.minor = element_blank(), plot.title = element_text(face = "bold", size = 13))El gráfico de cajas permite visualizar que existe una relación entre la concentración del agua de mar y el consumo de oxígeno de ambas especies de molusco; sin embargo, no parecen haber diferencias significativas en el consumo de oxígeno entre las especies A y B, pues ambas presentan un comportamiento similar ante diferentes concentraciones de agua de mar. Esta diferencia visual sugiere una posible interacción entre el consumo de oxígeno y la concentración de agua, aunque el ANOVA permitirá confirmar si esa interacción es estadísticamente significativa.
modelo_moluscos <- aov(cons_o ~ molusco * c_agua, data = BD_moluscos)
tabla_anova_moluscos <- as.data.frame(summary(modelo_moluscos)[[1]])
knitr::kable(tabla_anova_moluscos, digits = 4, caption = "Tabla 9. Tabla ANOVA: cons_o ~ molusco * c_agua.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Df | Sum Sq | Mean Sq | F value | Pr(>F) | |
|---|---|---|---|---|---|
| molusco | 1 | 23.2269 | 23.2269 | 2.0550 | 0.1588 |
| c_agua | 1 | 102.4954 | 102.4954 | 9.0684 | 0.0043 |
| molusco:c_agua | 1 | 14.3782 | 14.3782 | 1.2721 | 0.2655 |
| Residuals | 44 | 497.3099 | 11.3025 | NA | NA |
ss_moluscos <- summary(modelo_moluscos)[[1]][, "Sum Sq"]
ss_modelo <- sum(ss_moluscos) - ss_moluscos[length(ss_moluscos)]
eta2_modelo <- ss_modelo / sum(ss_moluscos)
eta2_modelo## [1] 0.2197964
El ANOVA con interacción mostró que el efecto del tipo de molusco no es significativo (\(F = 2.055; p = 0.1588\)), lo cual indica que, en promedio, los dos moluscos consumen cantidades similares de oxígeno. El efecto de la concentración de agua de mar sí es significativo (\(F = 9.068; p = 0.0043\)), lo cual indica que el consumo de oxígeno cambia según la concentración de agua. La interacción entre molusco y concentración de agua no resultó significativa (\(F = 1.272; p = 0.2655\)), esto quiere decir que el efecto de la concentración de agua sobre el consumo de oxígeno es similar en ambos moluscos, aunque visualmente parecía haber diferencias. El modelo completo explica aproximadamente el 22% de la variabilidad en el consumo de oxígeno, y la mayor parte de la variabilidad queda en los residuales.
BD_moluscos$grupo <- interaction(BD_moluscos$molusco, BD_moluscos$c_agua)
residuos <- residuals(modelo_moluscos)
shapiro_res_moluscos <- shapiro.test(residuos)
levene_res_moluscos <- leveneTest(cons_o ~ grupo, data = BD_moluscos)
tabla_supuestos_moluscos <- data.frame(Prueba = c("Shapiro-Wilk", "Levene"), Estadistico = c(sprintf("W = %.3f", shapiro_res_moluscos$statistic), sprintf("F = %.3f", levene_res_moluscos$`F value`[1])), p_valor = c(sprintf("%.3f", shapiro_res_moluscos$p.value), sprintf("%.3f", levene_res_moluscos$`Pr(>F)`[1])), Conclusion = c(ifelse(shapiro_res_moluscos$p.value > 0.05, "No se rechaza normalidad", "Se rechaza normalidad"), ifelse(levene_res_moluscos$`Pr(>F)`[1] > 0.05, "No se rechaza homocedasticidad", "Se rechaza homocedasticidad")))
knitr::kable(tabla_supuestos_moluscos, caption = "Tabla 10. Pruebas de supuestos del modelo del Punto 2.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Prueba | Estadistico | p_valor | Conclusion |
|---|---|---|---|
| Shapiro-Wilk | W = 0.983 | 0.701 | No se rechaza normalidad |
| Levene | F = 0.172 | 0.971 | No se rechaza homocedasticidad |
Los residuales del modelo cumplen normalidad (\(Shapiro-Wilk: W = 0.983; p = 0.701\)) y homogeneidad de varianzas (\(Levene: F = 0.172; p = 0.971\)). Ambos supuestos se satisfacen, lo cual respalda la validez de los resultados del ANOVA y de las comparaciones post-hoc del Punto 2.
resultado_LSD_moluscos <- pairwise.t.test(BD_moluscos$cons_o, BD_moluscos$grupo, p.adjust.method = "none")
tabla_lsd_moluscos <- as.data.frame(resultado_LSD_moluscos$p.value)
tabla_lsd_moluscos <- cbind(Comparacion = rownames(tabla_lsd_moluscos), tabla_lsd_moluscos)
rownames(tabla_lsd_moluscos) <- NULL
knitr::kable(tabla_lsd_moluscos, digits = 5, caption = "Tabla 11. Valores p de comparaciones pareadas LSD para el Punto 2.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Comparacion | A.50 | B.50 | A.75 | B.75 | A.100 |
|---|---|---|---|---|---|
| B.50 | 0.91909 | NA | NA | NA | NA |
| A.75 | 0.00599 | 0.00456 | NA | NA | NA |
| B.75 | 0.00018 | 0.00013 | 0.23198 | NA | NA |
| A.100 | 0.13787 | 0.11384 | 0.17411 | 0.01296 | NA |
| B.100 | 0.00246 | 0.00185 | 0.74541 | 0.38069 | 0.09476 |
La prueba LSD comparó todas las combinaciones de molusco y concentración de agua. Los resultados muestran que, dentro del molusco A, el consumo de oxígeno a concentración 50 difiere significativamente del de concentración 75 (\(p = 0.00599\)). Lo mismo ocurre en el molusco B: la concentración 50 difiere significativamente de la 75 (\(p = 0.00018\)) y también de la 100 (\(p = 0.00246\)). En cambio, las comparaciones entre moluscos dentro de la misma concentración no resultaron significativas: a concentración 50, A y B no difieren (\(p = 0.91909\)); a concentración 75, tampoco (\(p = 0.23198\)); y a concentración 100, la diferencia es marginal (\(p = 0.09476\)), sin alcanzar significancia. Esto refuerza la conclusión del ANOVA: el factor que realmente afecta el consumo de oxígeno es la concentración de agua de mar, y no el tipo de molusco.
El análisis del consumo de oxígeno en dos tipos de moluscos expuestos a tres concentraciones de agua de mar permite concluir que el factor que más influye en el consumo de oxígeno es la concentración de agua, y no el tipo de molusco. En el análisis univariado se observó que el molusco A tiene un consumo promedio ligeramente mayor que el B, pero con menor dispersión, y que la distribución del consumo en ambos grupos no presenta problemas graves de asimetría o valores atípicos que impidan el análisis. En el análisis bivariado, el gráfico de cajas mostró que en ambos moluscos el consumo de oxígeno es alto a concentración 50, cae fuertemente a concentración 75 y se recupera parcialmente a concentración 100. Aunque visualmente las cajas de cada molusco parecían diferentes, el ANOVA con interacción confirmó que esa diferencia no es estadísticamente significativa (\(p = 0.2655\)), por lo que el efecto de la concentración de agua es similar en ambos moluscos. El efecto principal de la concentración de agua sí fue significativo (\(p = 0.0043\)), lo cual indica que la salinidad del agua es un factor relevante para el consumo de oxígeno de estos organismos. El tipo de molusco, en cambio, no mostró un efecto significativo (\(p = 0.1588\)), lo cual sugiere que ambas especies responden de forma parecida a las condiciones del agua. Los supuestos del modelo se cumplieron (\(Shapiro-Wilk: p = 0.701; Levene: p = 0.971\)), lo cual respalda la validez de las conclusiones. La prueba LSD confirmó que las diferencias más claras se dan entre concentraciones dentro de cada molusco, y no entre moluscos dentro de la misma concentración. En conjunto, estos resultados sugieren que la concentración de agua de mar es el factor determinante del consumo de oxígeno en estos moluscos, mientras que la especie no marca una diferencia importante en este aspecto.
Con el fin de evaluar el efecto del uso del suelo sobre la biodiversidad de anfibios, se establecieron parcelas en cuatro tipos de hábitat que representan un gradiente de intervención antrópica: bosque primario, bosque secundario, sistema silvopastoril y potrero. En cada una de las 52 parcelas (13 por hábitat) se registró la riqueza de especies, el índice de diversidad de Shannon-Wiener y la altitud del sitio de muestreo.
Tabla 12. Estadísticas descriptivas de las variables de biodiversidad (N = 52).
| Overall (N=52) |
|
|---|---|
| Riqueza | |
| Mean (SD) | 9.73 (4.37) |
| Median [Min, Max] | 9.50 [2.00, 21.0] |
| Shannon | |
| Mean (SD) | 1.76 (0.607) |
| Median [Min, Max] | 1.85 [0.670, 2.98] |
| Altitud | |
| Mean (SD) | 1240 (173) |
| Median [Min, Max] | 1250 [951, 1600] |
BD_larga <- BD_biodiversidad %>% pivot_longer(cols = c(Riqueza, Shannon, Altitud), names_to = "Variable", values_to = "Valor")
ggplot(BD_larga, aes(x = "", y = Valor, fill = Variable)) + geom_boxplot(alpha = 0.8, outlier.shape = 1, width = 0.5) + geom_jitter(width = 0.12, alpha = 0.4, size = 1.5, color = "gray30") + facet_wrap(~ Variable, scales = "free_y", ncol = 3) + scale_fill_manual(values = c("#addd8e", "#78c679", "#41ab5d")) + labs(x = NULL, y = "Valor", title = "Distribucion univariada de las variables de biodiversidad") + theme_minimal(base_size = 12) + theme(axis.text.x = element_blank(), axis.ticks.x = element_blank(), panel.grid.major.x = element_blank(), panel.grid.minor = element_blank(), strip.text = element_text(face = "bold", size = 11), plot.title = element_text(face = "bold", size = 13), legend.position = "none")ggplot(BD_larga, aes(x = Valor, fill = Variable)) + geom_histogram(bins = 10, color = "white", alpha = 0.85) + facet_wrap(~ Variable, scales = "free", ncol = 3) + scale_fill_manual(values = c("#addd8e", "#78c679", "#41ab5d")) + labs(x = "Valor", y = "Frecuencia", title = "Distribucion de las variables de biodiversidad") + theme_minimal(base_size = 12) + theme(strip.text = element_text(face = "bold", size = 11), panel.spacing = unit(1.2, "lines"), panel.grid.minor = element_blank(), plot.title = element_text(face = "bold", size = 13), legend.position = "none")La Riqueza presenta valores concentrados en un rango relativamente estrecho, sin valores atípicos marcados, lo cual sugiere que el número de especies observadas por parcela es consistente entre sitios. El índice de Shannon muestra una dispersión mayor, lo que indica que la diversidad no solo depende del número de especies sino también de su abundancia relativa, y que existen diferencias entre parcelas. La Altitud presenta una dispersión amplia, esperable porque las parcelas se distribuyeron a lo largo de un gradiente altitudinal dentro de la reserva. No se observan valores atípicos evidentes en ninguna de las tres variables, lo cual es favorable para los análisis posteriores.
BD_bivariado <- BD_biodiversidad %>% mutate(Habitat = case_when(Habitat == "Bosque primario" ~ "BP", Habitat == "Bosque secundario" ~ "BS", Habitat == "Sistema silvopastoril" ~ "SSP", Habitat == "Potrero" ~ "PT", TRUE ~ Habitat)) %>% pivot_longer(cols = c(Riqueza, Shannon), names_to = "Variable", values_to = "Valor")
ggplot(BD_bivariado, aes(x = Habitat, y = Valor, fill = Habitat)) + geom_boxplot(alpha = 0.85, outlier.shape = 1) + facet_wrap(~ Variable, scales = "free_y") + scale_fill_manual(values = c("BP" = "#addd8e", "BS" = "#78c679", "SSP" = "#41ab5d", "PT" = "#005a32"), labels = c("BP" = "Bosque primario", "BS" = "Bosque secundario", "SSP" = "Sistema silvopastoril", "PT" = "Potrero"), name = "Tipo de habitat") + labs(x = "Tipo de habitat", y = "Valor", title = "Riqueza y Shannon por tipo de habitat") + theme_minimal(base_size = 12) + theme(strip.text = element_text(size = 11, face = "bold"), axis.text.x = element_text(size = 11), panel.grid.minor = element_blank(), panel.grid.major.x = element_blank(), plot.title = element_text(face = "bold", size = 13), legend.position = "right")BD_biodiversidad$Habitat <- factor(BD_biodiversidad$Habitat, levels = c("Bosque primario", "Bosque secundario", "Sistema silvopastoril", "Potrero"), labels = c("BP", "BS", "S", "P"))
paleta_habitat <- c("BP" = "#addd8e", "BS" = "#41ab5d", "S" = "#238443", "P" = "#005a32")
abrev_habitat <- c("BP" = "Bosque primario", "BS" = "Bosque secundario", "P" = "Potrero", "S" = "Sistema silvopastoril")
ggplot(BD_biodiversidad, aes(x = Altitud, y = Shannon, color = Habitat)) + geom_point(size = 2.5, alpha = 0.8) + geom_smooth(method = "lm", se = FALSE, color = "#1a5276", linewidth = 1) + scale_color_manual(values = paleta_habitat, labels = abrev_habitat, name = "Habitat") + labs(title = "Altitud vs. diversidad de Shannon", x = "Altitud (m s. n. m.)", y = "Indice de Shannon") + theme_minimal(base_family = "sans") + theme(plot.title = element_text(hjust = 0.5, face = "bold"), legend.position = "bottom")Los boxplots por hábitat muestran que tanto la riqueza como el índice de Shannon varían entre los cuatro tipos de uso de hábitat. El bosque primario presenta los valores más altos, seguido del bosque secundario, luego el sistema silvopastoril y finalmente el potrero con los valores más bajos. Esta tendencia sugiere que la intervención antrópica reduce la diversidad de anfibios, aunque el ANOVA del literal c permitirá confirmar si esas diferencias son estadísticamente significativas. En cuanto a la relación entre altitud y diversidad, el diagrama de dispersión muestra una tendencia positiva: a medida que aumenta la altitud, el índice de Shannon tiende a aumentar. La correlación obtenida fue \(r = 0.752\), lo cual confirma una relación positiva y fuerte. La banda gris alrededor de la recta de regresión indica el intervalo de confianza, y el hecho de que la mayoría de los puntos caigan dentro de esa banda sugiere que la tendencia es consistente. Biológicamente, esto podría explicarse porque las zonas más altas de la reserva suelen conservar mejor la cobertura boscosa, tienen temperaturas más frescas y mantienen mayor humedad, condiciones favorables para los anfibios. Sin embargo, conviene tener en cuenta que altitud y hábitat podrían estar relacionados, es decir, las zonas altas podrían coincidir con bosques mejor conservados y las zonas bajas con potreros.
medias_shannon <- aggregate(Shannon ~ Habitat, data = BD_biodiversidad, FUN = mean)
knitr::kable(medias_shannon, digits = 3, caption = "Tabla 13. Medias del indice de Shannon por tipo de habitat.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Habitat | Shannon |
|---|---|
| BP | 2.468 |
| BS | 1.975 |
| S | 1.603 |
| P | 1.004 |
tabla_habitat <- as.data.frame(table(Habitat = BD_biodiversidad$Habitat))
knitr::kable(tabla_habitat, col.names = c("Tipo de habitat", "Frecuencia"), caption = "Tabla 14. Numero de parcelas por tipo de habitat.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Tipo de habitat | Frecuencia |
|---|---|
| BP | 13 |
| BS | 13 |
| S | 13 |
| P | 13 |
modelo_shannon <- aov(Shannon ~ Habitat, data = BD_biodiversidad)
tabla_anova_shannon <- as.data.frame(summary(modelo_shannon)[[1]])
tabla_anova_shannon$`Pr(>F)` <- formatC(tabla_anova_shannon$`Pr(>F)`,format = "e", digits = 2)
knitr::kable(tabla_anova_shannon, digits = 4, caption = "Tabla 15. Tabla ANOVA: Shannon ~ Habitat.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Df | Sum Sq | Mean Sq | F value | Pr(>F) | |
|---|---|---|---|---|---|
| Habitat | 3 | 14.8624 | 4.9541 | 60.6112 | 2.38e-16 |
| Residuals | 48 | 3.9233 | 0.0817 | NA | NA |
ss_shannon <- summary(modelo_shannon)[[1]][, "Sum Sq"]
eta2_shannon <- ss_shannon[1] / sum(ss_shannon)
eta2_shannon## [1] 0.7911532
El ANOVA de una vía mostró diferencias altamente significativas en el índice de Shannon entre los tipos de hábitat (\(F = 60.61; gl = 3, 48; p = 2.38\times 10^{-16}\)). El tamaño del efecto fue muy grande (\(\eta^2 = 0.791\)), lo cual indica que el tipo de hábitat explica aproximadamente el 79.1% de la variabilidad en la diversidad. Las medias por hábitat evidencian un gradiente claro: bosque primario = 2.468, bosque secundario = 1.975, sistema silvopastoril = 1.603 y potrero = 1.004. Es decir, a mayor intervención antrópica, menor diversidad de anfibios.
shapiro_res_shannon <- shapiro.test(residuals(modelo_shannon))
levene_res_shannon <- leveneTest(Shannon ~ Habitat, data = BD_biodiversidad)
tabla_supuestos_shannon <- data.frame(Prueba = c("Shapiro-Wilk", "Levene"), Estadistico = c(sprintf("W = %.3f", shapiro_res_shannon$statistic), sprintf("F = %.3f", levene_res_shannon$`F value`[1])), p_valor = c(sprintf("%.3f", shapiro_res_shannon$p.value), sprintf("%.3f", levene_res_shannon$`Pr(>F)`[1])), Conclusion = c("No se rechaza normalidad", "No se rechaza homocedasticidad"))
knitr::kable(tabla_supuestos_shannon, caption = "Tabla 16. Pruebas de supuestos del modelo del Punto 3.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Prueba | Estadistico | p_valor | Conclusion |
|---|---|---|---|
| Shapiro-Wilk | W = 0.978 | 0.463 | No se rechaza normalidad |
| Levene | F = 1.277 | 0.293 | No se rechaza homocedasticidad |
Los residuales cumplen normalidad (\(Shapiro-Wilk: W = 0.978; p = 0.463\)) y homogeneidad de varianzas (\(Levene: F = 1.277; gl = 3, 48; p = 0.293\)). Por lo tanto, se satisfacen los dos supuestos del ANOVA y los resultados pueden interpretarse con confianza. Los gráficos de diagnóstico no muestran patrones problemáticos.
resultado_LSD_shannon <- pairwise.t.test(BD_biodiversidad$Shannon, BD_biodiversidad$Habitat, p.adjust.method = "none")
tabla_lsd_shannon <- as.data.frame(resultado_LSD_shannon$p.value)
tabla_lsd_shannon <- cbind(Comparacion = rownames(tabla_lsd_shannon), tabla_lsd_shannon)
rownames(tabla_lsd_shannon) <- NULL
knitr::kable(tabla_lsd_shannon, digits = 5, caption = "Tabla 17. Valores p de comparaciones pareadas LSD para el Punto 3.") %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| Comparacion | BP | BS | S |
|---|---|---|---|
| BS | 6e-05 | NA | NA |
| S | 0e+00 | 0.00176 | NA |
| P | 0e+00 | 0.00000 | 0 |
La prueba LSD muestra que todos los pares de hábitats difieren significativamente entre sí: bosque primario vs bosque secundario (\(p = 6.06\times 10^{-05}\)), bosque primario vs potrero (\(p = 2.08\times 10^{-17}\)), bosque primario vs sistema silvopastoril (\(p = 6.05\times 10^{-10}\)), bosque secundario vs potrero (\(p = 2.28\times 10^{-11}\)), bosque secundario vs sistema silvopastoril (p = 1.76e-03) y potrero vs sistema silvopastoril (\(p = 2.48\times 10^{-06}\)). Esto significa que cada tipo de hábitat tiene un efecto distinto sobre la diversidad de anfibios, y que la pérdida de diversidad ocurre de forma escalonada conforme aumenta la intervención humana.
El orden de diversidad es claro: bosque primario > bosque secundario > sistema silvopastoril > potrero. Este resultado sugiere que incluso los bosques secundarios, que han sufrido algún grado de intervención, mantienen niveles de diversidad considerablemente mayores que los sistemas productivos. El sistema silvopastoril, aunque con menor diversidad que los bosques, conserva más diversidad que el potrero, lo cual indica que la presencia de cobertura arbórea contribuye a mantener parte de la comunidad de anfibios.
El análisis desarrollado permite concluir que el tipo de hábitat tiene un efecto significativo y muy fuerte sobre la diversidad de anfibios medida con el índice de Shannon. En el análisis univariado (literal a) se observó que las tres variables presentan comportamientos distintos: la Riqueza es relativamente estable entre parcelas, el índice de Shannon muestra mayor dispersión (lo cual refleja diferencias en la estructura de las comunidades), y la Altitud presenta un rango amplio porque las parcelas se distribuyeron a lo largo de un gradiente altitudinal dentro de la reserva. No se detectaron valores atípicos problemáticos, lo cual permitió avanzar hacia los análisis bivariado e inferencial con mayor confianza.
En el análisis bivariado (literal b) se vio que la riqueza y la diversidad varían entre los cuatro hábitats, con un patrón decreciente conforme aumenta la intervención humana: el bosque primario muestra los valores más altos, seguido del bosque secundario, el sistema silvopastoril y finalmente el potrero. Este patrón tiene una explicación ecológica clara. Los anfibios son un grupo especialmente sensible a los cambios en el hábitat, porque dependen de condiciones específicas de humedad, temperatura y cobertura vegetal para reproducirse y sobrevivir. Los bosques primarios ofrecen microhábitats estables, con hojarasca abundante, sombra y humedad constante, que son condiciones ideales para muchas especies de anfibios. Cuando el bosque se tala y se convierte en potrero, la cobertura vegetal desaparece, el suelo se seca, la temperatura se vuelve más extrema y se pierden los sitios de reproducción, lo cual reduce drásticamente el número de especies que pueden sobrevivir allí. Los bosques secundarios, aunque han sido intervenidos en el pasado, recuperan parte de esas condiciones con el tiempo, lo cual explica por qué su diversidad es menor que la del bosque primario pero bastante mayor que la del potrero. El sistema silvopastoril, al mantener árboles dispersos sobre el pasto, ofrece una cobertura intermedia que permite la presencia de algunas especies, aunque no de todas.
Además, la relación entre altitud y diversidad mostró una correlación positiva y fuerte (\(r = 0.752\)), lo cual sugiere que las zonas más altas de la reserva tienden a conservar mayor diversidad. Biológicamente, esto podría deberse a que las zonas altas están menos intervenidas, mantienen mejor la cobertura boscosa y presentan temperaturas más frescas y húmedas, condiciones favorables para los anfibios. Sin embargo, como el ANOVA por hábitat explicó el 79.1% de la variabilidad, el efecto del hábitat es mucho más fuerte que el de la altitud, lo cual indica que el tipo de uso del suelo es el factor principal en este conjunto de datos.
En el ANOVA (literal c) se confirmó que las diferencias entre hábitats son altamente significativas (\(F = 60.61; p = 2.38\times 10^{-16}\)), con un tamaño de efecto muy grande (\(\eta^2 = 0.791\)). Esto significa que el tipo de uso del suelo explica cerca del 79.1% de la variación en la diversidad de anfibios, lo cual es un porcentaje muy alto para un estudio de campo. Las medias por hábitat (\(bosque primario = 2.468, bosque secundario = 1.975, silvopastoril = 1.603, potrero = 1.004\)) muestran que la diversidad cae a menos de la mitad cuando se pasa del bosque primario al potrero. La prueba LSD confirmó que todos los pares de hábitats difieren significativamente entre sí, es decir, no hay dos hábitats que se comporten igual: cada nivel de intervención antrópica produce un efecto distinto y medible sobre la comunidad de anfibios. Sobre los supuestos, los residuales cumplieron normalidad (\(Shapiro-Wilk: W = 0.978; p = 0.463\)) y homogeneidad de varianzas (\(Levene: F = 1.277; p = 0.293\)). Ambos supuestos se satisfacen, lo cual respalda la validez de los resultados del ANOVA y de las comparaciones post-hoc.
En conclusión, el tipo de uso del suelo es el factor más importante para explicar la diversidad de anfibios en esta reserva forestal. Los bosques (primario y secundario) conservan los niveles más altos de diversidad, el sistema silvopastoril mantiene una diversidad intermedia y el potrero presenta la diversidad más baja. En términos biológicos, esto se explica porque los anfibios dependen de condiciones de humedad, sombra y cobertura vegetal que se pierden cuando el bosque se transforma en pastizal. La presencia de árboles, incluso en sistemas productivos como el silvopastoril, contribuye a mantener parte de esa diversidad. Estos resultados tienen implicaciones importantes en la conservación y el mantenimiento de la biodiversidad de anfibios: proteger los bosques primarios y secundarios es esencial para conservar la comunidad de anfibios, y promover sistemas productivos con cobertura arbórea, como el silvopastoril, puede ayudar a mantener parte de la diversidad en paisajes intervenidos.