El presente estudio tuvo como objetivo evaluar el efecto de tres tipos de fertilizantes —Fertilizante A (Nitromax 30-10-10), Fertilizante B (Fosfobloom 10-30-10) y Fertilizante C (Compleximax 20-20-20)— sobre el crecimiento inicial de plantas de maíz (Zea mays) bajo condiciones controladas de invernadero. Para controlar la posible variabilidad ambiental dentro del invernadero, el experimento se diseñó utilizando un Diseño de Bloques Completos al Azar (DBCA).
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 |
# 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, ajustando por covariables 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 moderadamente robusto a violaciones de normalidad.
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 : Rechaza H₀ → detecta heterogeneidad.
Esta función calcula las matrices de covarianza por grupo y luego realiza pruebas estadísticas para verificar si estas matrices son homogéneas (es decir, si las relaciones de varianza y covarianza entre las variables son similares entre los grupos).
# Versión con DFA.CANCOR
HOMOGENEITY(data = plantas[c("Altura_Final","Num_Hojas","Fertilizante")],
groups = "Fertilizante",
variables = c("Altura_Final","Num_Hojas"),verbose = T)## 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
Resultados obtenidos:
Matrices de covarianza por grupo:
Prueba de Bartlett (paramétrica):
p = 2e-05, lo cual indica que las varianzas no son iguales entre los grupos.
Prueba de Fligner-Killeen (no paramétrica):
p = 1e-05, también sugiere que las varianzas difieren significativamente entre los grupos.
Box’s M Test:
Evalúa la igualdad completa de las matrices de covarianza entre grupos.
En este caso, p = 0.70291, lo que sugiere que no hay evidencia significativa para rechazar la igualdad de matrices de covarianza, y por tanto se puede asumir homogeneidad.
Conclusión:
A pesar de que las matrices covarianzas individuales difieren (según Bartlett y Fligner-Killeen), el test de Box indica que las matrices de covarianza completas pueden considerarse homogéneas, por lo que es válido continuar con el análisis discriminante o MANCOVA.
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.
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).
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 y univariado en ambas respuestas.
Tamaño del Efecto: Eta² multivariado = 0.791, indicando un efecto muy grande del fertilizante.
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 del maiz 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).