El presente estudio se desarrolló con el objetivo de evaluar el efecto de tres tipos de fertilizante (A, B y C) Fertilizante A – Nitromax 30-10-10, Fertilizante B – Fosfobloom 10-30-10, Fertilizante C – Compleximax 20-20-20,sobre el crecimiento inicial de plantas de maíz (Zea mays) en condiciones controladas de invernadero. El experimento fue estructurado bajo un Diseño en Bloques Completos al Azar (DBCA) con el fin de controlar la posible variabilidad ambiental dentro del invernadero.
Cada unidad experimental consistió en una planta de maíz sembrada individualmente en maceta. Durante un periodo de crecimiento de cuatro semanas, se registraron medidas tanto al inicio como al final del experimento.
Variables de respuesta (dependientes):
Altura_Final (cm): Altura de la planta de maíz al término del experimento.
Num_Hojas: Número total de hojas desarrolladas por la planta al final del periodo experimental.
Covariables (predictoras controladas):
Altura_Inicial (cm): Altura de la planta al momento de la siembra.
Humedad_Inicial (%): Porcentaje de humedad del sustrato antes de iniciar el experimento, medido con sensor.
Variable explicativa principal:
Para reducir el efecto de la variabilidad ambiental dentro del invernadero, se establecieron cuatro bloques. Cada bloque representa una franja del invernadero con condiciones ligeramente diferentes:
Bloque 1: Cercano a la entrada del invernadero, con mayor exposición a cambios de temperatura por ventilación natural.
Bloque 2: Zona media expuesta a sombra parcial durante las mañanas.
Bloque 3: Área central con condiciones más estables de temperatura y humedad.
Bloque 4: Sector posterior del invernadero, con mayor retención de humedad en el suelo.
La aleatorización de los tratamientos dentro de cada bloque garantiza la validez del diseño experimental y permite controlar la heterogeneidad del ambiente.
plantas <- readxl::read_excel("datos_plantas.xlsx")
plantas_redondeado <- plantas %>%
mutate(across(where(is.numeric), ~ round(.x, 2)))
# Vista previa
head(plantas_redondeado) %>%
kable(align = "c") %>%
kable_styling(bootstrap_options = "striped", full_width = FALSE)| Altura_Inicial | Humedad_Inicial | Altura_Final | Num_Hojas | Fertilizante | Bloque |
|---|---|---|---|---|---|
| 11.24 | 34.36 | 30.10 | 12 | A | 1 |
| 10.07 | 32.53 | 27.45 | 10 | A | 2 |
| 11.55 | 31.85 | 26.54 | 12 | A | 3 |
| 12.54 | 23.86 | 26.34 | 12 | A | 4 |
| 10.74 | 29.19 | 33.17 | 13 | B | 1 |
| 9.67 | 35.44 | 33.31 | 12 | B | 2 |
# Resumen general
psych::describe(plantas[, c("Altura_Final", "Num_Hojas", "Altura_Inicial", "Humedad_Inicial")]) %>%
kable(digits = 2) %>%
kable_styling()| vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Altura_Final | 1 | 48 | 31.72 | 4.78 | 32.33 | 31.80 | 5.93 | 21.00 | 42.39 | 21.38 | -0.09 | -0.80 | 0.69 |
| Num_Hojas | 2 | 48 | 13.65 | 2.49 | 13.00 | 13.68 | 2.97 | 9.00 | 19.00 | 10.00 | 0.03 | -0.78 | 0.36 |
| Altura_Inicial | 3 | 48 | 10.26 | 2.03 | 10.09 | 10.18 | 1.98 | 6.49 | 15.71 | 9.22 | 0.31 | -0.11 | 0.29 |
| Humedad_Inicial | 4 | 48 | 29.71 | 5.01 | 29.66 | 29.75 | 5.41 | 17.75 | 38.58 | 20.84 | -0.10 | -0.59 | 0.72 |
# Por grupo de fertilizante
plantas %>%
group_by(Fertilizante) %>%
summarise(
n = n(),
Altura_Media = mean(Altura_Final),
Altura_SD = sd(Altura_Final),
Hojas_Media = mean(Num_Hojas),
Hojas_SD = sd(Num_Hojas)
) %>%
kable(digits = 2) %>%
kable_styling()| Fertilizante | n | Altura_Media | Altura_SD | Hojas_Media | Hojas_SD |
|---|---|---|---|---|---|
| A | 16 | 26.64 | 2.52 | 11.06 | 1.34 |
| B | 16 | 32.13 | 2.91 | 13.69 | 1.14 |
| C | 16 | 36.39 | 2.38 | 16.19 | 1.52 |
El dataset contiene 48 observaciones equilibradas en los tres niveles de fertilizante.
# Boxplots combinados
p1 <- ggplot(plantas, aes(x = Fertilizante, y = Altura_Final, fill = Fertilizante)) +
geom_boxplot(alpha = 0.7) +
geom_jitter(width = 0.1, alpha = 0.5) +
labs(title = "Altura Final por Fertilizante", y = "cm") +
theme_minimal()
p2 <- ggplot(plantas, aes(x = Fertilizante, y = Num_Hojas, fill = Fertilizante)) +
geom_boxplot(alpha = 0.7) +
geom_jitter(width = 0.1, alpha = 0.5) +
labs(title = "Número de Hojas por Fertilizante") +
theme_minimal()
ggarrange(p1, p2, ncol = 2, common.legend = TRUE)# Matriz de correlación
ggpairs(plantas[, c("Altura_Final", "Num_Hojas", "Altura_Inicial", "Humedad_Inicial")],
lower = list(continuous = wrap("smooth", alpha = 0.3, size = 1)),
title = "Matriz de Correlación")Conclusión preliminar El fertilizante C parece ser el más efectivo en términos de crecimiento y producción de hojas.
Hay una tendencia consistente entre ambas variables de respuesta.
Las diferencias aparentes justifican aplicar un MANCOVA para confirmar si son estadísticamente significativas, especialmente ajustando por covariables como Altura Inicial y Humedad Inicial.
# Preparación de datos por grupo
grpA <- plantas %>% dplyr::filter(Fertilizante == "A") %>% dplyr::select(Altura_Final, Num_Hojas)
grpB <- plantas %>% dplyr::filter(Fertilizante == "B") %>% dplyr::select(Altura_Final, Num_Hojas)
grpC <- plantas %>% dplyr::filter(Fertilizante == "C") %>% dplyr::select(Altura_Final, Num_Hojas)
# Pruebas Shapiro-Wilk multivariado
norm_test <- data.frame(
Grupo = c("A", "B", "C"),
Estadistico_W = c(
mshapiro.test(t(grpA))$statistic,
mshapiro.test(t(grpB))$statistic,
mshapiro.test(t(grpC))$statistic
),
p_valor = c(
mshapiro.test(t(grpA))$p.value,
mshapiro.test(t(grpB))$p.value,
mshapiro.test(t(grpC))$p.value
)
)
norm_test %>%
kable(digits = 4, caption = "Pruebas de Normalidad Multivariada por Grupo") %>%
kable_styling()| Grupo | Estadistico_W | p_valor |
|---|---|---|
| A | 0.8915 | 0.0588 |
| B | 0.9402 | 0.3509 |
| C | 0.8681 | 0.0255 |
Se valúa si las variables (Altura_Final y Num_Hojas) tienen una distribución normal multivariada dentro de cada grupo (A, B y C) procedemos, pues MANCOVA es robusta.
Hipótesis del test de Box (Box’s M)
H₀ (hipótesis nula): Las matrices de varianzas-covarianzas son iguales en todos los grupos.
H₁ (hipótesis alternativa): Al menos una matriz difiere de las otras.
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: Y
## Chi-Sq (approx.) = 3.8065, df = 6, p-value = 0.7028
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: plantas[, c("Altura_Final", "Num_Hojas")]
## Chi-Sq (approx.) = 3.8065, df = 6, p-value = 0.7028
# Versión con covTestR
plantas_list <- lapply(unique(plantas$Fertilizante),
function(g){
as.matrix(plantas[plantas$Fertilizante==g, c("Altura_Final","Num_Hojas")])
})
names(plantas_list) <- unique(plantas$Fertilizante)
Ahmad2017(plantas_list)##
## Ahmad 2017 Homogeneity of Covariance Matrices Test
##
## data: A, B and C
## Standard Normal = 274.97, Mean = 0, Variance = 1, p-value < 2.2e-16
## alternative hypothesis: true difference in covariance matrices is not equal to 0
Ahmad2017 p muy pequeño (< 0.05): Rechaza H₀ → detecta heterogeneidad.
# Versión con DFA.CANCOR
HOMOGENEITY(data = plantas[c("Altura_Final","Num_Hojas","Fertilizante")],
groups = "Fertilizante",
variables = c("Altura_Final","Num_Hojas"))## Altura_Final Num_Hojas
## Altura_Final 6.35 1.84
## Num_Hojas 1.84 1.80
## Altura_Final Num_Hojas
## Altura_Final 8.50 0.42
## Num_Hojas 0.42 1.30
## Altura_Final Num_Hojas
## Altura_Final 5.67 1.45
## Num_Hojas 1.45 2.30
## Altura_Final Num_Hojas
## Altura_Final 6.840 1.238
## Num_Hojas 1.238 1.796
## Altura_Final Num_Hojas
## Altura_Final 1.000 0.353
## Num_Hojas 0.353 1.000
## Log Determinant
## A 2.080
## B 2.382
## C 2.390
## Pooled 2.375
Test de Bartlett y Fligner-Killeen Estos dos evalúan homogeneidad de varianzas univariadas ambos test rechazan la varianzas univariadas
Importante: Estos resultados se basan en cada variable por separado y no en la estructura conjunta multivariada.
Matrices agrupadas (pooled) Estas matrices agregadas son útiles como referencia común en MANCOVA para comparar qué tanto difieren las matrices individuales respecto a esta media ponderada. Conclusión: p≈0.70 → homogeneidad satisfecha.
Log-determinantes y Box’s M test multivariado Log determinantes individuales (A, B, C) y del grupo combinado (pooled) sirven para medir la dispersión conjunta. Interpretación:
p > 0.05 → No se rechaza H₀
Por tanto, las matrices de varianza-covarianza se consideran homogéneas a nivel multivariado.
Este resultado es el más relevante para MANCOVA, ya que evalúa todas las variables dependientes simultáneamente.
Aunque las varianzas univariadas difieren (según Bartlett y Fligner-Killeen), el test multivariado de Box no detecta diferencias significativas entre las matrices de varianza-covarianza. Por tanto, el supuesto de homogeneidad se cumple para efectos de la MANCOVA.
Esto justifica el uso de MANCOVA en lugar de realizar ANOVAs por separado, ya que el modelo multivariado aprovecha la correlación entre respuestas para mejorar potencia estadística.
H₀ (nula): La matriz de correlaciones es la identidad (no hay correlaciones entre variables).
H₁ (alternativa): Al menos una correlación entre variables es significativamente diferente de 0.
dat_resp <- plantas[, c("Altura_Final","Num_Hojas")]
cortest.bartlett(cor(dat_resp), n = nrow(dat_resp))## $chisq
## [1] 49.902
##
## $p.value
## [1] 1.616198e-12
##
## $df
## [1] 1
Interpretación:
p < 0.05 → Se rechaza H₀
Las variables están significativamente correlacionadas.
Por lo tanto, tiene sentido analizarlas conjuntamente en un análisis multivariado como el MANCOVA. Conlusión: El test de Bartlett confirma que hay correlación entre Altura_Final y Num_Hojas, por lo que es válido aplicar un análisis conjunto como MANCOVA.
Ajuste de modelo MANCOVA con diseño DBCA (Diseño en Bloques Completos al Azar), donde:
Variables dependientes (respuesta): - Altura_Final, Num_Hojas
Factores:
Fertilizante (factor de tratamiento principal)
Bloque (bloques aleatorios o controlados)
Covariables (ajuste):
Altura_Inicial
Humedad_Inicial
En análisis multivariado, las matrices SSCP (Sums of Squares and Cross Products) resumen la variabilidad conjunta de las variables dependientes y las covarianzas entre ellas para cada efecto del modelo. Cada matriz SSCP contiene:
Suma de cuadrados (diagonal): varianzas de cada variable ajustada al efecto.
Productos cruzados (fuera de diagonal): covarianzas entre pares de variables ajustadas al efecto.
Estas matrices permiten calcular estadísticos multivariados como Wilks’ Lambda, Pillai y el tamaño del efecto.
La eta cuadrado multivariado (η²) se define como la proporción de la varianza multivariada explicada por un factor, calculada usando determinantes de matrices:
# Extracción de matrices SSCP
SS <- summary(modelo_plantas)$SS
SS <- summary(modelo_plantas)$SS
SS$Fertilizante # variabilidad explicada por Fertilizante## Altura_Final Num_Hojas
## Altura_Final 764.3460 400.1093
## Num_Hojas 400.1093 210.1667
## Altura_Final Num_Hojas
## Altura_Final 0.8879663 1.304358
## Num_Hojas 1.3043576 32.895833
## Altura_Final Num_Hojas
## Altura_Final 133.56304 17.562906
## Num_Hojas 17.56291 2.309439
## Altura_Final Num_Hojas
## Altura_Final 53.19671 19.94772
## Num_Hojas 19.94772 7.48000
## Altura_Final Num_Hojas
## Altura_Final 120.13229 16.90843
## Num_Hojas 16.90843 38.12723
T_total <- SS$Fertilizante + SS$Bloque + SS$Altura_Inicial +
SS$Humedad_Inicial + SS$Residuals
T_total## Altura_Final Num_Hojas
## Altura_Final 1072.1260 455.8327
## Num_Hojas 455.8327 290.9792
# Cálculo de eta² multivariado
eta2 <- 1 - det(SS$Bloque + SS$Altura_Inicial + SS$Humedad_Inicial + SS$Residuals) / det(T_total)
det(T_total)## [1] 104182.9
## [1] 0.7910658
Interpretación: El fertilizante explica aproximadamente el 79% de la variabilidad multivariada conjunta (Altura + Hojas), lo que indica un efecto muy fuerte y relevante del tratamiento sobre las respuestas.
En el análisis MANCOVA se aplican distintas pruebas estadísticas para evaluar si existe un efecto multivariado significativo del factor principal (en este caso, Fertilizante) sobre las variables de respuesta (Altura_Final, Num_Hojas), ajustando por las covariables (Altura_Inicial, Humedad_Inicial) y el efecto de Bloque. Todas las pruebas contrastan la misma hipótesis general, aunque lo hacen con diferentes criterios.
## Df Pillai approx F num Df den Df Pr(>F)
## Fertilizante 2 0.91813 16.9732 4 80 4.099e-10 ***
## Bloque 3 0.48365 4.2527 6 80 0.0009097 ***
## Altura_Inicial 1 0.52654 21.6863 2 39 4.656e-07 ***
## Humedad_Inicial 1 0.34403 10.2270 2 39 0.0002687 ***
## Residuals 40
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Df Wilks approx F num Df den Df Pr(>F)
## Fertilizante 2 0.09396 44.117 4 78 < 2.2e-16 ***
## Bloque 3 0.51968 5.033 6 78 0.0002080 ***
## Altura_Inicial 1 0.47346 21.686 2 39 4.656e-07 ***
## Humedad_Inicial 1 0.65597 10.227 2 39 0.0002687 ***
## Residuals 40
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Df Hotelling-Lawley approx F num Df den Df Pr(>F)
## Fertilizante 2 9.5146 90.389 4 76 < 2.2e-16 ***
## Bloque 3 0.9178 5.813 6 76 5.043e-05 ***
## Altura_Inicial 1 1.1121 21.686 2 39 4.656e-07 ***
## Humedad_Inicial 1 0.5245 10.227 2 39 0.0002687 ***
## Residuals 40
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Df Roy approx F num Df den Df Pr(>F)
## Fertilizante 2 9.5011 190.022 2 40 < 2.2e-16 ***
## Bloque 3 0.9108 12.144 3 40 8.643e-06 ***
## Altura_Inicial 1 1.1121 21.686 2 39 4.656e-07 ***
## Humedad_Inicial 1 0.5245 10.227 2 39 0.0002687 ***
## Residuals 40
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Interpretación: Los cuatro estadísticos multivariantes (Pillai, Wilks, Hotelling-Lawley y Roy) muestran evidencia altamente significativa (p < 0.001) del efecto del fertilizante sobre las variables respuesta conjuntas (Altura_Final, Num_Hojas). Esto respalda la hipótesis de que al menos un nivel del factor produce un efecto diferente.
## Response Altura_Final :
## Df Sum Sq Mean Sq F value Pr(>F)
## Fertilizante 2 764.35 382.17 127.2507 < 2.2e-16 ***
## Bloque 3 0.89 0.30 0.0986 0.9603634
## Altura_Inicial 1 133.56 133.56 44.4720 5.44e-08 ***
## Humedad_Inicial 1 53.20 53.20 17.7127 0.0001411 ***
## Residuals 40 120.13 3.00
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Num_Hojas :
## Df Sum Sq Mean Sq F value Pr(>F)
## Fertilizante 2 210.167 105.083 110.2449 < 2.2e-16 ***
## Bloque 3 32.896 10.965 11.5039 1.419e-05 ***
## Altura_Inicial 1 2.309 2.309 2.4229 0.127453
## Humedad_Inicial 1 7.480 7.480 7.8474 0.007804 **
## Residuals 40 38.127 0.953
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Response Altura_Final :
El fertilizante, la altura inicial y la humedad inicial afectan significativamente la altura final.
El bloque no afecta significativamente la altura final.
Response Num_Hojas :
Aquí el bloque sí afecta el número de hojas.
La altura inicial no afecta significativamente el número de hojas.
niveles_fert <- c("A", "B", "C")
comb <- t(combn(length(niveles_fert), 2))
for(i in 1:nrow(comb)){
modelo.comp <- manova(cbind(Altura_Final, Num_Hojas) ~
Fertilizante + Bloque + Altura_Inicial + Humedad_Inicial,
data = plantas,
subset = Fertilizante %in% niveles_fert[comb[i,]])
cat("\n\nComparación:", niveles_fert[comb[i,]][1], "vs", niveles_fert[comb[i,]][2], "\n")
print(summary(modelo.comp, test = "Pillai"))
}##
##
## Comparación: A vs B
## Df Pillai approx F num Df den Df Pr(>F)
## Fertilizante 1 0.82185 55.360 2 24 1.022e-09 ***
## Bloque 3 0.62562 3.793 6 50 0.0034331 **
## Altura_Inicial 1 0.49768 11.889 2 24 0.0002581 ***
## Humedad_Inicial 1 0.43117 9.096 2 24 0.0011476 **
## Residuals 25
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Comparación: A vs C
## Df Pillai approx F num Df den Df Pr(>F)
## Fertilizante 1 0.93754 180.111 2 24 3.528e-15 ***
## Bloque 3 0.66765 4.176 6 50 0.0017713 **
## Altura_Inicial 1 0.45816 10.147 2 24 0.0006404 ***
## Humedad_Inicial 1 0.35355 6.563 2 24 0.0053263 **
## Residuals 25
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Comparación: B vs C
## Df Pillai approx F num Df den Df Pr(>F)
## Fertilizante 1 0.76160 38.336 2 24 3.37e-08 ***
## Bloque 3 0.54483 3.120 6 50 0.011254 *
## Altura_Inicial 1 0.59531 17.652 2 24 1.93e-05 ***
## Humedad_Inicial 1 0.35742 6.675 2 24 0.004956 **
## Residuals 25
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Comparación Pillai (Fertilizante) F-aprox p-valor
Interpretación general: Todos los pares de fertilizantes (A-B, A-C y B-C) difieren significativamente entre sí cuando se consideran conjuntamente Altura_Final y Número de Hojas.
Esto refuerza la conclusión de que el tipo de fertilizante tiene un efecto global importante sobre el desarrollo de las plantas en términos de altura y número de hojas.
La magnitud de la estadística de Pillai sugiere que la mayor diferencia multivariada se da entre A y C, seguida de A y B, y por último B y C.
Normalidad Multivariada: Aceptada en A y B; C presenta leve violación (p=0.0255). La MANCOVA es robusta, pero conviene verificar transformaciones si fuera necesario.
Homogeneidad Var-Cov: Box’s M no rechaza igualdad (p=0.7028), mientras que Ahmad sí (p<2.2e-16), sugiriendo posibles heterogeneidades a considerar.
Esfericidad de Bartlett: Rechazo de la identidad con p<0.001, confirmando correlación entre Altura_Final y Num_Hojas.
Efecto Fertilizante: Altamente significativo multivariado (Wilks’ Λ=0.09396, p<2.2e-16) y univariado en ambas respuestas.
Tamaño del Efecto: Eta² multivariado = 0.791, indicando un efecto muy grande del fertilizante.
Post-hoc: Todos los pares de fertilizantes difieren significativamente, siendo C el más eficaz.
Conclusión General: En conjunto, estos resultados demuestran que el tipo de fertilizante tiene un impacto sólido y consistente en el crecimiento de Zea mays bajo condiciones controladas. El fertilizante Compleximax (C) promovió tanto una mayor altura como un mayor número de hojas respecto a Nitromax (A) y Fosfobloom (B). La robustez de la MANCOVA frente a leves violaciones de supuestos, junto con el elevado tamaño de efecto, respalda la recomendación de utilizar formulaciones balanceadas (20-20-20) para optimizar el desarrollo vegetativo en cultivos experimentales.