Introducción

El presente informe contiene el desarrollo del primer punto del parcial 1 del curso de Bioestadística, asociado a una base de datos independiente (Salinidad.RData). Para esto, se realiza un análisis exploratorio y un análisis de varianza (ANOVA) con su respectiva prueba post-ANOVA. El experimento estudia la relación entre características del suelo con la producción de biomasa de 45 plantas, registrando los datos relacionados con las propiedades del suelo en el que crecían, como pH, Salinidad, Zinc y Potasio (covariables).

 load("C:/Users/USUARIO/Desktop/bioestadistica/Salinidad.RData")

Desarrollo Punto 1

str(Salinidad)
## 'data.frame':    45 obs. of  5 variables:
##  $ Biomasa  : num  765 954 828 755 896 ...
##  $ pH       : num  5 4.7 4.2 4.4 5.55 5.5 4.25 4.45 4.75 4.6 ...
##  $ Salinidad: int  33 35 32 30 33 33 36 30 38 30 ...
##  $ Zinc     : num  16.5 14 15.3 17.3 22.3 ...
##  $ Potasio  : num  1442 1299 1154 1045 522 ...
kable(head(Salinidad), caption = "Primeras filas de la base Salinidad")
Primeras filas de la base Salinidad
Biomasa pH Salinidad Zinc Potasio
765.280 5.00 33 16.4524 1441.67
954.017 4.70 35 13.9852 1299.19
827.686 4.20 32 15.3276 1154.27
755.072 4.40 30 17.3128 1045.15
896.176 5.55 33 22.3312 521.62
1422.836 5.50 33 12.2778 1273.02

a. Análisis exploratorio univariado

Se calculan estadísticos descriptivos para la biomasa y cada una de las covariables, y se visualiza su distribución mediante histogramas y diagramas de caja.

resumen_univ <- data.frame(
  Variable = names(Salinidad),
  Media    = sapply(Salinidad, mean),
  Mediana  = sapply(Salinidad, median),
  DE       = sapply(Salinidad, sd),
  CV_pct   = round(sapply(Salinidad, sd) / sapply(Salinidad, mean) * 100, 1),
  Min      = sapply(Salinidad, min),
  Max      = sapply(Salinidad, max)
)
kable(resumen_univ, digits = 2, row.names = FALSE,
      caption = "Estadísticos descriptivos univariados")
Estadísticos descriptivos univariados
Variable Media Mediana DE CV_pct Min Max
Biomasa 1082.17 991.83 546.29 50.5 369.82 2337.33
pH 4.61 4.45 1.25 27.2 3.20 7.45
Salinidad 30.27 30.00 3.72 12.3 24.00 38.00
Zinc 17.83 19.24 8.27 46.4 0.21 31.29
Potasio 797.38 773.30 297.58 37.3 350.73 1441.67
vars <- names(Salinidad)
plots_hist <- lapply(vars, function(v) {
  ggplot(Salinidad, aes(x = .data[[v]])) +
    geom_histogram(fill = "blue", color = "white", bins = 12) +
    labs(title = v, x = v, y = "Frecuencia") +
    theme_minimal()
})
gridExtra::grid.arrange(grobs = plots_hist, ncol = 2)

plots_box <- lapply(vars, function(v) {
  ggplot(Salinidad, aes(y = .data[[v]])) +
    geom_boxplot(fill = "green") +
    labs(title = v, y = v) +
    theme_minimal() +
    theme(axis.text.x = element_blank())
})
gridExtra::grid.arrange(grobs = plots_box, ncol = 2)

Interpretación - La biomasa presenta una media cercana a 1082 g con una desviación estándar alta (~546 g) y un coeficiente de variación superior al 50%, lo que indica una gran heterogeneidad entre las muestras; su histograma muestra una ligera asimetría hacia la derecha, con algunas muestras de biomasa muy alta. - El pH varía entre 3.2 y 7.45 (suelos de ácidos a cercanos a neutros), con una distribución que se aleja algo de la normalidad. - La salinidad se concentra entre 24 y 38, con una distribución relativamente simétrica y poca dispersión relativa (CV bajo), lo que sugiere que los ambientes muestreados no difieren dramáticamente en este atributo. - El zinc muestra el rango más amplio en términos relativos (de valores cercanos a 0 hasta ~31) - El potasio también presenta alta variabilidad, con una posible asimetría derecha. En general, ninguna de las variables está libre de asimetría, lo cual deberá tenerse en cuenta más adelante al evaluar supuestos de normalidad.

b. Análisis exploratorio bivariado (Biomasa vs. pH, Salinidad, Zinc)

p1 <- ggplot(Salinidad, aes(x = pH, y = Biomasa)) +
  geom_point(color = "blue") +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(title = "Biomasa vs. pH") + theme_minimal()

p2 <- ggplot(Salinidad, aes(x = Salinidad, y = Biomasa)) +
  geom_point(color = "blue") +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(title = "Biomasa vs. Salinidad") + theme_minimal()

p3 <- ggplot(Salinidad, aes(x = Zinc, y = Biomasa)) +
  geom_point(color = "blue") +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(title = "Biomasa vs. Zinc") + theme_minimal()

gridExtra::grid.arrange(p1, p2, p3, ncol = 3)

cor_biomasa <- sapply(Salinidad[, c("pH", "Salinidad", "Zinc")],
                       function(x) cor(x, Salinidad$Biomasa))
kable(data.frame(Covariable = names(cor_biomasa),
                  Correlacion_con_Biomasa = round(cor_biomasa, 3)),
      row.names = FALSE,
      caption = "Coeficientes de correlación de Pearson con la Biomasa")
Coeficientes de correlación de Pearson con la Biomasa
Covariable Correlacion_con_Biomasa
pH 0.928
Salinidad -0.067
Zinc -0.781

Interpretación De las tres covariables evaluadas, el pH es la que presenta la relación más fuerte con la biomasa (correlación positiva y alta), es decir, a mayor pH del suelo (suelos menos ácidos) se observa mayor producción de biomasa. El Zinc muestra una relación negativa moderada-alta con la biomasa: a mayor concentración de zinc, menor biomasa, lo que podría reflejar un efecto de fitotoxicidad a concentraciones elevadas de este micronutriente. En contraste, la Salinidad prácticamente no muestra relación lineal con la biomasa (correlación cercana a cero), lo cual es un resultado relevante para el contexto del problema: dentro del rango de salinidad muestreado, esta variable no parece ser un factor limitante importante para la producción de biomasa de esta especie forrajera. Por lo tanto, la variable seleccionada para categorizar y evaluar mediante ANOVA en el literal (c) es el pH, por ser la que presenta la mayor asociación con la biomasa.

c. Categorización de pH en tres niveles y ANOVA de una vía

Se categoriza el pH en tres niveles (Bajo / Medio / Alto) utilizando los terciles de su distribución (percentiles 33.3% y 66.7%), de manera que cada grupo cuenta con un número de observaciones similar (15 muestras por nivel), lo cual favorece la validez del ANOVA.

terciles <- quantile(Salinidad$pH, probs = c(1/3, 2/3))
Salinidad$pH_nivel <- cut(Salinidad$pH,
                           breaks = c(-Inf, terciles[1], terciles[2], Inf),
                           labels = c("Bajo", "Medio", "Alto"))
kable(as.data.frame(table(Salinidad$pH_nivel)),
      col.names = c("Nivel de pH", "n"),
      caption = "Distribución de muestras por nivel de pH (terciles)")
Distribución de muestras por nivel de pH (terciles)
Nivel de pH n
Bajo 15
Medio 15
Alto 15
ggplot(Salinidad, aes(x = pH_nivel, y = Biomasa, fill = pH_nivel)) +
  geom_boxplot() +
  scale_fill_manual(values = c("Bajo" = "orange", "Medio" = "pink", "Alto" = "purple")) +
  labs(title = "Biomasa según nivel de pH", x = "Nivel de pH", y = "Biomasa (g)") +
  theme_minimal() +
  theme(legend.position = "none")

Hipótesis del ANOVA

\[H_0: \mu_{Bajo} = \mu_{Medio} = \mu_{Alto} \quad \text{(la biomasa media es igual en los tres niveles de pH)}\] \[H_1: \text{al menos una media difiere de las demás}\]

Se trabaja con un nivel de significancia \(\alpha = 0.05\).

ANOVA de una vía

modelo <- aov(Biomasa ~ pH_nivel, data = Salinidad)
summary(modelo)
##             Df  Sum Sq Mean Sq F value   Pr(>F)    
## pH_nivel     2 7712683 3856342   29.89 8.45e-09 ***
## Residuals   42 5418235  129006                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Verificación de supuestos

Antes de confiar en el resultado del ANOVA se deben verificar sus dos supuestos principales:

  • Normalidad de los residuales (Shapiro-Wilk): \(H_0\): los residuales provienen de una distribución normal vs. \(H_1\): no provienen de una distribución normal.
  • Homogeneidad de varianzas (Levene): \(H_0\): las varianzas de la biomasa son iguales entre los tres niveles de pH vs. \(H_1\): al menos una varianza difiere.

En ambos casos, si \(p > 0.05\) no se rechaza \(H_0\) y el supuesto se considera razonablemente cumplido.

# Normalidad de los residuales
shapiro.test(residuals(modelo))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo)
## W = 0.97316, p-value = 0.3749
# Homogeneidad de varianzas
leveneTest(Biomasa ~ pH_nivel, data = Salinidad)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value   Pr(>F)    
## group  2  8.6753 0.000702 ***
##       42                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
par(mfrow = c(1, 2))
qqnorm(residuals(modelo)); qqline(residuals(modelo), col = "red")
plot(fitted(modelo), residuals(modelo), xlab = "Ajustados", ylab = "Residuales",
     main = "Residuales vs. ajustados")
abline(h = 0, lty = 2, col = "red")

par(mfrow = c(1, 1))

Interpretación de supuestos La prueba de Shapiro-Wilk sobre los residuales no rechaza la normalidad (p = 0.375 > 0.05), y el gráfico Q-Q respalda esta lectura al no mostrar desviaciones importantes respecto a la recta teórica. Sin embargo, la prueba de Levene sí rechaza la homogeneidad de varianzas entre los tres niveles de pH (p = 0.0007 < 0.05): la variabilidad de la biomasa crece con el nivel de pH (DE ≈ 165 g en “Bajo” frente a ≈ 548 g en “Alto”), lo cual también se aprecia en el gráfico de residuales vs. ajustados como un patrón de “abanico” (mayor dispersión de residuales en los valores ajustados más altos). Es decir, el supuesto de normalidad se cumple, pero el de homogeneidad de varianzas se viola. Aun así, se procede con el ANOVA y la prueba LSD según lo solicitado en el enunciado, dejando constancia de esta limitación: una alternativa más robusta ante varianzas heterogéneas sería un ANOVA de Welch o una transformación logarítmica de la biomasa, que podría explorarse como análisis complementario.

Prueba post-hoc (LSD)

Dado que el ANOVA resulta significativo (p < 0.001), se realiza la comparación post-hoc de Fisher (LSD) para identificar entre qué niveles de pH difiere la biomasa.

lsd <- LSD.test(modelo, "pH_nivel", console = TRUE)
## 
## Study: modelo ~ "pH_nivel"
## 
## LSD t Test for Biomasa 
## 
## Mean Square Error:  129005.6 
## 
## pH_nivel,  means and individual ( 95 %) CI
## 
##         Biomasa      std  r      se       LCL       UCL     Min      Max
## Alto  1605.3853 547.6014 15 92.7382 1418.2321 1792.5386 765.280 2337.326
## Bajo   593.0233 164.8299 15 92.7382  405.8701  780.1766 369.823  977.515
## Medio 1048.1093 244.9093 15 92.7382  860.9560 1235.2625 568.455 1491.276
##             Q25      Q50      Q75
## Alto  1200.2575 1422.836 2192.560
## Bajo   481.3520  545.538  659.713
## Medio  890.8515 1039.637 1198.396
## 
## Alpha: 0.05 ; DF Error: 42
## Critical Value of t: 2.018082 
## 
## least Significant Difference: 264.6747 
## 
## Treatments with the same letter are not significantly different.
## 
##         Biomasa groups
## Alto  1605.3853      a
## Medio 1048.1093      b
## Bajo   593.0233      c
plot(lsd, main = "Comparación LSD de la Biomasa por nivel de pH")

Conclusión El ANOVA de una vía muestra que el nivel de pH del suelo genera diferencias estadísticamente significativas en la producción de biomasa (p < 0.001). La prueba de LSD indica que los tres niveles de pH (Bajo, Medio y Alto) difieren significativamente entre sí (grupos con letras distintas: a, b, c), con una tendencia clara: a medida que aumenta el pH del suelo, aumenta la biomasa producida por la planta forrajera. Esto es consistente con lo observado en el análisis bivariado del literal (b), donde el pH fue la covariable con mayor correlación con la biomasa. En términos del contexto biológico, estos resultados sugieren que la acidez del suelo es una limitante importante para la producción de esta especie forrajera, mientras que, dentro del rango muestreado, la salinidad no constituye un factor determinante de la biomasa.