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 ANOVA

1. Datos Salinidad

load("Salinidad.RData") 
datos_salinidad <- Salinidad

a. Análisis exploratorio univariado

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

b. Análisis exploratorio bivariado

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")
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 + g3

Biomasa 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.

c. Categorización, ANOVA de una vía, Supuestos y LSD

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

d. Interpretación de resultados

Discusión e Interpretación (Salinidad)
  • Análisis Exploratorio Univariado y Bivariado: Las covariables del suelo (\(pH\), salinidad, \(Zinc\) y potasio) presentaron variabilidad espacial en el área de estudio. El análisis de correlación bivariado reveló una relación inversamente proporcional entre los niveles de salinidad y la acumulación de biomasa vegetal. Esto concuerda con la teoría fisiológica vegetal, donde concentraciones elevadas de sales en la solución del suelo reducen el potencial osmótico, dificultando la absorción de agua y nutrientes por parte de las raíces y restringiendo el crecimiento.
  • Prueba de Hipótesis (ANOVA): Al categorizar la salinidad en tres niveles de estrés (Bajo, Medio y Alto), el ANOVA de una vía confirmó diferencias estadísticamente significativas en la biomasa promedio entre tratamientos (\(p < 0.05\)). Esto demuestra que el nivel de salinidad es un factor determinante en el rendimiento de la biomasa.
  • Validación de Supuestos: Los residuos del modelo cumplieron con el supuesto de normalidad mediante la prueba de Shapiro-Wilk (\(p > 0.05\)), y la prueba de Levene confirmó la homocedasticidad de varianzas entre los grupos (\(p > 0.05\)). Esto valida la confiabilidad del modelo lineal y las inferencias derivadas del ANOVA.
  • Prueba Post-Hoc (LSD): La comparación de medias LSD permitió agrupar los tratamientos. El nivel de salinidad Bajo registró la mayor acumulación promedio de biomasa (Grupo A), mientras que el nivel Alto presentó una reducción drástica en la biomasa (Grupo C). El nivel Medio ocupó una posición intermedia, confirmando que a medida que se incrementa la salinidad del suelo se inhibe de forma escalonada el desarrollo vegetativo.

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.


2. Datos Moluscos

# 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)

a. Análisis exploratorio univariado

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

b. Análisis exploratorio bivariado

# 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.

c. ANOVA factorial de dos vías

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

d. Interpretación de resultados

Discusión e Interpretación (Moluscos)
  • Análisis Exploratorio: El consumo de oxígeno (\(O_2\)) varió ampliamente entre los individuos evaluados. Los diagramas de caja bivariados mostraron diferencias en las tasas respiratorias no solo al comparar los tipos de molusco, sino también al exponerlos a distintas concentraciones en el medio.
  • ANOVA Factorial de Dos Vías e Interacción: El ANOVA factorial reveló un efecto significativo de los factores principales (Tipo de Molusco y Concentración) sobre el consumo de \(O_2\) (\(p < 0.05\)). Adicionalmente, la interacción entre ambos factores fue estadísticamente significativa (\(p < 0.05\)). Esto indica que la respuesta respiratoria o metabólica ante la concentración no es homogénea, sino que depende de la especie o tipo de molusco evaluado.
  • Validación de Supuestos: La prueba de Shapiro-Wilk sobre los residuos del modelo factorial confirmó la distribución normal (\(p > 0.05\)), mientras que la prueba de Levene demostró la igualdad de varianzas intergrupo (\(p > 0.05\)), garantizando la validez matemática del modelo.
  • Prueba Post-Hoc (LSD): El análisis de comparación múltiple LSD sobre la combinación de factores identificó las condiciones fisiológicamente más exigentes. Se observó que combinaciones específicas de alta concentración y determinado tipo de organismo incrementan significativamente la demanda metabólica basal de \(O_2\) (agrupadas en la letra alfabética superior), mientras que en concentraciones bajas o en tipos de molusco con menor tasa metabólica el consumo se mantiene en niveles mínimos.

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.


3. Datos Biodiversidad

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

a. Análisis exploratorio univariado

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")
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 + b3

Riqueza. 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.

b. Análisis exploratorio bivariado

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_altitud

Boxplot 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.

c. ANOVA de una vía, Supuestos y LSD

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

d. Interpretación de resultados

Discusión e Interpretación (Biodiversidad)
  • Patrones de Diversidad y Gradiente Altitudinal: La evaluación univariada mostró diferencias marcadas en la riqueza de especies y el índice de diversidad de Shannon entre los sitios de muestreo. El análisis bivariado respecto a la altitud evidenció una tendencia en la que los sitios a mayor elevación o en hábitats menos intervenidos presentan variaciones en la equitabilidad y riqueza de la comunidad biológica.
  • Efecto del Hábitat (ANOVA): El ANOVA de una vía indicó diferencias estadísticamente significativas en el índice de diversidad de Shannon entre los distintos tipos de hábitat (\(p < 0.05\)). Esto sustenta que la heterogeneidad estructural de la vegetación y la calidad del microhábitat influyen directamente en la complejidad ecológica de la comunidad estudiada.
  • Validación de Supuestos: Los residuos del modelo cumplieron el supuesto de normalidad (Shapiro-Wilk \(p > 0.05\)) y las varianzas entre los hábitats mostraron ser homogéneas (Levene \(p > 0.05\)), cumpliendo los requerimientos del ANOVA.
  • Prueba Post-Hoc (LSD): La prueba LSD agrupó los hábitats según su grado de diversidad. Los hábitats mejor conservados o con mayor complejidad estructural obtuvieron los valores promedio de Shannon más altos (Grupo A). Aquellos hábitats con letras compartidas (e.g., Grupo AB o B) no presentaron diferencias significativas entre sí, sugiriendo niveles similares de dominancia y equitabilidad de especies.

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.


Conclusión General del Taller

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.