El análisis estadístico multivariado y de diseño experimental constituye una herramienta fundamental en las ciencias ecológicas y ambientales para interpretar las complejas interacciones entre los organismos y su entorno. La variabilidad biológica y la respuesta metabólica o de desarrollo frente a factores físico-químicos y antrópicos raramente pueden explicarse a través de gradientes simples; por el contrario, requieren un abordaje analítico que combine la exploración de distribuciones univariadas, el modelado de asociaciones bivariadas y la prueba de hipótesis mediante modelos de Análisis de Varianza (ANOVA).
El presente informe consolida tres estudios independientes orientados a evaluar respuestas biológicas en diversos contextos ambientales:
Mediante este enfoque integral, se busca validar los supuestos estadísticos clave (normalidad de residuos y homogeneidad de varianzas) y ofrecer conclusiones ecológicas e inferenciales sólidas que respalden la toma de decisiones en conservación, manejo agrícola y fisiología animal.
La colecta y muestreo de datos busca medir algunas características particulares presentes en el suelo y su relación con la producción de biomasa en una planta forrajera natural. En los siguientes estudios estadísticos se analizarán 45 muestras diferentes ambientales , y en cada muestra se estima la biomasa (respuesta Y) y sus características derivadas (covariables X) del suelo, usando como factores: el pH, salinidad, Zinc y Potasio.
Para evaluar el impacto de las condiciones del suelo sobre el desarrollo vegetal de la planta forrajera natural (N = 45), se analizaron las distribuciones univariadas de las cuatro covariables edáficas (X): pH, Salinidad, Zinc y Potasio. Para estudiar la relación entre las características fisicoquímicas del suelo y la producción de biomasa (Y) se empleó la combinación de dos herramientas gráficas complementarias: el histograma de frecuencia relativa (densidad), que permite visualizar la concentración de observaciones por rangos de clase, y la estimación no paramétrica de densidad Kernel, la cual superpone una curva continua que no depende del ancho arbitrario de los intervalos, facilitando la identificación de bimodalidades o colas de distribución reales en un tamaño de muestra moderado.
Tabla 1. Estadísticos descriptivos de las covariables edáficas (pH, Salinidad, Zinc y Potasio).
load("salinidad.Rdata")
require(table1)
require(ggplot2)
require(agricolae)
# Tabla descriptiva univariada para las 4 covariables
table1(~ pH + Salinidad + Zinc + Potasio, data = Salinidad)| Overall (N=45) |
|
|---|---|
| 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] |
pH: La tendencia central y dispersión presenta un valor medio de 4.61 con una desviación estándar de 1.25, lo que indica que en general las muestras son de carácter ácida. La mediana es de 4.45, muy cercana a la media, lo que sugiere una distribución relativamente simétrica. Los valores se extienden desde un mínimo de 3.20 hasta un máximo de 7.45 sugiriendo una muestra ligeramente basica.
Salinidad: La salinidad promedio es de 30.3 unidades con una SD de 3.72, lo que muestra una variabilidad moderada entre mediciones. La mediana es de 30, practicamente igual a la media. El 50% central de los datos se ubican dentro del rango amplio de 24 a 38.
Zinc: El nivel promedio de zinc es de 17.8 con una desviación estándar alta (8.27), indicando una mayor dispersión en los datos de este metal. La mediana es de 19.2, siendo superior a la media, lo que refleja una ligera asimetría a la izquierda. Además, muestra una gran amplitud de variación, desde un mínimo de 0.211 hasta un máximo de 31.3.
Potasio: Registra una media de 797 con una desviación estándar amplia de 298, lo que señala diferencias pronunciadas en la concentración de potasio entre los especímenes o sitios muestreados. La mediana es de 773, cercana a la media. Los valores oscilan de forma marcada entre un mínimo de 351 y un máximo de 1440.
A nivel general, el análisis de los gráficos revela una alta heterogeneidad ambiental y una marcada asimetría entre los sitios de muestreo. En primer lugar, la distribución del pH del suelo muestra un claro comportamiento bimodal. El pico principal de mayor densidad se concentra en condiciones marcadamente ácidas (pH = 3.0 a 5.5), mientras que se observa un segundo grupo secundario y menor en valores neutros ligeramente alcalinos (pH = 6.5 a 7.5). Esta bimodalidad evidencia que los 45 puntos de muestreo no provienen de un medio homogéneo, sino de al menos dos subpoblaciones edáficas ecológicamente diferenciadas, lo cual es crítico dado que el pH condiciona la solubilidad y disponibilidad de los nutrientes
Figura 1. Distribución del pH del suelo.
# Histogramas de distribución univariada
## A. pH
ggplot(Salinidad, aes(x = pH)) +
geom_histogram(aes(y = ..density..), bins = 8, fill = paleta_base[["pizarra"]], color = "white", alpha = 0.85) +
geom_density(color = paleta_base[["carbon"]], linewidth = 1) +
theme_informe() +
labs(
title = "Distribución del pH del Suelo",
subtitle = "Histograma y curva de densidad Kernel",
x = "pH",
y = "Densidad"
)La distribución presenta una clara bimodalidad. El pico principal de densidad se ubica en el rango francamente ácido (pH = 3.0 a 5.5), mientras que se observa un segundo pico secundario, aislado y de menor densidad, en valores neutros-alcalinos (pH = 6.5 a 7.5).
Por su parte, la distribución de la Salinidad exhibe una estructura unimodal con asimetría moderada hacia la derecha. La gran mayoría de los datos se agrupa de forma continua en el rango central de 25 a 31 unidades, presentando un paulatino descenso hacia valores que superan las 32 unidades. Esto indica que, aunque predominan los niveles salinos intermedios, existe un gradiente extendido hacia altas concentraciones que podrían imponer un potencial estrés osmótico sobre el desarrollo vegetal.
Figura 2. Distribución de la salinidad en el suelo.
## B. Salinidad
ggplot(Salinidad, aes(x = Salinidad)) +
geom_histogram(aes(y = ..density..), bins = 8, fill = paleta_base[["cafe_medio"]], color = "white", alpha = 0.85) +
geom_density(color = paleta_base[["carbon"]], linewidth = 1) +
theme_informe() +
labs(
title = "Distribución de Salinidad en el Suelo",
subtitle = "Histograma y curva de densidad Kernel",
x = "Salinidad",
y = "Densidad"
)Muestra una distribución unimodal con asimetría moderada a la derecha. El mayor volumen de datos se concentra en el intervalo central de 25 a 31 unidades de salinidad, decayendo progresivamente hacia valores superiores a 32.
Respecto a los micronutrientes y macronutrientes, la distribución del Zinc presenta un núcleo principal adecuadamente centrado entre los 15 y 25 ppm (con una moda cercana a 20 ppm), acompañado por un pequeño grupo de observaciones periféricas con niveles deficientes o muy cercanos a cero (0 a 3 ppm). Esta heterogeneidad refleja la coexistencia de zonas bien provistas del catalizador enzimático junto con parches específicos de déficit severo.
Figura 3. Distribución del Zinc en el suelo.
## C. Zinc
ggplot(Salinidad, aes(x = Zinc)) +
geom_histogram(aes(y = ..density..), bins = 8, fill = paleta_base[["gris_neutro"]], color = "white", alpha = 0.85) +
geom_density(color = paleta_base[["carbon"]], linewidth = 1) +
theme_informe() +
labs(
title = "Distribución del Zinc en el Suelo",
subtitle = "Histograma y curva de densidad Kernel",
x = "Zinc (ppm)",
y = "Densidad"
)Se observa una estructura bimodal asimétrica, donde la mayor parte de las observaciones forma una campana bien definida alrededor de los 15 a 25 ppm (máximo en 20 ppm), acompañada por una pequeña masa de datos periférica concentrada cerca del origen (0 a 3 ppm)
Finalmente, la distribución del Potasio registra una fuerte asimetría positiva o sesgo a la derecha. El mayor volumen de datos se agrupa de forma compacta en valores bajos a moderados (450 a 600 ppm), así pues esta asimetría evidencia que el Potasio es un recurso heterogéneamente distribuido, caracterizado por un piso basal bajo en la mayoría de los sitios y parches aislados de alta riqueza nutricional.
Figura 4. Distribución del Potasio en el suelo.
## D. Potasio
ggplot(Salinidad, aes(x = Potasio)) +
geom_histogram(aes(y = ..density..), bins = 8, fill = paleta_base[["cafe_profundo"]], color = "white", alpha = 0.85) +
geom_density(color = paleta_base[["carbon"]], linewidth = 1) +
theme_informe() +
labs(
title = "Distribución de Potasio en el Suelo",
x = "Potasio (ppm)",
y = "Densidad"
)Exhibe una fuerte asimetría positiva (sesgo a la derecha). La densidad máxima se agrupa de forma compacta en valores bajos a moderados (450 a 600 ppm), seguida por una cola larga que abarca valores atípicos o extremos por encima de 1200 ppm.
Para identificar los factores edáficos que ejercen un efecto determinante sobre la acumulación de peso seco vegetal, se analizó el comportamiento bivariado entre la respuesta cuantitativa Biomasa (gr) (Y) y sus tres covariables edáficas (X): pH, Salinidad y Zinc (ppm). Se empleó la evaluación bivariada mediante diagramas de dispersión (scatterplots) esta aproximación permite evaluar visualmente la fuerza, la dirección y la linealidad de las asociaciones, además de detectar posibles comportamientos heterocedásticos o patrones no lineales antes de seleccionar la variable clave para el modelo inferencial; además se superpuso una recta de regresión lineal en cada gráfico para visualizar la pendiente de la relación e inferir preliminarmente la fuerza y fuerza del vínculo entre las covariables edáficas y la respuesta vegetal.
ph vs biomasa: Al examinar los tres diagramas de dispersión, se evidencia una clara jerarquía en el grado de relación que cada variable edáfica sostiene con la respuesta biológica. En primer lugar, la relación entre la Biomasa y el pH destaca por presentar una asociación lineal positiva sumamente fuerte y homogénea. A medida que el pH del suelo se incrementa desde niveles marcadamente ácidos (3.2) hasta condiciones neutras o ligeramente alcalinas (7.5), la biomasa vegetal aumenta de forma sostenida desde valores inferiores a 500gr hasta superar los 2200 gr, mostrando una alineación casi perfecta de las observaciones a lo largo de la recta de tendencia azul. Desde el punto de vista fisiológico, este patrón confirma que la acidez severa actúa como el principal factor limitante en este sistema, restringiendo la disponibilidad de nutrientes, mientras que el incremento del pH optimiza la nutrición y estimula de forma directa la acumulación de peso seco.
Tabla 2. Matriz de correlación de Pearson entre biomasa y covariables edáficas.
cor_mat <- cor(Salinidad[, c("Biomasa", "pH", "Salinidad", "Zinc")])
tabla_informe(data.frame(Variable = rownames(cor_mat), cor_mat, row.names = NULL),
caption = "Tabla 2. Matriz de correlación de Pearson.", digits = 3)| Variable | Biomasa | pH | Salinidad | Zinc |
|---|---|---|---|---|
| Biomasa | 1.000 | 0.928 | -0.067 | -0.781 |
| pH | 0.928 | 1.000 | -0.045 | -0.720 |
| Salinidad | -0.067 | -0.045 | 1.000 | -0.427 |
| Zinc | -0.781 | -0.720 | -0.427 | 1.000 |
Figura 5. Relación bivariada entre biomasa y pH.
## Gráfico 1: Biomasa vs pH
ggplot(Salinidad, aes(x = pH, y = Biomasa)) +
geom_point(color = paleta_base[["carbon"]], size = 2.5, alpha = 0.8) +
geom_smooth(method = "lm", color = paleta_base[["cafe_profundo"]], se = FALSE, linewidth = 1) +
theme_informe() +
labs(
title = "Relación Bivariada: Biomasa vs pH",
x = "pH",
y = "Biomasa (gr)"
)El gráfico muestra una asociación lineal positiva muy fuerte y altamente homogénea. A medida que el pH del suelo aumenta, la biomasa vegetal experimenta un incremento sostenido.
salinidad vs biomasa: la relación entre la Biomasa y la Salinidad muestra una ausencia de tendencia lineal (asociación prácticamente nula). La nube de puntos se distribuye con alta dispersión vertical a lo largo de todo el rango salino (24 a 38 unidades), lo que genera una recta de regresión verde de pendiente casi horizontal. Esto indica que las fluctuaciones observadas en el rendimiento de la biomasa muestran una pendiente horizontal alrededor de los 1100gr, esto significa que, en promedio, el valor esperado de la biomasa no cambia significativamente a medida que aumenta o disminuye la salinidad.
Figura 6. Relación bivariada entre biomasa y salinidad.
## Gráfico 2: Biomasa vs Salinidad
ggplot(Salinidad, aes(x = Salinidad, y = Biomasa)) +
geom_point(color = paleta_base[["carbon"]], size = 2.5, alpha = 0.8) +
geom_smooth(method = "lm", color = paleta_base[["pizarra"]], se = FALSE, linewidth = 1) +
theme_informe() +
labs(
title = "Relación Bivariada: Biomasa vs Salinidad",
x = "Salinidad",
y = "Biomasa (gr)"
)Se observa que la recta de regresión v muestra una pendiente horizontal a lo largo de todo el rango salino (24 a 38 unidades). Asi mismo se exhibe una alta dispersión vertical con una tendencia constante.
zinc vs biomasa: la relación entre la Biomasa y el Zinc (ppm) proyecta una tendencia lineal negativa moderada. Conforme aumentan las concentraciones de Zinc en el suelo (0 a 31 ppm), la biomasa disminuye paulatinamente; no obstante, la presencia de los rendimientos más altos en concentraciones nulas de Zinc y la reducción paulatina de biomasa hacia concentraciones mayores sugiere un posible efecto de fitotoxicidad por acumulación de este micronutriente o una relación indirecta ligada a la dinámica del pH.
Figura 7. Relación bivariada entre biomasa y Zinc.
## Gráfico 3: Biomasa vs Zinc
ggplot(Salinidad, aes(x = Zinc, y = Biomasa)) +
geom_point(color = paleta_base[["carbon"]], size = 2.5, alpha = 0.8) +
geom_smooth(method = "lm", color = paleta_base[["cafe_medio"]], se = FALSE, linewidth = 1) +
theme_informe() +
labs(
title = "Relación Bivariada: Biomasa vs Zinc",
x = "Zinc (ppm)",
y = "Biomasa (gr)"
)Se observa una tendencia lineal negativa continua. A medida que aumenta la concentración de Zinc en el suelo (0 a 31 ppm), la biomasa tiende a disminuir (de 2000 a 500gr).
En función de los resultados del análisis bivariado, se determinó que la variable pH es la covariable edáfica que presenta la mayor relación lineal, directa y con mejor ajuste respecto a la producción de biomasa vegetal (Y). Para transformar esta relación continua en una estructura de factores apropiada para un Diseño Completamente Aleatorizado (DCA) unifactorial, se segmenta el pH en tres niveles categóricos ordenados utilizando el criterio de terciles (percentiles 33.3% y 66.6), esta segmentación dio lugar a tres grupos: Bajo (Tercil 1), Medio (Tercil 2) y Alto (Tercil 3), cada uno constituido por exactamente N = 15 unidades experimentales para conformar la muestra total (N = 45).
Tabla 3. Estadísticos descriptivos de la biomasa según el nivel de pH (terciles).
require(table1)
require(ggplot2)
require(agricolae)
## categorización de ph
terciles_ph <- quantile(Salinidad$pH, probs = c(0, 1/3, 2/3, 1))
Salinidad$Nivel_pH <- cut(
Salinidad$pH,
breaks = terciles_ph,
include.lowest = TRUE,
labels = c("Bajo", "Medio", "Alto")
)
table1(~ Biomasa | Nivel_pH, data = Salinidad)| Bajo (N=15) |
Medio (N=15) |
Alto (N=15) |
Overall (N=45) |
|
|---|---|---|---|---|
| Biomasa | ||||
| Mean (SD) | 593 (165) | 1050 (245) | 1610 (548) | 1080 (546) |
| Median [Min, Max] | 546 [370, 978] | 1040 [568, 1490] | 1420 [765, 2340] | 992 [370, 2340] |
El análisis descriptivo de los datos tabulados y la inspección del gráfico de cajas (boxplot) confirman la existencia de un marcado efecto ascendente y estructurado del pH sobre el desarrollo vegetal. En la tabla de resumen estadístico se observa que la biomasa promedio aumenta de forma drástica y proporcional conforme se pasa del nivel Bajo ( 593), al nivel Medio (1050 gr) y finalmente al nivel Alto ( 1610), logrando que los suelos con pH elevado casi tripliquen la biomasa alcanzada en condiciones de mayor acidez. Este mismo comportamiento se refleja con firmeza en la mediana (546gr - 1040gr - 1420 gr), descartando que el crecimiento observado sea producto de valores atípicos aislados y confirmando un desplazamiento real de la masa central de datos. Sin embargo, este incremento medio viene acompañado por un cambio sustancial en la dispersión interna: la desviación estándar se triplica gradualmente desde el nivel Bajo (SD = 165 gr) hasta el nivel Alto (SD = 548 gr), expandiendo el rango de respuesta de un intervalo muy estrecho en el Tercil 1 ([370, 978]) a una amplitud considerable en el Tercil 3 ([765, 2340] gr).
El diagrama de cajas (boxplot) refuerza y sintetiza esta dinámica ecológica. Los tres bloques se presentan claramente escalonados en altura sobre el eje de la biomasa, sin solapamientos en sus medianas, lo que permite analizar que en el Tercil 1 (suelos muy ácidos), la acidez actúa como un “techo rígido” o barrera fisiológica que impide el desarrollo vegetal, manteniendo a todas las plantas comprimidas en rendimientos bajos. A medida que el pH sube (Terciles 2 y 3), se libera esta restricción, permitiendo que otras covariables o factores del sitio (como la luz, la nutrición secundaria o la retención de agua) influyan, lo cual expande la variabilidad y eleva sustancialmente la biomasa máxima alcanzable.
Figura 8. Biomasa según el nivel de pH (terciles).
# Diagrama de cajas por nivel de pH
ggplot(Salinidad, aes(x = Nivel_pH, y = Biomasa, fill = Nivel_pH)) +
geom_boxplot(alpha = 0.85, show.legend = FALSE) +
scale_fill_manual(values = paleta_3_secuencial) +
scale_x_discrete(labels = c("pH vs Biomasa\n(Tercil 1)",
"pH vs Biomasa\n(Tercil 2)",
"pH vs Biomasa\n(Tercil 3)")) +
theme_informe() +
labs(
title = "Evaluación de Biomasa frente a la Covariable de Mayor Relación (pH)",
subtitle = "Seleccionada sobre Zinc (r = -0.781) y Salinidad (r = -0.067)",
x = "Covariable Seleccionada (Punto B)",
y = "Biomasa (gr)"
)El diagrama de cajas (Evaluación de Biomasa frente a la Covariable de Mayor Relación - pH) muestra tres cajas claramente escalonadas en sentido vertical con respecto al eje de la biomasa.
Para la validez de las inferencias derivadas del modelo ANOVA depende del cumplimiento de los supuestos teóricos sobre los residuos. Para evaluar la normalidad, se aplicó la prueba formal de Shapiro-Wilk sobre los residuos del modelo, la cual arrojó un estadístico W = 0.97316 con un p-valor asociado de p = 0.3749.
library(agricolae)
library(knitr)
# 1. Crear el modelo aov (con tus variables Biomasa y Nivel_pH de la base Salinidad)
modelo_salinidad_aov <- aov(Biomasa ~ Nivel_pH, data = Salinidad)
# 2. Prueba de normalidad de los residuos
shapiro.test(residuals(modelo_salinidad_aov))##
## Shapiro-Wilk normality test
##
## data: residuals(modelo_salinidad_aov)
## W = 0.97316, p-value = 0.3749
El gráfico de cuanti-cuantiles muestra que la gran mayoría de los residuos estandarizados se alinean de manera estrecha a lo largo de la diagonal teórica de referencia. Únicamente en los extremos (observaciones 1, 27 y 30) se aprecia una leve desviación típica del comportamiento de colas en datos reales de tamaño moderado (N = 45), la cual no compromete la validez global del supuesto. Al revisar las desviaciones estándar muestrales por tratamiento en la salida de R(SDBajo=164.83, SDMedio = 164.83 se evidencia que la variabilidad se incrementa con la media. Para asegurar un diagnóstico robusto que no se viera distorsionado por este patrón, se reporta también el ANOVA ajustado por heterocedasticidad (Prueba de Welch).
En la segunda fase, la prueba omnibus del ANOVA de una vía evaluó la hipótesis nula de igualdad de medias de biomasa entre las distintas categorías de pH ( H0: baja=media = alta). El análisis arrojó un estadístico de prueba F= 34.727 y un p-valor de p = 6.58 x 10-8. Al ser el p-valor sustancialmente menor que cualquier umbral de significancia estándar (= 0.05), se rechaza categóricamente la hipótesis nula. Este resultado confirma la presencia de diferencias altamente significativas en la acumulación de biomasa vegetal explicadas por la categorización del pH edáfico.
Tabla 4. Resultados del ANOVA de una vía para la biomasa según el nivel de pH.
anova_salinidad <- summary(modelo_salinidad_aov)[[1]]
tabla_anova_salinidad <- data.frame(
Fuente = trimws(rownames(anova_salinidad)),
Gl = anova_salinidad$Df,
Suma_Cuadrados = round(anova_salinidad$`Sum Sq`, 3),
Cuadrados_Medios = round(anova_salinidad$`Mean Sq`, 3),
F_calculado = round(anova_salinidad$`F value`, 3),
P_valor = format.pval(anova_salinidad$`Pr(>F)`, digits = 3, eps = 0.001)
)
tabla_informe(tabla_anova_salinidad,
caption = "Tabla 4. ANOVA de una vía: Biomasa ~ Nivel de pH.")| Fuente | Gl | Suma_Cuadrados | Cuadrados_Medios | F_calculado | P_valor |
|---|---|---|---|---|---|
| Nivel_pH | 2 | 7712683 | 3856341.6 | 29.893 | <0.001 |
| Residuals | 42 | 5418235 | 129005.6 | NA | NA |
Tabla 5. Comparación de medias por prueba LSD (Agricolae).
library(agricolae)
library(knitr)
# 1. Crear el modelo aov
modelo_salinidad_aov <- aov(Biomasa ~ Nivel_pH, data = Salinidad)
# 2. Obtener el test de LSD
posthoc <- LSD.test(modelo_salinidad_aov, trt = "Nivel_pH", group = TRUE)
# 3. Formatear la tabla para que se visualice limpia en el documento impreso
tabla_lsd_ph <- posthoc$groups
colnames(tabla_lsd_ph) <- c("Media de Biomasa", "Grupo / Letra")
tabla_informe(data.frame(Nivel_pH = rownames(tabla_lsd_ph), tabla_lsd_ph, row.names = NULL),
caption = "Tabla 5. Comparación de medias por prueba LSD (Agricolae).")| Nivel_pH | Media.de.Biomasa | Grupo…Letra |
|---|---|---|
| Alto | 1605.385 | a |
| Medio | 1048.109 | b |
| Bajo | 593.023 | c |
Finalmente, para precisar cuáles niveles difieren entre sí, se ejecutó la prueba de Diferencia Mínima Significativa (LSD de Fisher) con un nivel de confianza del 95% (= 0.05). Los resultados demuestran que las medias de los tres grupos son completamente divergentes y estadísticamente distintas entre sí. Se entiende entonces que el análisis confirma de manera estadísticamente sólida que el pH no solo ejerce un efecto significativo sobre el desarrollo de la planta forrajera, sino que su mejora secuencial desde rangos ácidos hacia condiciones neutro-alcalinas incrementa el rendimiento promedio de forma escalonada, logrando en el nivel Alto casi triplicar la producción de biomasa registrada en el nivel Bajo.
El conjunto de datos contiene tres variables que caracterizan un experimento biológico sobre la tasa metabólica en moluscos: dos factores fijos de tratamiento (c_agua y molusco) y una variable cuantitativa continua de respuesta (cons_o).
load("moluscos.Rdata")
library(ggplot2) # libreria para graficar
library(dplyr) # libreria para modificar el conjunto de datos BD_moluscos
library(stats)
library(car) # Necesaria para prueba de Levene
library(agricolae) # Necesaria para prueba de LSD
str(BD_moluscos) # permite ver el tipo de variables que tiene el BD## tibble [48 × 3] (S3: tbl_df/tbl/data.frame)
## $ c_agua : num [1:48] 100 100 100 100 100 100 100 100 100 100 ...
## $ molusco: chr [1:48] "A" "A" "A" "A" ...
## $ cons_o : num [1:48] 7.16 8.26 6.78 14 13.6 11.1 8.93 9.66 6.14 6.14 ...
Concentración de agua de mar (c_agua): La variable corresponde a la concentración de agua de mar a la cual fueron sometidos los individuos. Aunque en la base de datos original figuraba registrada de forma numérica, fue reconvertida a variable cualitativa ordinal (factor con 3 niveles: 100%, 75% y 50%) para responder al diseño experimental. Al tratarse de un factor fijo en un diseño balanceado, las observaciones se distribuyen entre los tres niveles de tratamiento, registrando n = 16 individuos por cada concentración, lo que representa un 33.3% del total de la muestra (N = 48) para cada grupo (tabla 1).
Tabla 1. Frecuencia y porcentaje de moluscos por concentración de agua de mar.
freq_c_agua <- table(BD_moluscos$c_agua)
prop_c_agua <- prop.table(freq_c_agua) * 100
df_c_agua <- data.frame(
`Concentración (%)` = names(freq_c_agua),
Frecuencia = as.integer(freq_c_agua),
Porcentaje = round(as.numeric(prop_c_agua), 2),
check.names = FALSE
)
tabla_informe(df_c_agua, caption = "Tabla 1. Frecuencia y porcentaje de moluscos por concentración de agua de mar.")| Concentración (%) | Frecuencia | Porcentaje |
|---|---|---|
| 100 | 16 | 33.33 |
| 75 | 16 | 33.33 |
| 50 | 16 | 33.33 |
# Gráfico de barras para c_agua
ggplot(BD_moluscos, aes(x = c_agua, fill = c_agua)) +
geom_bar() +
scale_fill_manual(values = paleta_3_secuencial) +
labs(title = "Distribución de las Concentraciones de Agua de Mar",
x = "Concentración (%)", y = "Frecuencia") +
theme_informe(base_size = 13) +
theme(legend.position = "none")Tipo de molusco (molusco): Esta variable categórica nominal representa la especie o tipo de organismo evaluado en el experimento (niveles A y B). De igual forma que la concentración, responde a una condición controlada dentro del diseño experimental balanceado, contando con n = 24 observaciones para el tipo A (50%) y n = 24 para el tipo B (50%). Esta distribución equitativa garantiza una representación homogénea de ambos especímenes en el estudio.
Tabla 2. Frecuencia y porcentaje de individuos por tipo de molusco.
# Tabla de frecuencias
freq_molusco <- table(BD_moluscos$molusco)
prop_molusco <- prop.table(freq_molusco) * 100
df_molusco <- data.frame(
Molusco = names(freq_molusco),
Frecuencia = as.integer(freq_molusco),
Porcentaje = round(as.numeric(prop_molusco), 2)
)
tabla_informe(df_molusco, caption = "Tabla 2. Frecuencia y porcentaje de individuos por tipo de molusco.")| Molusco | Frecuencia | Porcentaje |
|---|---|---|
| A | 24 | 50 |
| B | 24 | 50 |
# Gráfico de barras
ggplot(BD_moluscos, aes(x = molusco, fill = molusco)) +
geom_bar() +
scale_fill_manual(values = paleta_2) +
labs(title = "Distribución por Tipo de Molusco",
x = "Tipo de molusco", y = "Frecuencia") +
theme_informe(base_size = 13) +
theme(legend.position = "none")Consumo de oxígeno (cons_o): Es la variable cuantitativa continua de respuesta, medida como la proporción de O2 consumido por unidad de peso seco del molusco. Al evaluar el comportamiento de los N = 48 datos (combinando todas las condiciones): - Medidas de tendencia central: El consumo promedio de oxígeno en la muestra generales de 9.3 unidades, mientras que la mediana se ubica ligeramente por encima, en 9.7 (tabla 2). - Medidas de dispersión y variabilidad: La desviación estándar es de 3.68 unidades (varianza 13.57), extendiéndose los datos desde un valor mínimo de 1.80 hasta un máximo de 18.8 unidades. El coeficiente de variación del 39.58% (CV > 30%) evidencia una variabilidad global alta en la tasa respiratoria de la muestra (tabla 2).
Tabla 3. Estadísticos descriptivos del consumo de oxígeno (cons_o).
# Tabla 3. Medidas de tendencia central, dispersión y variabilidad
library(dplyr)
#calcular estadísticos descriptivos
resumen_cons_o <- BD_moluscos %>%
summarise(
n = n(),
media = mean(cons_o, na.rm = TRUE),
mediana = median(cons_o, na.rm = TRUE),
desv_est = sd(cons_o, na.rm = TRUE),
varianza = var(cons_o, na.rm = TRUE),
minimo = min(cons_o, na.rm = TRUE),
maximo = max(cons_o, na.rm = TRUE),
Q1 = quantile(cons_o, 0.25, na.rm = TRUE),
Q3 = quantile(cons_o, 0.75, na.rm = TRUE),
RIC = IQR(cons_o, na.rm = TRUE),
CV = (sd(cons_o, na.rm = TRUE) / mean(cons_o, na.rm = TRUE)) * 100
)
resumen_cons_o <- data.frame(
Estadístico = names(resumen_cons_o),
Valor = as.numeric(resumen_cons_o)
)
tabla_informe(resumen_cons_o, digits = 3,
caption = "Tabla 3. Estadísticos descriptivos del consumo de oxígeno (cons_o).")| Estadístico | Valor |
|---|---|
| n | 48.000 |
| media | 9.305 |
| mediana | 9.700 |
| desv_est | 3.683 |
| varianza | 13.562 |
| minimo | 1.800 |
| maximo | 18.800 |
| Q1 | 6.312 |
| Q3 | 11.232 |
| RIC | 4.920 |
| CV | 39.578 |
Distribución, forma y cuartiles: El 50% central de las observaciones se encuentra entre el primer cuartil (Q1 = 6.31) y el tercer cuartil (Q3 = 11.23), determinando un rango intercuartílico de RIC = 4.92 unidades. El histograma y la curva de densidad muestran una distribución con un leve sesgo a la derecha, concentrando la mayordensidad de observaciones en el intervalo de 5 a 12 unidades de O2.
Figura 1. Distribución del consumo de oxígeno.
ggplot(BD_moluscos, aes(x = cons_o)) +
geom_histogram(aes(y = ..density..), bins = 8, fill = paleta_base[["pizarra"]], color = "white", alpha = 0.85) +
geom_density(color = paleta_base[["carbon"]], linewidth = 1) +
labs(title = "Distribución del Consumo de Oxígeno",
x = "Consumo de O2 (unidad de peso seco)", y = "Densidad") +
theme_informe(base_size = 13)Valores atípicos: A través del diagrama de caja univariado se identifica un único valor atípico superior cercano al valor máximo de 18.8 unidades de O2. Esta dispersión y presencia de un valor extremo a nivel global es esperable, ya que la variable aún no ha sido agrupada por los factores de tratamiento.
Figura 2. Diagrama de caja del consumo de oxígeno.
ggplot(BD_moluscos, aes(y = cons_o)) +
geom_boxplot(fill = paleta_base[["cafe_medio"]], color = paleta_base[["carbon"]],
outlier.color = paleta_base[["carbon"]], outlier.shape = 16, alpha = 0.85) +
labs(title = "Diagrama de Caja del Consumo de Oxígeno", y = "Consumo de O2 (unidad de peso seco)") +
theme_informe(base_size = 13)Se hace con el propósitopermita 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.
Tabla 4. Media y desviación estándar del consumo de oxígeno por tipo de molusco y concentración de agua de mar.
# Cálculo de medias y desviaciones estándar por grupos
medias <- aggregate(cons_o ~ molusco + c_agua, data = BD_moluscos, FUN = mean)
colnames(medias) <- c("molusco", "c_agua", "media_cons_o")
desviaciones <- aggregate(cons_o ~ molusco + c_agua, data = BD_moluscos, FUN = sd)
colnames(desviaciones)[3] <- "Desv_Estandar"
resultados <- merge(medias, desviaciones, by = c("molusco", "c_agua"))
tabla_informe(resultados, digits = 3,
caption = "Tabla 4. Media y desviación estándar del consumo de O2 por molusco y concentración de agua de mar.")| molusco | c_agua | media_cons_o | Desv_Estandar |
|---|---|---|---|
| A | 100 | 9.936 | 2.748 |
| A | 50 | 12.175 | 3.090 |
| A | 75 | 7.890 | 2.740 |
| B | 100 | 7.406 | 2.844 |
| B | 50 | 12.326 | 3.518 |
| B | 75 | 6.095 | 2.739 |
Figura 3. Consumo de oxígeno de moluscos en distintas concentraciones de agua de mar.
El análisis bivariado del experimento revela el comportamiento del consumo de oxígeno en respuesta a la combinación del tipo de molusco y la concentración de agua de mar. En la concentración del 75%, ambos tipos de molusco registran los valores de consumo de oxígeno más bajos del estudio, con medianas situadas entre 5 y 7.5 unidades. En contraste, al disminuir la concentración al 50%, se produce un incremento considerable en la tasa respiratoria, alcanzando las medianas más altas del experimento (por encima de 11 a 13 unidades), mientras que la concentración control del 100% muestra valores intermedios. Al comparar las especies, el molusco tipo A mantiene medianas ligeramente superiores a las del tipo B en los niveles del 100% y 75%. Sin embargo, en el nivel del 50%, el molusco tipo B no solo alcanza una mediana mayor, sino que también exhibe una mayor dispersión en los datos,
# identificándose algunos valores atípicos en ambas especies bajo este nivel de baja salinidad.
ggplot(BD_moluscos, aes(x = interaction(molusco, c_agua), y = cons_o)) +
geom_boxplot(aes(fill = molusco), alpha = 0.85) +
geom_jitter(width = 0.15, size = 2, alpha = 0.6, color = paleta_base[["carbon"]]) +
scale_fill_manual(values = paleta_2) +
labs(x = "Molusco por Concentración de Agua de Mar", y = "Consumo de O2") +
theme_informe(base_size = 13) +
theme(legend.position = "bottom")Figura 4. Interacción entre tipo de molusco y concentración de agua de mar.
Gráfico de interacción de las medias, donde se aprecia un patrón de respuesta global en forma de “V” para ambos grupos, caracterizado por un descenso leve entre el 100% y el 75% de agua de mar, seguido de un marcado repunte al caer al 50%. Entre las concentraciones del 100% y el 75%, las trayectorias de las medias para el molusco A y el molusco B avanzan de forma prácticamente paralela, con el molusco A mostrando un consumo promedio consistentemente superior. No obstante, al pasar del 75% al 50%, la pendiente de incremento en el molusco B es más pronunciada, lo que lleva a que ambas curvas converjan en el nivel del 50%, donde ambas especies registran un promedio similar cercano a las 12.25 unidades de consumo de O2. En conjunto, la similitud en la tendencia general de las curvas refleja gráficamente que ambos tipos de molusco responden de manera equivalente a las variaciones en la concentración de agua de mar, lo cual respalda la ausencia de una interacción estadísticamente significativa entre los dos factores.
ggplot(BD_moluscos, aes(x = c_agua, y = cons_o, group = molusco, color = molusco, shape = molusco)) +
stat_summary(fun = mean, geom = "line", linewidth = 1) +
stat_summary(fun = mean, geom = "point", size = 3) +
scale_color_manual(values = paleta_2) +
labs(x = "Concentración de Agua de Mar", y = "Promedio de Consumo de O2",
color = "Tipo de molusco", shape = "Tipo de molusco") +
theme_informe(base_size = 13) +
theme(legend.position = "bottom")En esta sección se evalúa, 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. Se verifican los supuestos del modelo (normalidad de los residuales y homogeneidad de varianzas) y se interpreta el efecto principal de cada factor y de la interacción; cuando se encuentran diferencias significativas, se realizan las comparaciones post-hoc pertinentes (prueba de LSD) entre los grupos.
# Ajuste del modelo ANOVA de dos vías
modelo_anova <- aov(cons_o ~ molusco * c_agua, data = BD_moluscos)
summary(modelo_anova)## Df Sum Sq Mean Sq F value Pr(>F)
## molusco 1 23.2 23.23 2.651 0.111
## c_agua 2 230.8 115.41 13.171 3.63e-05 ***
## molusco:c_agua 2 15.4 7.68 0.876 0.424
## Residuals 42 368.0 8.76
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Exploración gráfica de supuestos
par(mfrow = c(1, 2))
plot(modelo_anova, which = 1) # Residuos vs. ajustados (homogeneidad de varianza)
plot(modelo_anova, which = 2) # Q-Q plot (normalidad de los residuos)##
## Shapiro-Wilk normality test
##
## data: residuals(modelo_anova)
## W = 0.95824, p-value = 0.08571
# p = 0.0857 > 0.05, no hay evidencia estadística para rechazar la hipótesis de normalidad de los residuos
leveneTest(cons_o ~ molusco * c_agua, data = BD_moluscos)# p = 0.9715 > 0.05, no hay evidencia de diferencias entre las
# varianzas de los seis grupos
# Comparaciones post-hoc (LSD)
c_agua_LSD <- LSD.test(modelo_anova, "c_agua", p.adj = "none", group = TRUE)Tabla 5. Resultados del ANOVA de dos vías para el consumo de oxígeno.
anova_moluscos <- summary(modelo_anova)[[1]]
tabla_anova_moluscos <- data.frame(
Fuente = trimws(rownames(anova_moluscos)),
Gl = anova_moluscos$Df,
Suma_Cuadrados = round(anova_moluscos$`Sum Sq`, 3),
Cuadrados_Medios = round(anova_moluscos$`Mean Sq`, 3),
F_calculado = round(anova_moluscos$`F value`, 3),
P_valor = format.pval(anova_moluscos$`Pr(>F)`, digits = 3, eps = 0.001)
)
tabla_informe(tabla_anova_moluscos,
caption = "Tabla 5. ANOVA de dos vías: Consumo de O2 ~ Molusco * Concentración de agua.")| Fuente | Gl | Suma_Cuadrados | Cuadrados_Medios | F_calculado | P_valor |
|---|---|---|---|---|---|
| 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 | NA | NA |
Tabla 6. Medias del consumo de O2 por concentración de agua de mar (LSD).
tabla_informe(data.frame(Concentración = rownames(c_agua_LSD$means), c_agua_LSD$means, row.names = NULL),
digits = 3,
caption = "Tabla 6. Medias y estadísticos descriptivos del consumo de O2 por concentración de agua de mar.")| Concentración | cons_o | std | r | se | LCL | UCL | Min | Max | Q25 | Q50 | Q75 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 100 | 8.671 | 3.001 | 16 | 0.74 | 7.178 | 10.165 | 3.68 | 14.0 | 6.140 | 8.595 | 10.575 |
| 50 | 12.251 | 3.200 | 16 | 0.74 | 10.757 | 13.744 | 6.38 | 18.8 | 10.085 | 11.455 | 14.500 |
| 75 | 6.992 | 2.804 | 16 | 0.74 | 5.499 | 8.486 | 1.80 | 13.2 | 5.200 | 6.430 | 8.768 |
Tabla 7. Grupos homogéneos según la prueba LSD para la concentración de agua de mar.
tabla_informe(data.frame(Concentración = rownames(c_agua_LSD$groups), c_agua_LSD$groups, row.names = NULL),
digits = 3,
caption = "Tabla 7. Grupos homogéneos según la prueba LSD (concentración de agua de mar).")| Concentración | cons_o | groups |
|---|---|---|
| 50 | 12.251 | a |
| 100 | 8.671 | b |
| 75 | 6.992 | b |
Conclusión general del ANOVA: El ANOVA de dos vías no mostró evidencia de un efecto significativo del tipo de molusco sobre el consumo de O2 (F1,42 = 2.651, p = 0.111), mientras que la concentración de agua de mar tuvo un efecto significativo (F2,42 = 13.171, p < 0.001). La interacción entre ambos factores tampoco fue significativa (F2,42 = 0.876, p = 0.424), indicando que el efecto de la concentración sobre el consumo de O2 no dependió del tipo de molusco. Los supuestos del modelo fueron satisfechos: los residuos no mostraron desviaciones significativas de la normalidad (Shapiro-Wilk, W = 0.958, p = 0.086) y se cumplió la homogeneidad de varianzas (Levene, F5,42 = 0.172, p = 0.972). Las comparaciones post-hoc mediante LSD mostraron que el consumo de O2 fue mayor al 50% de agua de mar (media = 12.25) que al 100% (media = 8.67) y 75% (media = 6.99), mientras que no hubo diferencia significativa entre 100% y 75%. En conjunto, los resultados indican que la concentración de agua de mar afecta el consumo de O2, pero este efecto es consistente entre los dos tipos de molusco.
Se busca examinar, resumir y describir el comportamiento de una sola variable. De ese modo, se busca analizar los valores de riqueza registradas por unidad de muestreo, permitiendo visualizar la diversidad en las áreas de estudio. A su vez, los valores en el índice de Shannon demuestran la hetrogeneidad y equitatividad en la distribución de la abundancia de especies según el estado de orden de la comunidad biológica. En cambio, la altitud describe el gradiente ambiental en el que se recolectaron las muestras, permitiendo contextualizar la distribución de los organismos evaluados a lo largo del relieve.
La tabla 1 consolida las tendencias centrales de todos los factores a medir.
Tabla 1. Estadísticos descriptivos de Riqueza, Shannon y Altitud.
# 1. Cargar la base de datos
load("Biodiversidad.RData")
BD_biodiversidad$Habitat <- as.factor(BD_biodiversidad$Habitat)
# 2. Obtener los resúmenes con summary()
sum_Riqueza <- summary(BD_biodiversidad$Riqueza)
sum_Shannon <- summary(BD_biodiversidad$Shannon)
sum_Altitud <- summary(BD_biodiversidad$Altitud)
# 3. Construir la tabla de datos
tabla_resumen_A <- data.frame(
Variable = c("Riqueza", "Shannon", "Altitud"),
Minimo = c(sum_Riqueza["Min."], sum_Shannon["Min."], sum_Altitud["Min."]),
Q1 = c(sum_Riqueza["1st Qu."], sum_Shannon["1st Qu."], sum_Altitud["1st Qu."]),
Mediana = c(sum_Riqueza["Median"], sum_Shannon["Median"], sum_Altitud["Median"]),
Media = c(sum_Riqueza["Mean"], sum_Shannon["Mean"], sum_Altitud["Mean"]),
Q3 = c(sum_Riqueza["3rd Qu."], sum_Shannon["3rd Qu."], sum_Altitud["3rd Qu."]),
Maximo = c(sum_Riqueza["Max."], sum_Shannon["Max."], sum_Altitud["Max."])
)
# 4. Presentar la tabla con el estilo institucional del informe
tabla_informe(tabla_resumen_A, digits = 3,
caption = "Tabla 1. Estadísticos descriptivos de Riqueza, Shannon y Altitud.")| Variable | Minimo | Q1 | Mediana | Media | Q3 | Maximo |
|---|---|---|---|---|---|---|
| Riqueza | 2.00 | 6.000 | 9.50 | 9.731 | 13.000 | 21.00 |
| Shannon | 0.67 | 1.262 | 1.85 | 1.762 | 2.105 | 2.98 |
| Altitud | 950.90 | 1081.875 | 1254.80 | 1243.892 | 1382.875 | 1600.80 |
La riqueza de especies obtuvo un valor entre 2 y 21 especies, con una mediana de 9,5 y 9,73. La proximidad entre esos valores indican que no existe, en términos generales, una asimetría extrema. El 50% de los datos se encuentran entre las 6 y 13 especies, lo que indica una variación considerable de la riqueza entre los sitios evaluados.
El índice de diversidad de Shannon presentó valores entre 0,67 y 2,98, con una mediana de 1,85 y una media de 1,76. El 50% de los datos se ubicó entre 1,2625 y 2,105. La diferencia entre el mínimo y el máximo evidencia que existen sitios con niveles de diversidad considerablemente diferentes.
En cuanto a la altitud, los sitios presentaron valores entre 950,90 y 1600, 80 m.s.n.m. La mediana fue de 1254,80 m y la media de 1243,89 m, mientras que el 50% central de las observaciones se encontró entre 1081,875 y 1382,875 m, respectivamente. Esto muestra que los sitios evaluados abarcan un gradiente de altitud amplio.
El empleo de histógramas en este ejercicio de biodiversidad permite hacer una representación gráfica de la distribución de un conjunto de datos numéricos mediante la formación de barras. Los siguientes histogramas hacen la representación de los datos obtenidos en la tabla.
Figura 1. Distribución de la riqueza de especies.
library(ggplot2)
#Histograma y densidad para la riqueza de especies
g_Riqueza <- ggplot(BD_biodiversidad, aes(x = Riqueza)) +
geom_histogram(aes(y = ..density..), bins = 8, fill = paleta_base[["pizarra"]], color = "white", alpha = 0.85) +
geom_density(color = paleta_base[["carbon"]], linewidth = 1) +
labs(title = "Distribución Univariada: Riqueza de Especies",
x = "Riqueza (Número de especies)", y = "Densidad") + theme_informe()
print(g_Riqueza)El histograma muestra una distribución relativamente dispersa, con una mayor concentración en los intervalos de 4-6 y 10-14 especies. La distribbución no presenta un comportamiento unimodal, sino que se observan dos zonas de mayor concentracción lo que sugiere una posible distribución bimodal. Además, existen pocos valores hacia los extremos.
Figura 2. Distribución del índice de diversidad de Shannon.
#Histograma y densidad para el indice Shannon
g_Shannon <- ggplot(BD_biodiversidad, aes(x = Shannon)) +
geom_histogram(aes(y = ..density..), bins = 8, fill = paleta_base[["cafe_medio"]], color = "white", alpha = 0.85) +
geom_density(color = paleta_base[["carbon"]], linewidth = 1) +
labs(title = "Distribución Univariada: Índice de Diversidad de Shannon",
x = "Índice de Shannon-Wiener", y = "Densidad") + theme_informe()
print(g_Shannon)En este histograma, los valores del índice de Shannon presentan una mayor frecuencia alrededor de 1,8-2,1; mientras que los valores inferiores a 1 y superiores a 2,5 aparecen en una menor frecuencia. La distribución presentan una cierta asimetría negativa (sesgo a la izquierda). Esto es coherente con que el valor de la media (1,76) sea ligeramente menor a la mediana (1,85).
Figura 3. Distribución de la altitud.
#Histogramas y densidad para la Altitud
g_Altitud <- ggplot(BD_biodiversidad, aes(x = Altitud)) +
geom_histogram(aes(y = ..density..), bins = 8, fill = paleta_base[["gris_neutro"]], color = "white", alpha = 0.85) +
geom_density(color = paleta_base[["carbon"]], linewidth = 1) +
labs(title = "Distribución Univariada: Altitud",
x = "Altitud (m.s.n.m)", y = "Densidad") + theme_informe()
print(g_Altitud)El histograma muestra dos zonas de mayor concentración, una alrededor de 1000-1100 m y otra alrededor de 1250-1350 m, con menor frecuencia en los extremos. Por esta razón, la distribución presenta una tendencia bimodal. Esto indica que los sitios estudiados no se concentran alrededor de una única altitud, sino que existen dos rangos altitudinales con mayor representación.
La utilización de esre método de análisis estadístico permite hacer una cuantificación a nivel descriptivo e inferencial el nivel de covarianza entre dos variables y de esta forma poner en la mira la relación entre dos variables. A continuación, se pone en evidencia los resultados arrojados por los diagramas de caja.
Figura 4. Índice de diversidad de Shannon por tipo de hábitat.
#Comparación bivariada: diversidad de Shannon según tipo de hábitat
g_box_Shannon <- ggplot(BD_biodiversidad, aes(x = Habitat, y = Shannon, fill = Habitat)) +
geom_boxplot(alpha = 0.85, outlier.shape = NA) +
geom_jitter(width = 0.2, size = 2, color = paleta_base[["carbon"]], alpha = 0.6) +
scale_fill_manual(values = paleta_4) +
labs(title = "Índice de Diversidad de Shannon por Tipo de Hábitat",
subtitle = "Evaluación del Gradiente de Intervención Antrópica",
x = "Tipo de Hábitat",
y = "Índice de Diversidad de Shannon-Wiener") +
theme_informe() +
theme(legend.position = "none")
print(g_box_Shannon)El diagrama muestra las diferencias claras en la distribución del índice entre los cuatro tipos de hábitat.
En el bosque primario, la mediana se encuentra alrededor de 2,5 y los valores presentan una distribución relativamente amplia, aproximadamente entre 1,7 y 3. La mayor parte de las observaciones se concentra en valores alltos del índice.
En el bosque secundario, la mediana se encuentra aproximadamente en 2. La caja es más estrecha que el bosque primario, lo que indica una menor dispersión de los valores centrales. Se observa además una medición situada alrededor de 1,45 claramente por debajo del resto de los datos del grupo.
El potrero presenta la mediana más baja, cercana a 1 y sus valores se concentran ente 0,7 y 1,35. Esto indica que, dentro de los hábitats evaluados, este grupo presenta los valores de diversidad más bajos y una dispersión relativamente reducida.
En el sistema silvopastoril, la mediana está alrededor de 1,6 con valores aproximadamente entre 1,1 y 2,1. La dispersión es mayor que el potrero pero menor que el bosque primario.
Figura 5. Riqueza de especies por tipo de hábitat.
#Comparación bivariada adicional: Riqueza de Especies según Tipo de Hábitat
g_box_Riqueza <- ggplot(BD_biodiversidad, aes(x = Habitat, y = Riqueza, fill = Habitat)) +
geom_boxplot(alpha = 0.85, outlier.shape = NA) +
geom_jitter(width = 0.2, size = 2, color = paleta_base[["carbon"]], alpha = 0.6) +
scale_fill_manual(values = paleta_4) +
labs(title = "Riqueza de Especies por Tipo de Hábitat",
subtitle = "Evaluación del Gradiente de Intervención Antrópica",
x = "Tipo de Hábitat",
y = "Riqueza de Especcies (Número de Especies)") +
theme_informe() +
theme(legend.position = "none")
print(g_box_Riqueza)El bosque primario presenta la mediana más alta, aproximadamente de 14,5 especies. La mayor parte de los valores se concentra alrededor de 14-15 especies, auqnue se observan valores superiores, cercanos a 19 y 21 especies, que se encuentran claramente separados del resto del grupo.
El bosque secundario presenta una mediana cercana a 12 especies. La caja tiene una amplitud moderada, indicando cierta variabilidad en la riqueza. También aparece un valor cercano a 3 especies, considerablemente, considerablemente inferior al resto de las observaciones del grupo.
El potrero muestra la mediana más baja, cercana a 5 especies, y una caja relativamente pequeña. Sus valores se concentran principalmente entre 4 y 6 especies, aunque se presentan algunas observaciones ligeramente superiores.
El sistema silvopastoril presenta una mediana cercana a 7 especies, con una dispersión mayor que la observada en el potrero. Sus valores se encuentran aproximadamente entre 5 y 13 especies.
Figura 6. Relación entre altitud y diversidad de Shannon.
#Relación bivariada: Altitud vs. Diversidad de Shannon
g_dispersion <- ggplot(BD_biodiversidad, aes(x = Altitud, y = Shannon, color = Habitat)) +
geom_point(size = 3, alpha = 0.85) +
geom_smooth(method = "lm", se = TRUE, linetype = "dashed", color = paleta_base[["gris_calido"]]) +
scale_color_manual(values = paleta_4) +
labs(title = "Relación entre Altitud y Diversidad de Shannon",
subtitle = "Segmentado por tipo de hábitat",
x = "Altitud (m.s.n.m)",
y = "Índice de Shannon", color = "Hábitat") +
theme_informe()
print(g_dispersion)Se muestra una relación positiva entre la altitud y el índice de diversidad de Shannon. En términos generales, a medida que aumenta la altitud, también tienden a aumentar los valores de diversidad. Los sitios de menor altitud presentan principalmente valores bajos de Shannon, mientras que los sitios ubicados a mayor altitud concentran valores más altos.
La distribución de los puntos también muestra diferencias según el tipo de hábitat. Los potreros se concentran principalmete en altitudes bajas y presentan los valores de menor diversidad, mientras que los bosques primarios se ubican principalmente a mayores altitudes y presentan valores de Shannon más elevados. Los bosques secundarios y sistemas silvopastoriles ocupan rangos intermedios, aunque con mayor dispersión.
La línea de tendencia ascendente respalda visualmente una asociación positiva entre ambas variables. Sin embargo, debido a que los hábitats se distribuyen en distintos rangos de altitud, la figura no permite establecer que el aumento de la diversidad se deba exclusivamente a la altitud; parte del patrón observado podría estar relacionado con las diferencias entre tipos de hábitat.
El ANOVA permite comparar las medias de tres o más grupos para verificar si al menos una de ellas es diferente, evaluando si las diferencias entre promedios corresponden a un efecto real o de azar. Los supuestos, permiten que los resultados sean confiables mientras se cumpla lo siguiente: interdependencia de las observaciones, normalidad de los residuos y homogeneidad de varianzas (evalúa prueba de Levene). Las pruebas post Hoc se realizan cuando el ANOVA resulta significativo y consiste en pruebas posteriores para conocer que grupos son los que tienen esas diferencias.
Tabla 2. Supuestos del ANOVA.
### 1. Verificación de Supuestos
library(car)
library(knitr)
library(kableExtra)
# Ajuste del modelo ANOVA
modelo_anova <- aov(Shannon ~ Habitat, data = BD_biodiversidad)
# Cálculo de pruebas de supuestos
shapiro_res <- shapiro.test(residuals(modelo_anova))
levene_res <- leveneTest(Shannon ~ Habitat, data = BD_biodiversidad)
# Tabla limpia de supuestos
tabla_supuestos <- data.frame(
Supuesto = c("Normalidad (Shapiro-Wilk)", "Homocedasticidad (Levene)"),
Estadistico = c(round(shapiro_res$statistic, 4), round(levene_res$`F value`[1], 4)),
P_valor = c(
format.pval(shapiro_res$p.value, digits = 3, eps = 0.001), format.pval(levene_res$`Pr(>F)`[1], digits = 3, eps = 0.001)
),
Evaluacion = c(
ifelse(shapiro_res$p.value > 0.05, "Se cumple el supuesto", "No se cumple"), ifelse(levene_res$`Pr(>F)`[1] > 0.05, "Se cumple el supuesto", "No se cumple")
)
)
tabla_informe(tabla_supuestos, caption = "Tabla 2. Verificación de supuestos para el modelo ANOVA.")| Supuesto | Estadistico | P_valor | Evaluacion |
|---|---|---|---|
| Normalidad (Shapiro-Wilk) | 0.979 | 0.463 | Se cumple el supuesto |
| Homocedasticidad (Levene) | 1.277 | 0.293 | Se cumple el supuesto |
La prueba de Shapiro-Wilk presentó un valor de p=0,463, superior a 0,05 por lo que no se evidencian desviaciones significativas de la normalidad. Asimismo, la prueba de Levene presentó un valor de P=0,293 también superior a 0,05 indicando que no existen diferencias significativas entre las varianzas de los grupos. En consecuencia, se cumplen los supuestos de normalidad y homogeneidad de varianzas requeridos para la aplicación del ANOVA.
Tabla 3. ANOVA de una vía.
anova_summary <- summary(modelo_anova)[[1]]
tabla_anova_df <- data.frame(
Fuente = c("Hábitat", "Residuales"),
Gl = anova_summary$Df, Suma_Cuadrados = round(anova_summary$`Sum Sq`, 3),
Cuadrados_Medios = round(anova_summary$`Mean Sq`, 3),
F_calculado = round(anova_summary$`F value`, 2),
P_valor = format.pval(anova_summary$`Pr(>F)`, digits = 3, eps = 0.001)
)
tabla_informe(tabla_anova_df,
caption = "Tabla 3. Resultados del Análisis de Varianza (ANOVA) para el índice de Shannon.")| Fuente | Gl | Suma_Cuadrados | Cuadrados_Medios | F_calculado | P_valor |
|---|---|---|---|---|---|
| Hábitat | 3 | 14.862 | 4.954 | 60.61 | <0.001 |
| Residuales | 48 | 3.923 | 0.082 | NA | NA |
El resultado de P<0,001 indica que exxiste una diferencia estadísticamente significativa del tipo de hábitat sobre el índice de diversidad de Shannon (F=60,61). Por lo tanto, se rechaza la hipótesis nula de igualdad de medias y se establece que al menos uno de los tipos de hábitat presenta una media de diversidad diferente de los demás.
Tabla 4. Prueba post-hoc LSD.
library(agricolae)
posthoc_agricolae <- LSD.test(modelo_anova, "Habitat", alpha = 0.05, console = FALSE)
tabla_lsd <- data.frame(
Habitat = rownames(posthoc_agricolae$means),
Media = round(posthoc_agricolae$means$Shannon, 2),
Desv_Est = round(posthoc_agricolae$means$std, 2),
N = posthoc_agricolae$means$r,
Grupo = posthoc_agricolae$groups$groups
)
tabla_informe(tabla_lsd,
caption = "Tabla 4. Resultados de la prueba post-hoc LSD y grupos homogéneos.")| Habitat | Media | Desv_Est | N | Grupo |
|---|---|---|---|---|
| Bosque primario | 2.47 | 0.38 | 13 | a |
| Bosque secundario | 1.97 | 0.22 | 13 | b |
| Potrero | 1.00 | 0.24 | 13 | c |
| Sistema silvopastoril | 1.60 | 0.28 | 13 | d |
La prueba post-hoc LSD mostró diferencias estadísticamente significativas entre todos los tipos de hábitat evaluados, debido a la asignación de letras diferentes a cada grupo. El bosque primario (a) presentó la mayor media del índice de Shannon (2,47) seguido del bosque secundario (b; 1,97), el sistema silvopastoril (d; 1,60) y el potrero (c; 1). Debido a que ninguno de los grupos comparte letras, se identificaron diferencias significativas entre todos los tipos de hábitat evaluados.
El análisis estadístico integral realizado en los tres escenarios ambientales permitió extraer inferencias fundamentales sobre el comportamiento fisiológico, vegetativo y ecológico de los sistemas estudiados:
Determinación del factor limitante en el desarrollo vegetal: En el estudio edáfico (Punto 1), se identificó al pH como la covariable con mayor poder explicativo sobre la acumulación de biomasa vegetal (\(r\) significativamente fuerte y positivo en comparación con el Zinc y la Salinidad). El ANOVA de una vía y la prueba post-hoc LSD confirmaron que la acidez severa actúa como una barrera fisiológica; al incrementarse el pH desde niveles bajos hasta condiciones neutro-alcalinas, la producción promedio de biomasa se triplica de forma escalonada e independiente (diferencias significativas entre todos los niveles).
Independencia de la respuesta respiratoria en moluscos: En el experimento biológico (Punto 2), la tasa de consumo de oxígeno estuvo modulada significativamente por la concentración de agua de mar, registrando un repunte fisiológico severo al reducir la salinidad al 50% (respuesta en forma de “V”), lo cual evidencia un incremento en el gasto metabólico por regulación osmótica. Sin embargo, no se encontraron diferencias significativas entre los tipos de molusco (A y B) ni una interacción significativa entre factores, lo que demuestra una estrategia de respuesta respiratoria plástica y equivalente entre ambas especies ante el estrés por dilución.
Efecto crítico de la intervención antrópica en la biodiversidad: En la evaluación ecológica (Punto 3), el tipo de hábitat ejerció un impacto altamente significativo (\(p < 0.001\)) sobre la diversidad de la comunidad biológica. La prueba de separación de medias LSD diferenció claramente los cuatro entornos en grupos homogéneos divergentes: el Bosque Primario conservó los mayores niveles de Riqueza e Índice de Shannon (Media = 2.47), seguido progresivamente por el Bosque Secundario (1.97), el Sistema Silvopastoril (1.60) y, finalmente, el Potrero (1.00), confirmando que la sustitución de cobertura natural por sistemas agropecuarios simplificados degrada drásticamente la equitatividad y riqueza de especies.
En conjunto, el cumplimiento de los supuestos paramétricos de normalidad (Shapiro-Wilk) y homocedasticidad (Levene) en los modelos evaluados respalda la validez técnica de estas conclusiones, subrayando la utilidad del ANOVA y las pruebas post-hoc como metodologías cuantitativas rigurosas para la investigación biológica y ambiental.