Introducción

🌱 Contexto del estudio 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. En cada muestra se estimó la biomasa (respuesta Y) y se registraron las características (covariables X) del suelo: pH, Salinidad, Zinc y Potasio.

45Muestras

4Covariables del suelo

1Variable respuesta (Biomasa)

a. Análisis Exploratorio Univariado

Se realiza un análisis exploratorio univariado para cada característica del suelo y la biomasa, con el fin de describir su comportamiento individual antes de evaluar relaciones entre variables.

A continuación se mostrarán los datos en crudo y posteriormente se hablará sobre la interpretación.

Estructura de los datos

Se realiza una tabla que tiene como objetivo organizar los principales estadísticos descriptivos (promedio, desviación estándar, mediana, etc) calculados para las cinco variables de estudio: Biomasa, pH, salinidad, zinc y potasio.

load("Salinidad.RData")
library(psych)
library(knitr)
library(kableExtra)

tabla_describe <- describe(Salinidad)

kable(round(tabla_describe, 2), 
      caption = "Estadísticos descriptivos",
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE) %>%
  scroll_box(width = "100%")
Estadísticos descriptivos
vars n mean sd median trimmed mad min max range skew kurtosis se
Biomasa 1 45 1082.17 546.29 991.83 1022.02 526.40 369.82 2337.33 1967.50 0.91 -0.02 81.44
pH 2 45 4.61 1.25 4.45 4.46 1.41 3.20 7.45 4.25 0.87 -0.03 0.19
Salinidad 3 45 30.27 3.72 30.00 30.14 4.45 24.00 38.00 14.00 0.31 -1.04 0.55
Zinc 4 45 17.83 8.27 19.24 18.40 6.62 0.21 31.29 31.08 -0.66 -0.06 1.23
Potasio 5 45 797.38 297.58 773.30 778.48 352.09 350.73 1441.67 1090.94 0.48 -1.00 44.36

La tabla confirma que todas las muestras no presentan ausencia de algún dato y que las cinco variables están en distintas escalas (Biomasa y potasio en cientos, pH en unidades de 3 a 7), lo que nos lleva a precisar de cálculos del coeficiente de variación para comparar su dispersión relativa de forma equitativa.

Coeficiente de variación

El coeficiente de variación (CV) permite comparar la dispersión relativa de cada variable sin tomar en cuenta la escala en la que vienen, ya que expresa la desviación estándar como un porcentaje de la media.

cv <- function(x) (sd(x) / mean(x)) * 100

cv_tabla <- data.frame(
  Variable = names(sapply(Salinidad, cv)),
  CV = round(sapply(Salinidad, cv), 2)
)

kable(cv_tabla, 
      caption = "Coeficiente de variación (%)",
      col.names = c("Variable", "CV (%)"),
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE)
Coeficiente de variación (%)
Variable CV (%)
Biomasa 50.48
pH 27.22
Salinidad 12.29
Zinc 46.40
Potasio 37.32

Lo que es la biomasa (CV = 50% aprox) y zinc (CV = 46% aprox) evidencian la mayor variabilidad relativa entre las muestras, mientras que la salinidad (CV = 12% aprox) es la variable más homogénea del conjunto.

Histogramas

Se realizan histogramas con el fin de visualizar la forma de la distribución de cada variable complementando lo que se puede observar en los estadísticos descriptivos y el coeficiente de variación.

par(mfrow = c(2,3))
for (col in names(Salinidad)) {
  hist(Salinidad[[col]], main = col, xlab = col, col = "lightblue")
}

Se observa que biomasa y pH presentan una cola hacia la derecha (un sesgo positivo), mientras que zinc muestra el patrón opuesto (sesgo negativo). Estos patrones son consistentes con los valores de simetría que se pueden observar reportados en la tabla de estadísticos descriptivos.

Boxplots

Ahora se hace uso de un boxxplot para poder complementar la información previamente obtenida en los histogramas al permitir mostrar de forma más directa la dispersión presente en cada variable, además de poder identificar valores atípicos.

par(mfrow = c(2,3))
for (col in names(Salinidad)) {
  boxplot(Salinidad[[col]], main = col, col = "lightgreen")
}

El boxplot del zinc es el único dentro de los mismos que evidencia valores atípicos, mientras que las demás variables no muestran valores fuera de rango.

A continuación se identifican numéricamente los datos atípicos registrados.

Valores atípicos evidenciables en el Zinc

outliers_zinc <- boxplot.stats(Salinidad$Zinc)$out

outliers_tabla <- data.frame(
  Muestra = seq_along(outliers_zinc),
  Zinc = round(outliers_zinc, 4)
)

kable(outliers_tabla, 
      caption = "Valores atípicos detectados en Zinc",
      col.names = c("N°", "Valor de Zinc"),
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE)
Valores atípicos detectados en Zinc
Valor de Zinc
1 0.3729
2 0.2703
3 0.3205
4 0.2648
5 0.2105

Se confirma la presencia de 5 valores atípicos en zinc (entre 0.21 y 0.37), notablemente inferiores al resto de las muestras. Esta particularidad se retomará más adelante.

Interpretación

🔍 Interpretación

Biomasa (gr): presenta una media de 1082.17 g (mediana 991.83 g) y una desviación estándar de 546.29 g (CV ≈ 50%), indicando alta variabilidad entre muestras. Su distribución muestra sesgo positivo (skew = 0.91); no se identificaron outliers.

pH: media de 4.61 (mediana 4.45), CV ≈ 27%, sesgo positivo leve-moderado (0.87). Suelos predominantemente ácidos, sin valores atípicos.

Salinidad: la variable más homogénea del conjunto (CV ≈ 12%), distribución casi simétrica (skew = 0.31), sin outliers.

Zinc: media de 17.83, alta variabilidad (CV ≈ 46%), sesgo negativo (-0.66). Se identificaron 5 valores atípicos (0.21–0.37), muy por debajo del resto de las muestras, lo que explica la cola izquierda observada en el histograma.

Potasio: media de 797.38, desviación estándar de 297.58 (CV ≈ 37%), sesgo positivo leve (0.48), sin outliers evidentes.

b. Análisis Exploratorio Bivariado

📐 Enfoque estadístico Se evalúa la relación entre la biomasa (Y) y cada una de las covariables del suelo (pH, Salinidad, Zinc y Potasio) mediante diagramas de dispersión y el coeficiente de correlación de Pearson, con el fin de determinar cuáles variables presentan mayor asociación con la producción de biomasa.

Diagramas de dispersión

Se construyen diagramas de dispersión entre la biomasa y cada una de las 4 covariables del suelo, esto con el objetivo de identificar visualmente si existe algún patrón o tendencia entre ellas antes de calcular algún coeficiente de correlación.

par(mfrow = c(2,2))
plot(Salinidad$pH, Salinidad$Biomasa, main = "Biomasa vs pH", 
     xlab = "pH", ylab = "Biomasa", pch = 19, col = "darkgreen")
plot(Salinidad$Salinidad, Salinidad$Biomasa, main = "Biomasa vs Salinidad", 
     xlab = "Salinidad", ylab = "Biomasa", pch = 19, col = "darkblue")
plot(Salinidad$Zinc, Salinidad$Biomasa, main = "Biomasa vs Zinc", 
     xlab = "Zinc", ylab = "Biomasa", pch = 19, col = "darkorange")
plot(Salinidad$Potasio, Salinidad$Biomasa, main = "Biomasa vs Potasio", 
     xlab = "Potasio", ylab = "Biomasa", pch = 19, col = "purple")

Las nubes de puntos de biomasa vs. pH y biomasa vs. zinc muestra una tendencia visual clara (ascendente y descendente respectivamente), mientras que biomasa vs. salinidad y biomasa vs. potasio se ven dispersas sin algún patrón definido. Esto se confirma numéricamente con el coeficiente de correlación de Pearson a continuación.

Coeficiente de correlación de Pearson

Con el fin de cuantificar la fuerza y dirección de la relación observada en los diagramas de dispersión, se calcula el coeficiente de correlación de Pearson entre la biomasa y cada una de las covariables, así como la matriz de correlación completa entre la totalidad de las variables.

matriz_cor <- cor(Salinidad[, c("Biomasa", "pH", "Salinidad", "Zinc", "Potasio")], 
                   method = "pearson")

kable(round(matriz_cor, 3), 
      caption = "Matriz de correlación de Pearson",
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE)
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

La matriz cumple con confirmar lo que se observó visualmente: las covariables pH y zinc son las que tienen mayor correlación (en valor absoluto) con la biomasa, mientras que salinidad y potasio presentan valores cercanos al cero. La fila correspondiente a biomasa se resume a continuación en una tabla enfocada.

Tabla resumen: correlación de cada covariable con la Biomasa

library(knitr)

cor_biomasa <- data.frame(
  Variable = c("pH", "Salinidad", "Zinc", "Potasio"),
  Correlacion = round(matriz_cor["Biomasa", c("pH", "Salinidad", "Zinc", "Potasio")], 3)
)

kable(cor_biomasa, 
      caption = "Correlación de Pearson entre Biomasa y cada covariable", 
      col.names = c("Variable", "r (Pearson)"), 
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE)
Correlación de Pearson entre Biomasa y cada covariable
Variable r (Pearson)
pH 0.928
Salinidad -0.067
Zinc -0.781
Potasio -0.073

Basándose en estos valores, pH y zinc se identifican como las covariables de mayor relevancia para explicari la variabilidad de la biomasa, siendo el pH la variable seleccionada para el análisis ANOVA correspondiente a la siguiente sección.

Interpretación

🔍 Interpretación El análisis de correlación de Pearson evidenció que las covariables con mayor relación con la biomasa son el pH (r = 0.928) y el Zinc (r = -0.781). El pH presenta una correlación fuerte y positiva, sugiriendo que suelos menos ácidos favorecen la producción de biomasa. El Zinc, por el contrario, presenta una correlación fuerte pero negativa, indicando que mayores concentraciones de zinc se asocian con menor producción de biomasa. En contraste, Salinidad (r = -0.067) y Potasio (r = -0.073) no muestran una relación lineal relevante con la biomasa.

Esto es consistente con lo observado en los diagramas de dispersión: las nubes de puntos de Biomasa vs. pH y Biomasa vs. Zinc muestran una tendencia clara (ascendente y descendente, respectivamente), mientras que Biomasa vs. Salinidad y Biomasa vs. Potasio muestran una dispersión sin patrón definido.

c. ANOVA y Postanova

📐 Enfoque estadístico A partir de la variable con mayor relación con la biomasa (pH), se categoriza en tres niveles mediante terciles y se evalúa, con un ANOVA de una vía, si el nivel de pH genera diferencias significativas en la biomasa. Se verifican los supuestos de normalidad (Shapiro-Wilk) y homogeneidad de varianzas (Bartlett), y se realizan comparaciones post-hoc mediante la prueba de LSD.

Categorización del pH en tres niveles

Dado que la covariable escogido por mayor correlación, se condensa en 3 nivles (Bajo, medio y alto) utilizando terciles como criterio de corte (lo cual garantiza grupos con un número similar de observaciones).

terciles <- quantile(Salinidad$pH, probs = c(0, 1/3, 2/3, 1))

terciles_tabla <- data.frame(
  Percentil = names(terciles),
  pH = round(as.numeric(terciles), 2)
)

kable(terciles_tabla, 
      caption = "Puntos de corte (terciles) del pH",
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE)
Puntos de corte (terciles) del pH
Percentil pH
0% 3.20
33.33333% 3.88
66.66667% 4.90
100% 7.45
Salinidad$pH_nivel <- cut(Salinidad$pH, 
                            breaks = terciles, 
                            labels = c("Bajo", "Medio", "Alto"), 
                            include.lowest = TRUE)

conteo_tabla <- as.data.frame(table(Salinidad$pH_nivel))

kable(conteo_tabla, 
      caption = "Número de observaciones por nivel de pH",
      col.names = c("Nivel", "N"),
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE)
Número de observaciones por nivel de pH
Nivel N
Bajo 15
Medio 15
Alto 15

Esto produjo 3 grupos bien balanceados (con 15 agrupaciones por grupo), lo que favorece la validez de las comparaciones estadísticas que se realizan a continuación.

ANOVA de una vía: Biomasa ~ pH_nivel

Se ajusta un modelo de ANOVA de una vía para poder evaluar si el nivel de pH identifica un valor estadísticamente significativo con respecto a la biomasa promedio.

anova_c <- aov(Biomasa ~ pH_nivel, data = Salinidad)

anova_tabla <- as.data.frame(summary(anova_c)[[1]])
anova_tabla <- round(anova_tabla, 4)

kable(anova_tabla, 
      caption = "Tabla ANOVA: Biomasa ~ pH_nivel",
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE)
Tabla ANOVA: Biomasa ~ pH_nivel
Df Sum Sq Mean Sq F value Pr(>F)
pH_nivel 2 7712683 3856341.6 29.8928 0
Residuals 42 5418235 129005.6 NA NA

El ANOVA evidenció un efecto altamente significativo del nivel de pH sobre la biomasa (F(2,42) = 29.89, p < 0,001). Previo a interpretar los resultados con mayor detalle, se verifican los supuestos del modelo.

Verificación de supuestos

La validez del ANOVA depende del cumplimiento de dos supuestos: normalidad de los residuales (Prueba de Shapiro-Wilk) y homogeneidad de varianzas entre grupos (Prueba de Bartlett).

shapiro_res <- shapiro.test(residuals(anova_c))
bartlett_res <- bartlett.test(Biomasa ~ pH_nivel, data = Salinidad)

supuestos_tabla <- data.frame(
  Prueba = c("Shapiro-Wilk (normalidad)", "Bartlett (homogeneidad de varianzas)"),
  Estadistico = c(round(shapiro_res$statistic, 4), round(bartlett_res$statistic, 4)),
  p_valor = c(round(shapiro_res$p.value, 4), round(bartlett_res$p.value, 6))
)

kable(supuestos_tabla, 
      caption = "Verificación de supuestos del ANOVA",
      col.names = c("Prueba", "Estadístico", "p-valor"),
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE)
Verificación de supuestos del ANOVA
Prueba Estadístico p-valor
Shapiro-Wilk (normalidad) 0.9732 0.374900
Bartlett (homogeneidad de varianzas) 20.0843 0.000044

✅ Interpretación de supuestos La prueba de Shapiro-Wilk sobre los residuales arroja un valor-p de 0.375, por lo que el supuesto de normalidad no se rechaza (los residuales son compatibles con una distribución normal). La prueba de Bartlett arroja un valor-p < 0.001, por lo que el supuesto de homogeneidad de varianzas sí se rechaza — esto se considera una limitación del análisis.

Comparaciones Postanova (LSD)

Dado que el ANOVA resultó significativo, se realizan comparaciones postanova mediante la prueba de LSD (Mínima diferencia significativa) para determinar específicamente entre qué niveles de pH existen diferencias significativas en la biomasa.

library(agricolae)
posanova_c <- LSD.test(anova_c, trt = "pH_nivel")

kable(as.data.frame(posanova_c$statistics), 
      caption = "Estadísticos generales del modelo",
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE)
Estadísticos generales del modelo
MSerror Df Mean CV t.value LSD
129005.6 42 1082.173 33.19004 2.018082 264.6747
kable(as.data.frame(posanova_c$parameters), 
      caption = "Parámetros de la prueba LSD",
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE)
Parámetros de la prueba LSD
test p.ajusted name.t ntr alpha
Fisher-LSD none pH_nivel 3 0.05
medias_tabla <- posanova_c$means
rownames(medias_tabla) <- rownames(posanova_c$means)
kable(round(medias_tabla, 2), 
      caption = "Medias detalladas por nivel de pH",
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE) %>%
  scroll_box(width = "100%")
Medias detalladas por nivel de pH
Biomasa std r se LCL UCL Min Max Q25 Q50 Q75
Alto 1605.39 547.60 15 92.74 1418.23 1792.54 765.28 2337.33 1200.26 1422.84 2192.56
Bajo 593.02 164.83 15 92.74 405.87 780.18 369.82 977.52 481.35 545.54 659.71
Medio 1048.11 244.91 15 92.74 860.96 1235.26 568.46 1491.28 890.85 1039.64 1198.40
grupos_tabla <- posanova_c$groups
grupos_tabla$Nivel <- rownames(grupos_tabla)
grupos_tabla <- grupos_tabla[, c("Nivel", "Biomasa", "groups")]

kable(grupos_tabla, 
      caption = "Agrupamiento LSD — Nivel de pH",
      col.names = c("Nivel de pH", "Biomasa promedio", "Grupo"),
      row.names = FALSE,
      table.attr = "class='tabla-verde'") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE)
Agrupamiento LSD — Nivel de pH
Nivel de pH Biomasa promedio Grupo
Alto 1605.3853 a
Medio 1048.1093 b
Bajo 593.0233 c

El agrupamiento LSD confirma que los tres niveles de pH (Alto, Medio, Bajo) difieren significativamente entre sí, cada uno con una letra distinta (a, b, c), lo que respalda una relación creciente entre el pH del suelo y la producción de biomasa.

Interpretación

🔍 Interpretación La variable pH, que presentó la mayor correlación con la biomasa (r = 0.928), fue categorizada en tres niveles (Bajo, Medio, Alto) mediante terciles, resultando en grupos balanceados de 15 observaciones cada uno. El ANOVA de una vía evidenció diferencias altamente significativas en la biomasa según el nivel de pH (F(2,42) = 29.89, p < 0.001). La prueba de Shapiro-Wilk confirmó el cumplimiento del supuesto de normalidad de los residuales (p = 0.375); sin embargo, la prueba de Bartlett indicó que el supuesto de homogeneidad de varianzas no se cumple (p < 0.001), lo cual debe considerarse como una limitación del análisis. La prueba post-hoc de LSD reveló que los tres niveles de pH difieren significativamente entre sí: el grupo Alto presentó la mayor biomasa promedio (1605.39 g), seguido del grupo Medio (1048.11 g) y el grupo Bajo (593.02 g), confirmando una relación positiva entre el pH del suelo y la producción de biomasa.

Conclusiones generales

🌿 Conclusiones

  • Análisis univariado (a): las cinco variables mostraron distribuciones con distinto grado de variabilidad. Biomasa (CV ≈ 50%) y Zinc (CV ≈ 46%) presentaron la mayor dispersión relativa, mientras que Salinidad (CV ≈ 12%) fue la variable más homogénea. Zinc fue la única variable con valores atípicos identificados (5 muestras con concentraciones cercanas a 0), aspecto que amerita revisión adicional.

  • Análisis bivariado (b): de las cuatro covariables evaluadas, pH (r = 0.928) y Zinc (r = -0.781) presentaron correlación fuerte con la biomasa —positiva y negativa, respectivamente—, mientras que Salinidad (r = -0.067) y Potasio (r = -0.073) no mostraron relación lineal relevante.

  • ANOVA sobre pH categorizado (c): al categorizar el pH en tres niveles (Bajo, Medio, Alto) mediante terciles, se confirmó que el nivel de pH genera diferencias altamente significativas en la biomasa (F(2,42) = 29.89, p < 0.001). El supuesto de normalidad de los residuales se cumplió (Shapiro-Wilk, p = 0.375), pero el de homogeneidad de varianzas no (Bartlett, p < 0.001), lo cual constituye una limitación del análisis. Las comparaciones post-hoc (LSD) mostraron que los tres niveles difieren significativamente entre sí, con biomasa creciente conforme aumenta el pH (Bajo: 593.02 g < Medio: 1048.11 g < Alto: 1605.39 g).

  • Conclusión integradora: el pH del suelo es la variable con mayor capacidad explicativa sobre la producción de biomasa de la planta forrajera, seguida por el Zinc. Estos resultados sugieren que suelos menos ácidos y con menor contenido de zinc favorecen una mayor producción de biomasa, información relevante para orientar el manejo del suelo en ambientes destinados a la producción forrajera.

💡 Recomendaciones

  1. Ante la violación del supuesto de homogeneidad de varianzas, se recomienda complementar el análisis con una prueba robusta (por ejemplo, ANOVA de Welch) o transformar la variable respuesta en análisis futuros.
  2. Investigar las 5 muestras con valores atípicos de Zinc, para descartar errores de medición o confirmar si corresponden a un ambiente particular.
  3. Ampliar el diseño experimental con más réplicas por nivel de pH, para fortalecer la robustez de las comparaciones post-hoc.
  4. Explorar un modelo de regresión múltiple que incluya pH y Zinc de forma simultánea, dado que ambas variables mostraron relación relevante con la biomasa.