1. Contexto

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):

Covariables (predictoras controladas):

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:

La aleatorización de los tratamientos dentro de cada bloque garantiza la validez del diseño experimental y permite controlar la heterogeneidad del ambiente.

2. Carga de Datos

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

3. Análisis Descriptivo

3.1. Resumen Estadístico

# 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

3.2. Visualización de Datos

# 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.

4. Verificación de Supuestos

4.1. Normalidad Multivariada

# 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()
Pruebas de Normalidad Multivariada por Grupo
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.

4.2. Homogeneidad de Matrices de Varianza-Covarianza

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.

# Versión con heplots
heplots::boxM(cbind(Altura_Final, Num_Hojas) ~ Fertilizante, data = plantas)
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  Y
## Chi-Sq (approx.) = 3.8065, df = 6, p-value = 0.7028
# Versión con biotools
boxM(plantas[, c("Altura_Final","Num_Hojas")], plantas$Fertilizante)
## 
##  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.

Función HOMOGENEITY

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:

Pruebas univariadas

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.

Pruebas multivariada

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.

4.3. Esfericidad de Bartlett

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.

5. Modelo 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:

Covariables (ajuste):

5.1. Ajuste del Modelo

modelo_plantas <- manova(
  cbind(Altura_Final, Num_Hojas) ~ 
    Fertilizante + Bloque + Altura_Inicial + Humedad_Inicial,
  data = plantas
)

5.2. Matrices SSCP y Eta²

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
SS$Bloque          # variabilidad explicada por Bloque
##              Altura_Final Num_Hojas
## Altura_Final    0.8879663  1.304358
## Num_Hojas       1.3043576 32.895833
SS$Altura_Inicial  # variabilidad de la covariable 1
##              Altura_Final Num_Hojas
## Altura_Final    133.56304 17.562906
## Num_Hojas        17.56291  2.309439
SS$Humedad_Inicial # variabilidad de la covariable 2
##              Altura_Final Num_Hojas
## Altura_Final     53.19671  19.94772
## Num_Hojas        19.94772   7.48000
SS$Residuals       # variabilidad residual
##              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
eta2
## [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.

5.3. Pruebas Multivariadas

Hipótesis de las pruebas multivariadas en MANCOVA

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.

summary(modelo_plantas, test = "Pillai")
##                 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
summary(modelo_plantas, test = "Wilks")
##                 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
summary(modelo_plantas, test = "Hotelling-Lawley")
##                 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
summary(modelo_plantas, test = "Roy")
##                 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.

5.4. ANOVAs Univariados

summary.aov(modelo_plantas)
##  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 :

Response Num_Hojas :

6. Análisis Post-hoc

6.1. Comparaciones por Pares

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.

7. Conclusiones

  1. 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.

  2. Homogeneidad Var-Cov: Box’s M no rechaza igualdad (p=0.7028), mientras que Ahmad sí (p<2.2e-16).

  3. Esfericidad de Bartlett: Rechazo de la identidad con p<0.001, confirmando correlación entre Altura_Final y Num_Hojas.

  4. Efecto Fertilizante: Altamente significativo multivariado y univariado en ambas respuestas.

  5. Tamaño del Efecto: Eta² multivariado = 0.791, indicando un efecto muy grande del fertilizante.

  6. Todos los pares de fertilizantes difieren significativamente, siendo C el más eficaz.

  7. 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).