Para estudiar la relación entre ciertas características del suelo y la producción de biomasa (gr) de una planta forrajera natural se obtuvieron 45 muestras en diferentes ambientes.
Realice un análisis exploratorio univariado para cada característica e interprete.
kable(summary(Salinidad), caption = "Tabla 1. Resumen Estadístico de las Variables")
| Biomasa | pH | Salinidad | Zinc | Potasio | |
|---|---|---|---|---|---|
| Min. : 369.8 | Min. :3.200 | Min. :24.00 | Min. : 0.2105 | Min. : 350.7 | |
| 1st Qu.: 654.8 | 1st Qu.:3.450 | 1st Qu.:27.00 | 1st Qu.:13.9852 | 1st Qu.: 527.0 | |
| Median : 991.8 | Median :4.450 | Median :30.00 | Median :19.2420 | Median : 773.3 | |
| Mean :1082.2 | Mean :4.609 | Mean :30.27 | Mean :17.8308 | Mean : 797.4 | |
| 3rd Qu.:1346.9 | 3rd Qu.:5.350 | 3rd Qu.:33.00 | 3rd Qu.:22.6758 | 3rd Qu.: 954.1 | |
| Max. :2337.3 | Max. :7.450 | Max. :38.00 | Max. :31.2865 | Max. :1441.7 |
sd_valores <- sapply(Salinidad, sd, na.rm = TRUE)
kable(data.frame(Variable = names(sd_valores),
`Desviación Estándar` = round(as.numeric(sd_valores), 3)),
caption = "Tabla 2. Desviación Estándar de cada Variable")
| Variable | Desviación.Estándar |
|---|---|
| Biomasa | 546.287 |
| pH | 1.255 |
| Salinidad | 3.720 |
| Zinc | 8.274 |
| Potasio | 297.576 |
ggplot(Salinidad, aes(x = Biomasa)) +
geom_histogram(bins = 10, fill = "#2b5c8f", color = "white") +
theme_minimal() +
labs(title = "Distribución de la Biomasa", x = "Biomasa (gr)", y = "Frecuencia")
Salinidad %>%
pivot_longer(cols = c(pH, Salinidad, Zinc, Potasio), names_to = "Variable", values_to = "Valor") %>%
ggplot(aes(x = Variable, y = Valor, fill = Variable)) +
geom_boxplot(alpha = 0.7, show.legend = FALSE) +
facet_wrap(~ Variable, scales = "free") +
theme_minimal() +
labs(title = "Distribución de las Características del Suelo", x = "", y = "Valor registrado")
En el análisis exploratorio univariado se observó que la mayoría de las variables presentan cierta asimetría hacia la derecha, evidenciada por valores de media superiores a la mediana. La Biomasa mostró la mayor dispersión relativa (media = 1082.2 g, desviación estándar = 546.3 g), lo que indica alta variabilidad entre las 45 muestras. El pH varió entre 3.2 y 7.45, con una distribución moderadamente simétrica y sin valores atípicos. La Salinidad fue la variable más homogénea, con media y mediana prácticamente iguales (30.27 vs 30), lo que sugiere una distribución simétrica. El Zinc presentó un valor atípico bajo (cercano a 0), notablemente alejado del resto de las observaciones. Finalmente, el Potasio mostró la mayor asimetría entre las covariables (media = 797.4, mediana = 773.3), con una cola de valores altos que se refleja también en su elevada desviación estándar (297.6).
Realice un análisis exploratorio bivariado que permita conocer cómo es la relación entre la biomasa y las covariables pH, Salinidad y Zinc (determine cuáles variables son las que presentan mayor relación con la biomasa).
matriz_cor <- cor(Salinidad)
kable(round(matriz_cor, 3), align = "c", caption = "Tabla 3. Matriz de Correlación de Pearson")
| 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 |
ggplot(Salinidad, aes(x = pH, y = Biomasa)) +
geom_point(color = "#1f77b4", size = 2.5) +
geom_smooth(method = "lm", color = "darkred", se = TRUE) +
theme_minimal() +
labs(title = "Biomasa vs pH", x = "pH del suelo", y = "Biomasa (gr)")
Salinidad %>%
pivot_longer(cols = c(Zinc, Salinidad), names_to = "Variable", values_to = "Valor") %>%
ggplot(aes(x = Valor, y = Biomasa)) +
geom_point(color = "#1f77b4", size = 2.5) +
geom_smooth(method = "lm", color = "darkred", se = TRUE) +
facet_wrap(~ Variable, scales = "free_x") +
theme_minimal() +
labs(title = "Biomasa vs Zinc y Salinidad", x = "Valor de la covariable", y = "Biomasa (gr)")
Al evaluar la relación entre la Biomasa y las covariables mediante el coeficiente de correlación de Pearson, se encontró que la variable con mayor asociación lineal es el pH (r = 0.928), lo que indica una correlación positiva muy fuerte: a mayor pH del suelo, mayor producción de biomasa. El Zinc presenta una correlación negativa fuerte (r = -0.781), sugiriendo que niveles más altos de Zinc se asocian con menor biomasa. En contraste, la Salinidad no muestra una relación lineal relevante con la Biomasa (r = -0.067), por lo que su efecto sobre la producción de biomasa, de existir, no sería de tipo lineal. Dado que el pH presenta la mayor correlación en valor absoluto, se selecciona esta variable para ser categorizada
A partir de la variable que, según el literal (b), presenta mayor relación con la biomasa, categorícela en tres niveles (por ejemplo bajo/medio/alto, usando terciles u otro criterio que usted justifique) y evalúe mediante un ANOVA de una vía si el nivel de dicha variable genera diferencias significativas en la biomasa. Verifique los supuestos del modelo (normalidad de los residuales y homogeneidad de varianzas) y realice las comparaciones post-hoc pertinentes (prueba de LSD), interpretando cuáles niveles difieren entre sí.
terciles <- quantile(Salinidad$pH, probs = seq(0, 1, 1/3), na.rm = TRUE)
Salinidad$Nivel_pH <- cut(Salinidad$pH, breaks = terciles, include.lowest = TRUE,
labels = c("Bajo", "Medio", "Alto"))
kable(table(Salinidad$Nivel_pH), col.names = c("Nivel de pH", "n"),
caption = "Tamaño de muestra por nivel de pH")
| Nivel de pH | n |
|---|---|
| Bajo | 15 |
| Medio | 15 |
| Alto | 15 |
mod1 <- aov(Biomasa ~ Nivel_pH, data = Salinidad)
mod1_lm <- lm(Biomasa ~ Nivel_pH, data = Salinidad)
kable(tabla_anova(mod1), caption = "Tabla ANOVA")
| Fuente | gl | SC | CM | F | p |
|---|---|---|---|---|---|
| Nivel_pH | 2 | 7712683 | 3856341.6 | 29.893 | < 0.001 |
| Residuals | 42 | 5418235 | 129005.6 |
diag1 <- data.frame(ajustado = fitted(mod1_lm),
residual = resid(mod1_lm),
estandar = rstandard(mod1_lm),
nivel = Salinidad$Nivel_pH)
ggplot(diag1, aes(sample = estandar)) +
stat_qq() + stat_qq_line(color = "red") +
theme_minimal() +
labs(x = "Cuantiles teóricos", y = "Cuantiles muestrales",
title = "QQ de residuales estandarizados: Biomasa ~ Nivel de pH")
shapiro_res <- shapiro.test(resid(mod1_lm))
shapiro_res
##
## Shapiro-Wilk normality test
##
## data: resid(mod1_lm)
## W = 0.97316, p-value = 0.3749
ggplot(diag1, aes(ajustado, residual)) +
geom_point(size = 2) + geom_hline(yintercept = 0, linetype = "dashed") +
theme_minimal() +
labs(x = "Valores ajustados", y = "Residuales", title = "Residuales vs. ajustados")
ggplot(diag1, aes(nivel, residual, fill = nivel)) +
geom_boxplot(alpha = 0.7, show.legend = FALSE) +
theme_minimal() +
labs(x = "Nivel de pH", y = "Residuales", title = "Residuales por nivel de pH")
sds <- tapply(Salinidad$Biomasa, Salinidad$Nivel_pH, sd)
razon_sd <- max(sds) / min(sds)
kable(data.frame(Nivel = names(sds), `Desviación estándar` = round(as.numeric(sds), 1),
check.names = FALSE),
caption = "Desviación estándar de la biomasa por nivel de pH")
| Nivel | Desviación estándar |
|---|---|
| Bajo | 164.8 |
| Medio | 244.9 |
| Alto | 547.6 |
# White (versión reducida: e^2 sobre ajustados y ajustados^2)
aux_white <- data.frame(aj = fitted(mod1_lm))
white_res <- lmtest::bptest(mod1_lm, ~ aj + I(aj^2), data = aux_white)
levene_res <- leveneTest(Biomasa ~ Nivel_pH, data = Salinidad)
kable(data.frame(
Prueba = c("Shapiro-Wilk (W)", "White reducida (BP)", "Levene (F)"),
Estadistico = round(c(shapiro_res$statistic, white_res$statistic, levene_res$`F value`[1]), 3),
p_valor = round(c(shapiro_res$p.value, white_res$p.value, levene_res$`Pr(>F)`[1]), 4)
), caption = "Validación de supuestos del modelo 1c")
| Prueba | Estadistico | p_valor | |
|---|---|---|---|
| W | Shapiro-Wilk (W) | 0.973 | 0.3749 |
| BP | White reducida (BP) | 19.006 | 0.0001 |
| Levene (F) | 8.675 | 0.0007 |
# Formato de p-valores para el texto (evita la notación científica)
fp <- function(p) ifelse(p < 0.0001, "p < 0.0001", paste0("p = ", sprintf("%.4f", p)))
welch_res <- oneway.test(Biomasa ~ Nivel_pH, data = Salinidad, var.equal = FALSE)
welch_res
##
## One-way analysis of means (not assuming equal variances)
##
## data: Biomasa and Nivel_pH
## F = 34.727, num df = 2.000, denom df = 24.736, p-value = 6.58e-08
# Games-Howell en R base (varianzas desiguales; p con el rango studentizado)
games_howell <- function(y, g) {
g <- factor(g); k <- nlevels(g)
m <- tapply(y, g, mean); v <- tapply(y, g, var); n <- tapply(y, g, length)
pares <- combn(levels(g), 2)
out <- apply(pares, 2, function(p) {
a <- p[1]; b <- p[2]
d <- unname(m[b] - m[a])
se2 <- unname(v[a] / n[a] + v[b] / n[b])
gl <- se2^2 / (unname((v[a] / n[a])^2 / (n[a] - 1) + (v[b] / n[b])^2 / (n[b] - 1)))
q <- abs(d) / sqrt(se2 / 2)
data.frame(Comparacion = paste(b, "-", a), Diferencia = d, gl = gl,
p.adj = ptukey(q, nmeans = k, df = gl, lower.tail = FALSE))
})
do.call(rbind, out)
}
gh <- games_howell(Salinidad$Biomasa, Salinidad$Nivel_pH)
kable(gh, digits = 4, caption = "Comparaciones de Games-Howell")
| Comparacion | Diferencia | gl | p.adj |
|---|---|---|---|
| Medio - Bajo | 455.0859 | 24.5237 | 0.0000 |
| Alto - Bajo | 1012.3620 | 16.5162 | 0.0000 |
| Alto - Medio | 557.2761 | 19.3852 | 0.0051 |
lsd_ph <- agricolae::LSD.test(mod1, "Nivel_pH", console = FALSE)
kable(lsd_ph$groups, col.names = c("Biomasa Promedio", "Grupo LSD"),
caption = "Tabla. Comparación Múltiple de Medias (Prueba LSD)")
| Biomasa Promedio | Grupo LSD | |
|---|---|---|
| Alto | 1605.3853 | a |
| Medio | 1048.1093 | b |
| Bajo | 593.0233 | c |
El ANOVA de una vía evidenció un efecto altamente significativo del nivel de pH sobre la Biomasa (F = 29.89; p = 8.45e-09 < 0.05), por lo que se rechaza la hipótesis nula de igualdad de medias entre los tres niveles (Bajo, Medio, Alto).
Normalidad. El gráfico QQ y la prueba de Shapiro-Wilk (W = 0.973; p = 0.3749) no rechazan la normalidad de los residuales. Con 15 observaciones por nivel esta prueba tiene poca potencia, por lo que se interpreta junto con el QQ.
Homogeneidad de varianzas. La prueba de Levene (p = 0.0007) y la versión reducida de White (p < 0.0001) indican que la variabilidad de la biomasa no es la misma entre los niveles de pH; la razón entre la mayor y la menor desviación estándar por nivel es 3.32. Esta violación es una limitación: el F y el LSD clásicos asumen varianzas iguales. Como el diseño es balanceado, el ANOVA es relativamente robusto, pero se realizó una verificación con el ANOVA de Welch (F = 34.73; p < 0.0001) y con comparaciones de Games-Howell, que coinciden con el LSD: los tres niveles de pH difieren entre sí.
La prueba post-hoc LSD mostró que los tres niveles de pH difieren significativamente entre sí (cada uno recibió una letra distinta: a, b, c). El nivel Alto de pH presentó la mayor biomasa promedio (1605.4 g), seguido del nivel Medio (1048.1 g) y, por último, el nivel Bajo, con la menor biomasa promedio (593.0 g). Esto sugiere una relación directa entre el nivel de pH del suelo y la producción de biomasa de la planta forrajera: a mayor pH, mayor biomasa. Una limitación adicional es que categorizar el pH en terciles descarta información de una variable continua; una regresión sobre el pH habría sido más potente.
Dos tipos de moluscos A y B fueron sometidos a tres concentraciones distintas de agua de mar (100%, 75% y 50%) y se observó el consumo de oxígeno midiendo la proporción de O2 por unidad de peso seco del molusco.
Realice un análisis exploratorio univariado para cada característica e interprete.
BD_moluscos$c_agua <- factor(BD_moluscos$c_agua)
kable(summary(BD_moluscos), caption = "Tabla 8. Resumen Estadístico de Moluscos")
| c_agua | molusco | cons_o | |
|---|---|---|---|
| 50 :16 | Length:48 | Min. : 1.800 | |
| 75 :16 | Class :character | 1st Qu.: 6.312 | |
| 100:16 | Mode :character | Median : 9.700 | |
| NA | NA | Mean : 9.305 | |
| NA | NA | 3rd Qu.:11.232 | |
| NA | NA | Max. :18.800 |
kable(data.frame(Variable = "cons_o", `Desviación Estándar` = round(sd(BD_moluscos$cons_o), 3)),
caption = "Tabla 9. Desviación Estándar del Consumo de O2")
| Variable | Desviación.Estándar |
|---|---|
| cons_o | 3.683 |
kable(table(BD_moluscos$molusco), col.names = c("Tipo de Molusco", "n"),
caption = "Tabla 10. Número de Observaciones por Tipo de Molusco")
| Tipo de Molusco | n |
|---|---|
| A | 24 |
| B | 24 |
kable(table(BD_moluscos$c_agua), col.names = c("Concentración (%)", "n"),
caption = "Tabla 11. Número de Observaciones por Concentración")
| Concentración (%) | n |
|---|---|
| 50 | 16 |
| 75 | 16 |
| 100 | 16 |
ggplot(BD_moluscos, aes(x = cons_o)) +
geom_histogram(bins = 10, fill = "#2b5c8f", color = "white") +
theme_minimal() +
labs(title = "Distribución del Consumo de Oxígeno", x = "Consumo de O2", y = "Frecuencia")
El consumo de oxígeno presenta una media de 9.31 y una desviación estándar de 3.68, con un rango entre 1.8 y 18.8, lo que indica una variabilidad considerable entre las 48 observaciones. La media (9.31) es ligeramente inferior a la mediana (9.70), lo que sugiere una leve asimetría hacia valores bajos. El diseño experimental está balanceado: 24 observaciones para cada tipo de molusco (A y B) y 16 observaciones para cada nivel de concentración de agua de mar (50%, 75% y 100%), lo que garantiza comparaciones equilibradas entre grupos en el ANOVA de dos vías.
Realice un análisis exploratorio bivariado que permita conocer cómo es el consumo de oxígeno en las distintas concentraciones de agua de mar, y si estas conclusiones son las mismas para cada tipo de molusco.
BD_moluscos <- BD_moluscos %>%
mutate(molusco = factor(molusco),
c_agua = factor(c_agua, levels = c("50", "75", "100")))
ggplot(BD_moluscos, aes(x = c_agua, y = cons_o, fill = c_agua)) +
geom_boxplot(alpha = 0.7, show.legend = FALSE) +
theme_minimal() +
labs(title = "Consumo de Oxígeno según Concentración de Agua de Mar",
x = "Concentración de agua de mar (%)", y = "Consumo de O2")
ggplot(BD_moluscos, aes(x = c_agua, y = cons_o, fill = molusco)) +
geom_boxplot(alpha = 0.7) +
theme_minimal() +
labs(title = "Consumo de Oxígeno según Concentración y Tipo de Molusco",
x = "Concentración de agua de mar (%)", y = "Consumo de O2", fill = "Molusco")
BD_moluscos %>%
group_by(molusco, c_agua) %>%
summarise(media = mean(cons_o, na.rm = TRUE), .groups = "drop") %>%
ggplot(aes(x = c_agua, y = media, color = molusco, group = molusco)) +
geom_point(size = 2) +
geom_line() +
theme_minimal() +
labs(title = "Gráfico de interacción: Concentración x Tipo de Molusco",
x = "Concentración de agua de mar (%)", y = "Consumo medio de O2", color = "Molusco")
El primer boxplot muestra cómo cambia el consumo de oxígeno a medida que
varía la concentración de agua de mar, sin distinguir el tipo de
molusco. El segundo boxplot separa esa comparación por tipo de molusco
(A y B), permitiendo ver si ambos responden de forma similar a los
cambios de concentración. Finalmente, el gráfico de interacción une las
medias de consumo de oxígeno por grupo: si las líneas de los moluscos A
y B son aproximadamente paralelas, el efecto de la concentración de agua
de mar sobre el consumo de oxígeno es similar para ambos tipos; si las
líneas se cruzan o divergen claramente, esto sugiere que el efecto de la
concentración depende del tipo de molusco.
Evalúe mediante un ANOVA de dos vías (factores: tipo de molusco y concentración de agua de mar, incluyendo su interacción) si estos factores afectan significativamente el consumo de oxígeno. Verifique los supuestos del modelo (normalidad de los residuales y homogeneidad de varianzas) e interprete el efecto principal de cada factor y de la interacción. Cuando encuentre diferencias significativas, realice las comparaciones post-hoc pertinentes (prueba de LSD) entre los grupos y concluya.
BD_moluscos$molusco <- factor(BD_moluscos$molusco)
BD_moluscos$c_agua <- factor(BD_moluscos$c_agua, levels = c("50", "75", "100"))
mod2 <- aov(cons_o ~ molusco * c_agua, data = BD_moluscos)
mod2_lm <- lm(cons_o ~ molusco * c_agua, data = BD_moluscos)
tab2 <- summary(mod2)[[1]]
F2 <- tab2[["F value"]] # filas: molusco, c_agua, interacción
P2 <- tab2[["Pr(>F)"]]
kable(tabla_anova(mod2), caption = "Tabla 12. ANOVA de Dos Vías")
| Fuente | gl | SC | CM | F | p |
|---|---|---|---|---|---|
| molusco | 1 | 23.227 | 23.227 | 2.651 | 0.111 |
| c_agua | 2 | 230.816 | 115.408 | 13.171 | < 0.001 |
| molusco:c_agua | 2 | 15.356 | 7.678 | 0.876 | 0.424 |
| Residuals | 42 | 368.011 | 8.762 |
diag2 <- data.frame(ajustado = fitted(mod2_lm),
residual = resid(mod2_lm),
estandar = rstandard(mod2_lm),
celda = interaction(BD_moluscos$molusco, BD_moluscos$c_agua, sep = " / "))
ggplot(diag2, aes(sample = estandar)) +
stat_qq() + stat_qq_line(color = "red") +
theme_minimal() +
labs(x = "Cuantiles teóricos", y = "Cuantiles muestrales",
title = "QQ de residuales estandarizados: O2 ~ molusco * concentración")
shapiro_res2 <- shapiro.test(resid(mod2_lm))
shapiro_res2
##
## Shapiro-Wilk normality test
##
## data: resid(mod2_lm)
## W = 0.95824, p-value = 0.08571
ggplot(diag2, aes(ajustado, residual)) +
geom_point(size = 2) + geom_hline(yintercept = 0, linetype = "dashed") +
theme_minimal() +
labs(x = "Valores ajustados", y = "Residuales", title = "Residuales vs. ajustados (modelo 2c)")
ggplot(diag2, aes(celda, residual, fill = celda)) +
geom_boxplot(alpha = 0.7, show.legend = FALSE) +
theme_minimal() +
labs(x = "Celda (molusco / concentración)", y = "Residuales",
title = "Residuales por celda")
sds2 <- tapply(BD_moluscos$cons_o, diag2$celda, sd)
razon_sd2 <- max(sds2) / min(sds2)
kable(data.frame(Celda = names(sds2), `Desviación estándar` = round(as.numeric(sds2), 3),
check.names = FALSE),
caption = "Desviación estándar del consumo de O2 por celda")
| Celda | Desviación estándar |
|---|---|
| A / 50 | 3.090 |
| B / 50 | 3.518 |
| A / 75 | 2.740 |
| B / 75 | 2.739 |
| A / 100 | 2.748 |
| B / 100 | 2.844 |
# White (versión reducida: e^2 sobre ajustados y ajustados^2)
aux_white2 <- data.frame(aj = fitted(mod2_lm))
white_res2 <- lmtest::bptest(mod2_lm, ~ aj + I(aj^2), data = aux_white2)
levene_res2 <- leveneTest(cons_o ~ molusco * c_agua, data = BD_moluscos)
white_p2 <- white_res2$p.value
levene_p2 <- levene_res2$`Pr(>F)`[1]
kable(data.frame(
Prueba = c("Shapiro-Wilk (W)", "White reducida (BP)", "Levene (F)"),
Estadistico = round(c(shapiro_res2$statistic, white_res2$statistic, levene_res2$`F value`[1]), 3),
p_valor = round(c(shapiro_res2$p.value, white_p2, levene_p2), 4)
), caption = "Tabla 13. Validación de supuestos del modelo 2c")
| Prueba | Estadistico | p_valor | |
|---|---|---|---|
| W | Shapiro-Wilk (W) | 0.958 | 0.0857 |
| BP | White reducida (BP) | 0.955 | 0.6202 |
| Levene (F) | 0.172 | 0.9715 |
# Solo la concentración resultó significativa, por eso el LSD se aplica a ese factor
lsd_conc <- agricolae::LSD.test(mod2, "c_agua", console = FALSE)
g2 <- lsd_conc$groups
kable(g2, col.names = c("Consumo medio de O2", "Grupo LSD"),
caption = "Comparación múltiple de medias (LSD) para la concentración de agua de mar (%)")
| Consumo medio de O2 | Grupo LSD | |
|---|---|---|
| 50 | 12.25062 | a |
| 100 | 8.67125 | b |
| 75 | 6.99250 | b |
resumen_lsd <- paste0(rownames(g2), " % (", round(g2[[1]], 2), "; grupo ", g2$groups, ")",
collapse = ", ")
El ANOVA de dos vías mostró que la concentración de agua de mar afecta significativamente el consumo de oxígeno (F = 13.17; p < 0.0001), mientras que el tipo de molusco (F = 2.65; p = 0.1110) y la interacción molusco × concentración (F = 0.88; p = 0.4238) no fueron significativos al 5 %. Como la interacción no es significativa, el efecto de la concentración es similar para ambos tipos de molusco y los efectos principales pueden interpretarse por separado.
Normalidad. Shapiro-Wilk (W = 0.958; p = 0.0857) no rechaza la normalidad de los residuales; como el valor p no está lejos de 0.05 y n = 48, se interpreta junto con el QQ.
Homogeneidad de varianzas. Levene (p = 0.9715) y la versión reducida de White (p = 0.6202) no indican heterocedasticidad entre las seis celdas; la razón entre la mayor y la menor desviación estándar por celda es 1.28. Con 8 observaciones por celda estas pruebas tienen poca potencia, por lo que se leen junto con los gráficos. En conjunto no se detectan violaciones evidentes de los supuestos, aunque con muestras pequeñas no puede afirmarse un cumplimiento estricto.
Comparaciones post-hoc. Como solo la concentración resultó significativa, la prueba LSD se aplicó a ese factor: 50 % (12.25; grupo a), 100 % (8.67; grupo b), 75 % (6.99; grupo b). Los niveles con letras distintas difieren significativamente entre sí, y el mayor consumo medio de oxígeno se observó con 50 % de agua de mar.
Conclusión. El consumo de oxígeno de los moluscos depende de la concentración de agua de mar; no se evidencian diferencias significativas entre los tipos de molusco ni una respuesta diferencial entre ellos.
Con el fin de evaluar el efecto del uso del suelo sobre la biodiversidad de anfibios en una reserva forestal, se establecieron parcelas de muestreo en cuatro tipos de hábitat. 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 (m.s.n.m.).
Realice un análisis exploratorio univariado para cada característica (riqueza, diversidad de Shannon y altitud) e interprete.
ggplot(BD_biodiversidad, aes(x = Shannon)) +
geom_histogram(bins = 10, fill = "#2b5c8f", color = "white") +
theme_minimal() +
labs(title = "Distribución del Índice de Diversidad de Shannon",
x = "Índice de Shannon", y = "Frecuencia")
BD_biodiversidad %>%
pivot_longer(cols = c(Riqueza, Altitud), names_to = "Variable", values_to = "Valor") %>%
ggplot(aes(x = Valor)) +
geom_histogram(bins = 10, fill = "#2b5c8f", color = "white") +
facet_wrap(~ Variable, scales = "free") +
theme_minimal() +
labs(title = "Distribución de Riqueza y Altitud", x = "Valor", y = "Frecuencia")
El análisis exploratorio univariado muestra que la Riqueza de especies varía entre las 52 parcelas, con valores esperados más bajos en las coberturas intervenidas y más altos en los bosques. El Índice de Shannon presenta una distribución razonablemente simétrica, adecuada para el modelado ANOVA posterior. La Altitud, por su parte, refleja el rango topográfico de la reserva en el que se ubicaron los sitios de muestreo.
Realice un análisis exploratorio bivariado que permita comparar la riqueza y la diversidad de Shannon entre los diferentes tipos de hábitat (por ejemplo, mediante boxplots por grupo), y explore la relación entre la altitud y la diversidad.
ggplot(BD_biodiversidad, aes(x = Habitat, y = Riqueza, fill = Habitat)) +
geom_boxplot(alpha = 0.7, show.legend = FALSE) +
theme_minimal() +
labs(title = "Riqueza de Especies según Tipo de Hábitat",
x = "Tipo de Hábitat", y = "Número de Especies (Riqueza)")
ggplot(BD_biodiversidad, aes(x = Habitat, y = Shannon, fill = Habitat)) +
geom_boxplot(alpha = 0.7, show.legend = FALSE) +
theme_minimal() +
labs(title = "Diversidad de Shannon según Tipo de Hábitat",
x = "Tipo de Hábitat", y = "Índice de Shannon")
ggplot(BD_biodiversidad, aes(x = Altitud, y = Shannon)) +
geom_point(color = "#2b5c8f", size = 2.5) +
geom_smooth(method = "lm", color = "darkred", se = TRUE) +
theme_minimal() +
labs(title = "Relación entre Altitud y Diversidad de Shannon",
x = "Altitud (m.s.n.m.)", y = "Índice de Shannon")
r_alt <- cor(BD_biodiversidad$Altitud, BD_biodiversidad$Shannon, use = "complete.obs")
r_alt
## [1] 0.7522111
Los boxplots evidencian una tendencia decreciente en la biodiversidad conforme aumenta la intervención antrópica sobre el suelo: los hábitats conservados (bosque primario y bosque secundario) tienden a presentar mayor riqueza de especies y mayor índice de Shannon, mientras que las coberturas productivas (sistema silvopastoril y potrero) muestran una reducción notoria en ambos indicadores. En cuanto a la altitud, el coeficiente de correlación con el índice de Shannon es r = 0.752, es decir, una relación lineal fuerte; la altitud también se asocia con la diversidad, por lo que conviene considerarla junto con el tipo de hábitat.
Evalúe mediante un ANOVA de una vía si existen diferencias significativas en el índice de diversidad de Shannon entre los tipos de hábitat. Verifique los supuestos del modelo (normalidad de los residuales y homogeneidad de varianzas) y, de encontrar diferencias significativas, realice las comparaciones post hoc pertinentes (prueba de LSD), interpretando qué hábitats difieren entre sí y cuáles no.
mod_bio <- aov(Shannon ~ Habitat, data = BD_biodiversidad)
kable(tabla_anova(mod_bio),
caption = "Tabla 14. Análisis de Varianza (ANOVA) para el Índice de Shannon según Hábitat")
| Fuente | gl | SC | CM | F | p |
|---|---|---|---|---|---|
| Habitat | 3 | 14.862 | 4.954 | 60.611 | < 0.001 |
| Residuals | 48 | 3.923 | 0.082 |
shapiro_bio <- shapiro.test(residuals(mod_bio))
levene_bio <- car::leveneTest(Shannon ~ Habitat, data = BD_biodiversidad)
supuestos_bio_df <- data.frame(
Prueba = c("Normalidad (Shapiro-Wilk)", "Homocedasticidad (Levene)"),
Estadistico = round(c(shapiro_bio$statistic, levene_bio$`F value`[1]), 3),
p_valor = round(c(shapiro_bio$p.value, levene_bio$`Pr(>F)`[1]), 4),
Conclusion = c(
ifelse(shapiro_bio$p.value > 0.05, "Se cumple (Normal)", "No se cumple"),
ifelse(levene_bio$`Pr(>F)`[1] > 0.05, "Se cumple (Homogéneo)", "No se cumple")
)
)
kable(supuestos_bio_df,
col.names = c("Prueba", "Estadístico", "p-valor", "Conclusión"),
align = "c",
caption = "Tabla 15. Validación de Supuestos del Modelo ANOVA de Biodiversidad")
| Prueba | Estadístico | p-valor | Conclusión | |
|---|---|---|---|---|
| W | Normalidad (Shapiro-Wilk) | 0.978 | 0.4625 | Se cumple (Normal) |
| Homocedasticidad (Levene) | 1.277 | 0.2930 | Se cumple (Homogéneo) |
lsd_bio <- agricolae::LSD.test(mod_bio, "Habitat", p.adj = "none", console = FALSE)
kable(lsd_bio$groups,
col.names = c("Índice Shannon Promedio", "Grupo LSD"),
align = "c",
caption = "Tabla 16. Comparación Múltiple de Medias (Prueba LSD)")
| Índice Shannon Promedio | Grupo LSD | |
|---|---|---|
| Bosque primario | 2.467692 | a |
| Bosque secundario | 1.974615 | b |
| Sistema silvopastoril | 1.603077 | c |
| Potrero | 1.003846 | d |
plot(lsd_bio, main = "Diferencias de Diversidad de Shannon según Tipo de Hábitat",
xlab = "Hábitat", ylab = "Índice de Shannon")
El ANOVA de una vía mostró un efecto altamente significativo del tipo de hábitat sobre el índice de diversidad de Shannon (F = 60.61; p < 0.0001), por lo que se rechaza la hipótesis nula de igualdad de medias. Los residuales no mostraron violaciones de los supuestos: Shapiro-Wilk (W = 0.978; p = 0.4625) y Levene (p = 0.2930). Con 13 parcelas por hábitat (diseño balanceado) el ANOVA es además robusto a desviaciones leves; la independencia de las parcelas, en cambio, depende del diseño de muestreo y podría verse afectada por agrupamiento espacial.
La prueba LSD separó a los cuatro hábitats en grupos distintos: Bosque primario (2.47; grupo a), Bosque secundario (1.97; grupo b), Sistema silvopastoril (1.6; grupo c), Potrero (1; grupo d). Es decir, todos difieren entre sí y la diversidad disminuye desde el bosque primario, pasando por el bosque secundario y el sistema silvopastoril, hasta el potrero. Como el LSD no ajusta por comparaciones múltiples, estas comparaciones se interpretan con esa precaución, aunque las diferencias observadas son amplias. Esto sugiere que la intervención antrópica y el cambio de uso del suelo reducen la diversidad de anfibios en la reserva.
En este trabajo se evaluó el comportamiento de distintas variables ecológicas e hidrobiológicas mediante análisis exploratorios y modelos ANOVA (de una y dos vías) con sus respectivas pruebas de validación de supuestos y comparaciones múltiples:
Efecto de las propiedades del suelo sobre la biomasa: Se identificó que el pH es la variable con mayor correlación e impacto positivo sobre la producción de biomasa (\(r = 0.928\)). Las comparaciones de medias confirmaron que niveles más altos de pH generan incrementos significativos en la biomasa promedio. No obstante, la presencia de heterocedasticidad exigió verificar los resultados con un ANOVA de Welch y comparaciones de Games-Howell, cuyos resultados se reportan en el Punto 1C.
Respuestas fisiológicas en moluscos: El consumo de \(O_2\) en los moluscos cambia con la concentración de agua de mar (ANOVA de dos vías, \(p < 0.001\)), sin diferencias significativas entre tipos de molusco (\(p = 0.111\)) y sin interacción significativa (\(p = 0.424\)): ambos tipos responden de forma similar. Los supuestos de normalidad (Shapiro-Wilk, \(p = 0.0857\)) y homogeneidad de varianzas (Levene, \(p = 0.9715\)) no mostraron violaciones evidentes, aunque con 8 observaciones por celda esta verificación tiene poca potencia.
Impacto del uso del suelo en la biodiversidad: Se constató una degradación del índice de diversidad de Shannon a medida que aumenta la intervención antrópica en el hábitat. Los bosques primarios y secundarios albergan niveles de diversidad significativamente superiores en comparación con los sistemas productivos (potreros y sistemas silvopastoriles).
En conjunto, las herramientas estadísticas aplicadas permitieron respaldar cuantitativamente los patrones ecológicos observados, destacando la importancia de la validación de supuestos para la toma de decisiones metodológicas acertadas.