🌱 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)
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.
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%")
| 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.
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)
| 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.
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.
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.
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)
| N° | 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
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.
📐 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.
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.
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)
| 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.
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)
| 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 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.
📐 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.
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)
| 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)
| 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.
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)
| 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.
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)
| 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.
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)
| 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)
| 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%")
| 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)
| 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 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
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