UNIVERSIDAD NACIONAL AGRARIA LA MOLINA
FACULTAD DE ECONOMÍA Y PLANIFICACIÓN
DEPARTAMENTO ACADÉMICO DE ESTADÍSTICA INFORMÁTICA

Práctica Calificada 1

CURSO: Técnicas Multivariadas
DOCENTE: Miranda Villagomez Clodomiro Fernando

ALUMNOS:
Colca Balbin, Josue Jeremías - 20220761
Garces Quispe, Adryana Luisa - 20220764
Jesús Mamani, Angelo Miguel - 20220767
Landa Cordova, Valeria Estefany - 20220768
Ramos Orue, Selene Milagros - 20220777 - 20220774
Sanchez Perez, Omar Zenon - 20211938
Sandoval Hurtado, Nagiely - 20220780

2025

1 - Análisis Multivariado: Prueba de Hotelling T² considerando la matriz varianza covarianza conocida

1. Carga de Librerías

library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(readxl)
library(corrplot)
## corrplot 0.95 loaded
library(mvnormtest)
library(summarytools)

2. Preparación de los Datos

# Cargar el conjunto de datos
datos <- read_excel("dataset_salud.xlsx")
datos <- datos[-1]  # Eliminar primera columna si es irrelevante
attach(datos)

# Seleccionar variables de interés
datos <- datos %>%
  dplyr::select(Edad, IMC, Presion_Sistolica, Glucosa_Ayunas, Colesterol_Total)

3. Análisis Exploratorio

a) Resumen Descriptivo

descr(datos)
## Descriptive Statistics  
## datos  
## N: 1500  
## 
##                     Colesterol_Total      Edad   Glucosa_Ayunas       IMC   Presion_Sistolica
## ----------------- ------------------ --------- ---------------- --------- -------------------
##              Mean             180.18     45.47            90.21     25.98              110.30
##           Std.Dev              26.59     14.54             8.61      3.96               11.55
##               Min             120.00     18.00            70.00     16.00               90.00
##                Q1             162.00     35.00            84.00     23.40              102.00
##            Median             179.00     45.00            90.00     25.85              110.00
##                Q3             199.00     55.00            96.00     28.70              118.00
##               Max             288.00     96.00           120.00     39.70              154.00
##               MAD              26.69     14.83             8.90      3.93               11.86
##               IQR              37.00     20.00            12.00      5.30               16.00
##                CV               0.15      0.32             0.10      0.15                0.10
##          Skewness               0.07      0.18             0.08      0.02                0.25
##       SE.Skewness               0.06      0.06             0.06      0.06                0.06
##          Kurtosis              -0.17     -0.21            -0.19     -0.10               -0.26
##           N.Valid            1500.00   1500.00          1500.00   1500.00             1500.00
##                 N            1500.00   1500.00          1500.00   1500.00             1500.00
##         Pct.Valid             100.00    100.00           100.00    100.00              100.00

Observaciones: - La mayoría de los pacientes tienen niveles aceptables, pero algunos casos extremos (ej. 288 mg/dL en colesterol) podrían requerir intervención médica. - La muestra representa adecuadamente a una población adulta. - Se observan niveles glucémicos saludables, aunque algunos casos bordean la prediabetes. - La población tiende al sobrepeso, con casos de obesidad significativa. - La presión arterial promedio es saludable, aunque hay casos aislados de hipertensión.

b) Matriz de Correlación

cor_matrix <- cor(datos)
cor_matrix
##                         Edad         IMC Presion_Sistolica Glucosa_Ayunas
## Edad              1.00000000 0.013957331        0.57181515      0.3403228
## IMC               0.01395733 1.000000000        0.00155298      0.1237298
## Presion_Sistolica 0.57181515 0.001552980        1.00000000      0.2184098
## Glucosa_Ayunas    0.34032280 0.123729800        0.21840985      1.0000000
## Colesterol_Total  0.37815407 0.009126552        0.17077887      0.1216273
##                   Colesterol_Total
## Edad                   0.378154072
## IMC                    0.009126552
## Presion_Sistolica      0.170778875
## Glucosa_Ayunas         0.121627345
## Colesterol_Total       1.000000000

c) Gráfico de Correlaciones

corrplot(cor_matrix, method = "circle")

Interpretación:
La correlación entre Edad y Presión Sistólica es la más destacada. Esto se debe a que la presión sistólica aumenta con la edad, por factores como rigidez arterial, daño vascular acumulado y cambios hormonales (como menor producción de óxido nítrico).

4. Evaluación de Supuestos

a) Prueba de Normalidad Multivariada

mshapiro.test(t(datos))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.9971, p-value = 0.007081

Hipótesis: - H₀: La muestra proviene de una distribución normal multivariada.

b) Contraste para el Vector de Medias

n <- 1500
p <- 5
mu_0 <- c(45, 24, 120, 90, 178)

Sigma <- matrix(c(
  210,   2.1,   79,   36,  110,
  2.1,  16,    1.0,   2.3,   0.8,
  79,  1.0,  100,    19.3,   41.2,
  36,  2.3,   19.3,  80,   25.7,
  110, 0.8,   41.2,   25.7,  90),
  nrow = 5, byrow = TRUE)

x_bar <- colMeans(datos)

Z2 <- n * t(x_bar - mu_0) %*% solve(Sigma) %*% (x_bar - mu_0)
Z2 <- as.numeric(Z2)

alpha <- 0.05
chi_critico <- qchisq(1 - alpha, df = p)

Z2
## [1] 2639.338
chi_critico
## [1] 11.0705
if (Z2 > chi_critico) {
  mensaje <- "Rechazamos H0: El vector de medias NO es igual al especificado."
} else {
  mensaje <- "No se rechaza H0: El vector de medias podría ser igual al especificado."
}
mensaje
## [1] "Rechazamos H0: El vector de medias NO es igual al especificado."

Conclusión:
Hay evidencia estadística suficiente para afirmar que el vector de medias muestrales difiere significativamente del vector hipotético. Esto indica que al menos una de las medias poblacionales no coincide con su valor esperado.

2 - Análisis Multivariado: Prueba de Hotelling T² considerando la matriz varianza covarianza desconocida

Una empresa farmacéutica está desarrollando un nuevo suplemento alimenticio para deportistas. Para control de calidad, analizan 4 características químicas de cada lote producido:

  • pH del suplemento

  • Concentración de proteína (% peso)

  • Concentración de carbohidratos (% peso)

  • Nivel de sodio (mg/100g)

Se quiere verificar si la media de la producción cumple con los estándares esperados.

Los estándares ideales son los siguientes:

  1. pH esperado ≈ 7.0 (ligeramente neutro)

  2. Proteína esperada ≈ 20%

  3. Carbohidrato esperado ≈ 50%

  4. Sodio esperado ≈ 150 mg/100g

Datos

Primero cargamos paquetes

library(nortest)
library(summarytools)
library(BSDA)
library(inferr)
library(mvnormtest)
library(MVTests)
library(MVN)
library(tidyverse)
library(ggstatsplot)
library(effectsize)
library(car)
library(reshape2) 
library(ggthemes)
library(ggpubr)
library(ICSNP)
library(heplots)
library(biotools)
library(ergm)
library(rrcov)
library(Hotelling)
library(echarts4r)
library(gganimate)
library(hrbrthemes)
library(png)
library(gifski)
# Simulación de base de datos
set.seed(123)  # para reproducibilidad

n <- 1000

# Simulamos las variables
pH <- rnorm(n, mean = 7.0, sd = 0.3)
proteina <- rnorm(n, mean = 20.0, sd = 2.0)
carbohidrato <- rnorm(n, mean = 50.0, sd = 3.0)
sodio <- rnorm(n, mean = 150.0, sd = 10.0)

# Armamos la base
datos <- data.frame(
  pH = pH,
  Proteina = proteina,
  Carbohidrato = carbohidrato,
  Sodio = sodio
)

# Vemos las primeras filas
head(datos)
##         pH Proteina Carbohidrato    Sodio
## 1 6.831857 18.00840     48.46519 148.4969
## 2 6.930947 17.92009     50.71081 146.7224
## 3 7.467612 19.96404     48.37523 135.5183
## 4 7.021153 19.73565     53.65768 143.0272
## 5 7.038786 14.90131     50.52241 175.9849
## 6 7.514519 22.08115     48.15420 149.6258

Análisis Exploratorio Descriptivo

summarytools::descr(datos)
## Descriptive Statistics  
## datos  
## N: 1000  
## 
##                     Carbohidrato        pH   Proteina     Sodio
## ----------------- -------------- --------- ---------- ---------
##              Mean          49.94      7.00      20.08    149.91
##           Std.Dev           2.94      0.30       2.02      9.92
##               Min          41.45      6.16      13.90    118.71
##                Q1          48.03      6.81      18.69    143.60
##            Median          49.85      7.00      20.11    149.92
##                Q3          51.93      7.20      21.51    156.51
##               Max          60.26      7.97      26.78    178.95
##               MAD           2.86      0.29       2.09      9.53
##               IQR           3.90      0.39       2.81     12.90
##                CV           0.06      0.04       0.10      0.07
##          Skewness           0.04      0.07      -0.01     -0.07
##       SE.Skewness           0.08      0.08       0.08      0.08
##          Kurtosis           0.02     -0.08      -0.07     -0.05
##           N.Valid        1000.00   1000.00    1000.00   1000.00
##                 N        1000.00   1000.00    1000.00   1000.00
##         Pct.Valid         100.00    100.00     100.00    100.00

Interpretaciones:

  1. Medias observadas: Las medias de las variables químicas son extremadamente cercanas a los valores ideales establecidos, lo cual sugiere preliminarmente que la producción está alineada con los estándares deseados.

  2. Dispersión (desviación estándar y rango intercuartílico - IQR):

  • Carbohidrato: desviación estándar de 2.94%, con un IQR de 3.90%. La concentración de carbohidratos tiene una variabilidad moderada, pero razonable para un proceso industrial.

  • pH: desviación estándar de 0.30, muy baja. La acidez/alcalinidad del suplemento está bastante controlada.

  • Proteína: desviación estándar de 2.02% y un IQR de 2.81%. Variabilidad baja a moderada, lo esperado para productos con procesos de mezcla.

  • Sodio: desviación estándar de 9.92 mg/100g, y IQR de 12.90 mg/100g. Ligeramente más variable, pero sigue un rango adecuado.

  1. Forma de la distribución (asimetría y curtosis):
  • Skewness (asimetría): Todas las variables tienen valores de asimetría cercanos a 0 (entre -0.07 y 0.07), lo que indica que las distribuciones son aproximadamente simétricas.

  • Kurtosis: Todas tienen valores cercanos a 0 (entre -0.08 y 0.02), lo que sugiere que no hay colas extremadamente pesadas o livianas; es decir, las distribuciones son leptocúrticas normales o muy similares a la normal.

CASO UNIVARIADO: Prueba de hipótesis para la media de pH

H₀: μ = 7.0

H₁: μ ≠ 7.0

  1. Prueba de normalidad sobre pH
library(nortest)    
library(ggstatsplot)  
library(dplyr)      

pH = datos$pH

# Prueba de Shapiro-Wilk
shapiro.test(pH)
## 
##  Shapiro-Wilk normality test
## 
## data:  pH
## W = 0.99838, p-value = 0.4765
# Prueba de Lilliefors (Kolmogorov-Smirnov adaptado)
lillie.test(pH)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  pH
## D = 0.014963, p-value = 0.8484

Resultados:

  • Shapiro-Wilk p-value > 0.05: pH tiene distribución normal.

  • Lilliefors p-value > 0.05: se confirma la normalidad.

Entonces podemos aplicar pruba t de Student.

  1. Prueba t para la media (bilateral)
t.test(pH, alternative = "two.sided", mu = 7.0, conf.level = 0.95)
## 
##  One Sample t-test
## 
## data:  pH
## t = 0.51428, df = 999, p-value = 0.6072
## alternative hypothesis: true mean is not equal to 7
## 95 percent confidence interval:
##  6.986377 7.023300
## sample estimates:
## mean of x 
##  7.004838

Análisis del resultado:

  • p_value = 0.6072 > 0.05: A un nivel de significancia del 5%, no hay suficiente evidencia estadística para afirmar que la media del pH es difernete de 7.0

  • El intervalo de confianza (95%) para la media poblacional está entre 6.986 y 7.023. Dado que 7.0 está dentro de este intervalo, refuerza la conclusión de que no se puede rechazar H₀.

  1. Visualización con gghistostats
gghistostats(
  data = pH %>% as_tibble(),
  x = value,
  test.value = 7.0, 
  type = "p", 
  normal.curve = TRUE,
  normal.curve.args = list(linewidth = 2, col = 'purple')
)

  1. Interpretación del tamaño del efecto (ĝₕₑ𝖽𝗀ₑ𝗌)
interpret_hedges_g(0.02)
## [1] "very small"
## (Rules: cohen1988)
  • El valor de ĝₕₑ𝖽𝗀ₑ = 0.02 indica un efecto muy pequeño, lo que significa que la diferencia entre la media observada del pH y el valor esperado (7.0) es casi insignificante en términos prácticos.

  • Otro indicador:

    Factor de Bayes (log(BF₀₁)) ≈ 3.20: sugiere fuertes evidencias a favor de la hipótesis nula (H₀). Este valor es bastante alto y está asociado con una evidencia fuerte para que la media del pH sea igual a 7.0, lo que refuerza la conclusión de que no hay razones suficientes para rechazar H₀.

CASO MULTIVARIADO: Detección de outliers multivariados

library(MVN)

par(mfrow = c(1, 2))

# Distancia de Mahalanobis
outliers <- mvn(data = datos, multivariateOutlierMethod = "quan")

# Distancia ajustada de Mahalanobis
outliers.adj <- mvn(data = datos, multivariateOutlierMethod = "adj")

Interpretación del gráfico:

  • El análisis inicial sugiere una cantidad moderada de outliers (34), pero el método robusto ajustado reduce este número significativamente (9), esto indica que el método estándar puede ser demasiado sensible a desviaciones menores de la normalidad multivariada.

  • Los 9 casos persistentemente identificados como outliers en ambos métodos merecen mayor investigación como posibles valores atípicos genuinos.

RECORDAR:

  • Mahalanobis clásico: puede sobredetectar outliers si hay contaminación en los datos.

  • Mahalanobis ajustado: es más robusto (ideal si crees que hay outliers influyendo en el cálculo de la media y la covarianza)

  1. Supuesto de normalidad multivariada de datos (la matriz de datos)
  • Prueba de Shapiro Wilk:
mshapiro.test(t(datos))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.99804, p-value = 0.3009

Resultado: obtenemos un p_value = 0.3009, afirmando que cumple la normalidad.

  • Test MVN de Royston:
royston <- mvn(data = datos, mvnTest = "royston", multivariatePlot = "qq")

royston
## $multivariateNormality
##      Test       H   p value MVN
## 1 Royston 1.09868 0.8944825 YES
## 
## $univariateNormality
##               Test     Variable Statistic   p value Normality
## 1 Anderson-Darling      pH         0.2965    0.5920    YES   
## 2 Anderson-Darling   Proteina      0.2984    0.5864    YES   
## 3 Anderson-Darling Carbohidrato    0.3288    0.5160    YES   
## 4 Anderson-Darling    Sodio        0.3057    0.5661    YES   
## 
## $Descriptives
##                 n       Mean   Std.Dev     Median        Min        Max
## pH           1000   7.004838 0.2975085   7.002763   6.157068   7.972312
## Proteina     1000  20.084931 2.0193484  20.109705  13.904278  26.780742
## Carbohidrato 1000  49.939662 2.9350724  49.848277  41.454360  60.263284
## Sodio        1000 149.908396 9.9235168 149.918092 118.709118 178.948544
##                    25th       75th        Skew    Kurtosis
## pH             6.811503   7.199381  0.06519600 -0.08010201
## Proteina      18.693554  21.506901 -0.01051340 -0.07188844
## Carbohidrato  48.031421  51.927726  0.04495948  0.02268770
## Sodio        143.603519 156.505388 -0.07129556 -0.04610869

Resultados:

  • p_value = 0.8944825, sí cumple normalidad multivariada (YES), porque el p-valor > 0.05

  • Cada variable individualmente también cumple normalidad (Anderson-Darling en cada caso).

  • Las medias y medianas son bastante cercanas → baja asimetría.

  • Skewness: todos los valores entre -0.1 y 0.07 → aproximadamente simétricos.

  • Kurtosis: valores cercanos a 0 → no hay colas pesadas ni picos extremos.

  • Test MVN de Mardia:

mardia <- mvn(data = datos, mvnTest = "mardia")
mardia$multivariateNormality
##              Test          Statistic           p value Result
## 1 Mardia Skewness     21.05762018861 0.393748095803564    YES
## 2 Mardia Kurtosis -0.874197659088932 0.382010620648247    YES
## 3             MVN               <NA>              <NA>    YES
  • Test MVN de Henze-Zirkler:
hz <- mvn(data = datos, mvnTest = "hz")
hz$multivariateNormality
##            Test        HZ   p value MVN
## 1 Henze-Zirkler 0.9232573 0.4617521 YES
hz$univariateNormality
##               Test     Variable Statistic   p value Normality
## 1 Anderson-Darling      pH         0.2965    0.5920    YES   
## 2 Anderson-Darling   Proteina      0.2984    0.5864    YES   
## 3 Anderson-Darling Carbohidrato    0.3288    0.5160    YES   
## 4 Anderson-Darling    Sodio        0.3057    0.5661    YES
  • Test MVN de Doornik-Hansen:
dh <- mvn(data = datos, mvnTest = "dh")
dh$multivariateNormality
##             Test        E df p value MVN
## 1 Doornik-Hansen 3629.157  8       0  NO
dh$univariateNormality
##               Test     Variable Statistic   p value Normality
## 1 Anderson-Darling      pH         0.2965    0.5920    YES   
## 2 Anderson-Darling   Proteina      0.2984    0.5864    YES   
## 3 Anderson-Darling Carbohidrato    0.3288    0.5160    YES   
## 4 Anderson-Darling    Sodio        0.3057    0.5661    YES
  • Test MVN de Szekely-Rizzo:
energy <- mvn(data = datos, mvnTest = "energy")
energy$multivariateNormality
##          Test Statistic p value MVN
## 1 E-statistic 0.9591227   0.571 YES
energy$univariateNormality
##               Test     Variable Statistic   p value Normality
## 1 Anderson-Darling      pH         0.2965    0.5920    YES   
## 2 Anderson-Darling   Proteina      0.2984    0.5864    YES   
## 3 Anderson-Darling Carbohidrato    0.3288    0.5160    YES   
## 4 Anderson-Darling    Sodio        0.3057    0.5661    YES

Resultados después de realizar los test:

  • Podemos observar que todos cumplen con la normalidad univariada y multivariada a excepción del test de Doornik-Hansen, que cumple la normalidad univariada pero no la multivariada, ya que este test es más estricto y sensible a asimetría o curtosis conjunta (requiere un ajuste de normalidad multivariada más fuerte) a diferencia del test de Royston basado en la prueba de Shapiro-Wilk que suele ser más tolerante.
Estas evaluaciones son clave porque el T² de Hotelling supone que los datos provienen de una población normal multivariada, aunque es relativamente robusto a pequeñas desviaciones.
  1. T2 de Hotelling
colMeans(datos)
##           pH     Proteina Carbohidrato        Sodio 
##     7.004838    20.084931    49.939662   149.908396
is.data.frame(datos)
## [1] TRUE

Se contrastan dos hipótesis:

  • Hipótesis 1:

    H₀: μ=(0,0,0,0)

  • Hipótesis 2:

    H₀: μ=(7,20,50,150)

mu=c(0,0,0,0) 
result=OneSampleHT2(datos,mu0=mu,alpha = 0.05)
summary(result)
##        One Sample Hotelling T Square Test 
## 
## Hotelling T Sqaure Statistic = 1121785 
##  F value = 279604.1 , df1 = 4 , df2 = 996 , p-value: <2e-16 
## 
##                    Descriptive Statistics
## 
##                 pH    Proteina Carbohidrato       Sodio
## N     1000.0000000 1000.000000  1000.000000 1000.000000
## Means    7.0048384   20.084931    49.939662  149.908396
## Sd       0.2975085    2.019348     2.935072    9.923517
## 
## 
##                  Detection important variable(s)
## 
##                   Lower      Upper Mu0 Important Variables?
## pH             6.975761   7.033915   0               *TRUE*
## Proteina      19.887569  20.282292   0               *TRUE*
## Carbohidrato  49.652803  50.226522   0               *TRUE*
## Sodio        148.938520 150.878272   0               *TRUE*

Interpretación de resultado:

  • Rechazamos la hipótesis nula H0: μ=(0,0,0,0).

  • Las medias poblacionales no son iguales a 0 para los datos.

  • Para todas las variables → el 0 NO está dentro de su intervalo de confianza.

  • Todas las variables (pH, Proteína, Carbohidrato y Sodio) aportan evidencia significativa contra la hipótesis de que su media es 0.

  • Los datos están muy lejos de tener medias iguales a cero (como ya lo intuíamos por el tamaño enorme del estadístico T² y el p-valor prácticamente 0).

mu=c(7,20,50,150)
result=OneSampleHT2(datos,mu0=mu,alpha = 0.05)
summary(result)
##        One Sample Hotelling T Square Test 
## 
## Hotelling T Sqaure Statistic = 2.449188 
##  F value = 0.61 , df1 = 4 , df2 = 996 , p-value: 0.655 
## 
##                    Descriptive Statistics
## 
##                 pH    Proteina Carbohidrato       Sodio
## N     1000.0000000 1000.000000  1000.000000 1000.000000
## Means    7.0048384   20.084931    49.939662  149.908396
## Sd       0.2975085    2.019348     2.935072    9.923517
## 
## 
##                  Detection important variable(s)
## 
##                   Lower      Upper Mu0 Important Variables?
## pH             6.975761   7.033915   7                FALSE
## Proteina      19.887569  20.282292  20                FALSE
## Carbohidrato  49.652803  50.226522  50                FALSE
## Sodio        148.938520 150.878272 150                FALSE

Interpretación de resultados:

  • Aceptamos la hipótesis nula H0: μ=(7,20,50,150) → p_value = 0.655

  • Conclusión: Todos los valores hipotéticos (μ0) caen dentro de los intervalos de confianza de sus respectivas variables.

  • Por eso en “Important Variables?” aparece FALSE para todos: ninguna de las variables por sí sola presenta diferencia significativa con el valor hipotético.

  1. Usando la función lm
y <- as.matrix(datos)
head(y)
##            pH Proteina Carbohidrato    Sodio
## [1,] 6.831857 18.00840     48.46519 148.4969
## [2,] 6.930947 17.92009     50.71081 146.7224
## [3,] 7.467612 19.96404     48.37523 135.5183
## [4,] 7.021153 19.73565     53.65768 143.0272
## [5,] 7.038786 14.90131     50.52241 175.9849
## [6,] 7.514519 22.08115     48.15420 149.6258
y <- as.matrix(datos) - matrix(c(0,0,0,0),nrow(datos),ncol(datos),byrow=T)
anova(lm(y ~ 1)) 
## Analysis of Variance Table
## 
##              Df  Pillai approx F num Df den Df    Pr(>F)    
## (Intercept)   1 0.99911   279604      4    996 < 2.2e-16 ***
## Residuals   999                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Observamos que nuestro p_value < 0.05, rechazamos la H0.

y <- as.matrix(datos) - matrix(c(7,20,50,150),nrow(datos),ncol(datos),byrow=T)
anova(lm(y ~ 1))
## Analysis of Variance Table
## 
##              Df    Pillai approx F num Df den Df Pr(>F)
## (Intercept)   1 0.0024456  0.61046      4    996 0.6552
## Residuals   999

Observamos que nuestro p_value = 0.6552

CONCLUSIÓN: A un nivel de significancia del 5% existe suficiente evidencia estadística que aifirma que los datos son compatibles con tener como media poblacional (7,20,50,150).

Extendiendo los intervalos de confianza a las regiones:

Regiones de confianza para el vector de medias normal

n <- nrow(datos)        # tamaño muestral
p <- ncol(datos)        # número de variables
xbar <- colMeans(datos) # vector de medias muestrales
xbar
##           pH     Proteina Carbohidrato        Sodio 
##     7.004838    20.084931    49.939662   149.908396
S <- cov(datos)         # matriz de varianzas y covarianzas
S
##                        pH    Proteina Carbohidrato        Sodio
## pH            0.088511303  0.05195454  -0.01687873 -0.008841375
## Proteina      0.051954538  4.07776780   0.15708350 -0.140855908
## Carbohidrato -0.016878725  0.15708350   8.61465011  1.472647479
## Sodio        -0.008841375 -0.14085591   1.47264748 98.476186442
tconst <- sqrt((p/n)*((n-1)/(n-p)) * qf(0.99,p,n-p))
# Esto usa la distribución F para construir una región de confianza del 99% 
# para el vector de medias bajo normalidad multivariada.
id <- c(1,2) # elige pH (columna 1) y Proteína (columna 2)
plot(ellipse(center=xbar[id], shape=S[id,id], radius=tconst, draw=F),
     xlab="pH",ylab="Proteína",col="tomato",lwd = 10)

Interpretación del gráfico:

  • Dentro de la elipse: Están los valores plausibles para el verdadero par de medias (pH, Proteína) al 99% de confianza.

  • Centro de la elipse: Es el valor medio muestral de (pH, Proteína).

  • Forma de la elipse: Muestra la correlación: si pH y Proteína estuvieran correlacionados, la elipse se alargaría en diagonal.

Intervalos confidenciales simultaneos basados en T^2:

Funcion R para Intervalos confidenciales simultaneos basados en T^2

T.ci <- function(mu, Sigma, n, avec=rep(1,length(mu)), level=0.95){
  p <- length(mu)
  if(nrow(Sigma)!=p) stop("Need length(mu) == nrow(Sigma).")
  if(ncol(Sigma)!=p) stop("Need length(mu) == ncol(Sigma).")
  if(length(avec)!=p) stop("Need length(mu) == length(avec).")
  if(level <=0 | level >= 1) stop("Need 0 < level < 1.")
  cval <- qf(level, p, n-p) * p * (n-1) / (n-p)
  zhat <- crossprod(avec, mu)
  zvar <- crossprod(avec, Sigma %*% avec) / n
  const <- sqrt(cval * zvar)
  c(lower = zhat - const, upper = zhat + const)
}
n <- nrow(datos)
p <- ncol(datos)
xbar <- colMeans(datos)
S <- cov(datos)

T.ci(mu=xbar, Sigma=S, n=n, avec=c(1,0,0,0)) # variable: pH
##    lower    upper 
## 6.975761 7.033915
T.ci(mu=xbar, Sigma=S, n=n, avec=c(0,1,0,0)) # variable: Proteína
##    lower    upper 
## 19.88757 20.28229
T.ci(mu=xbar, Sigma=S, n=n, avec=c(0,0,1,0)) # variable: Carbohidrato
##    lower    upper 
## 49.65280 50.22652
T.ci(mu=xbar, Sigma=S, n=n, avec=c(0,0,0,1)) # variable: Sodio
##    lower    upper 
## 148.9385 150.8783

Interpretación de resultados:

  • Con un 95% de confianza simultánea, el verdadero valor medio de cada variable se encuentra dentro de su intervalo respectivo, considerando el efecto conjunto de todas las variables (no sólo individualmente como en los IC tradicionales).

Comparando I de C simultaneos T^2 con los I de C clasicos t:

TCI <- tCI <- NULL
for(k in 1:4){
  avec <- rep(0, 4)
  avec[k] <- 1
  TCI <- c(TCI, T.ci(xbar, S, n, avec))
  tCI <- c(tCI,
           xbar[k] - sqrt(S[k,k]/n) * qt(0.975, df=n-1),
           xbar[k] + sqrt(S[k,k]/n) * qt(0.975, df=n-1))
}

rtab <- rbind(TCI, tCI)
round(rtab, 6)
##        lower    upper    lower    upper    lower    upper    lower    upper
## TCI 6.975761 7.033915 19.88757 20.28229 49.65280 50.22652 148.9385 150.8783
## tCI 6.986377 7.023300 19.95962 20.21024 49.75753 50.12180 149.2926 150.5242

Observaciones importantes:

  • Los intervalos simultáneos (TCI) son un poco más amplios que los individuales (tCI).
    • Eso era esperable, porque Hotelling ajusta para controlar el nivel de confianza conjunto (no inflar el error al hacer varios tests a la vez).
  • En este caso como hay 4 variables, usar el TCI (Hotelling) es más correcto si quieres mantener un nivel de significancia global.

Intervalos de Confianza simultaneos más precisos:

ICs simultaneos a traves del metodo de Bonferroni con R

TCI <- tCI <- bon <- NULL
alpha <- 1 - 0.05/(2*4)
for(k in 1:4){
  avec <- rep(0, 4)
  avec[k] <- 1
  TCI <- c(TCI, T.ci(xbar, S, n, avec))
  tCI <- c(tCI,
           xbar[k] - sqrt(S[k,k]/n) * qt(0.975, df=n-1),
           xbar[k] + sqrt(S[k,k]/n) * qt(0.975, df=n-1))
  bon <- c(bon,
           xbar[k] - sqrt(S[k,k]/n) * qt(alpha, df=n-1),
           xbar[k] + sqrt(S[k,k]/n) * qt(alpha, df=n-1))
}

rtab <- rbind(TCI, tCI, bon)
round(rtab, 2)
##     lower upper lower upper lower upper  lower  upper
## TCI  6.98  7.03 19.89 20.28 49.65 50.23 148.94 150.88
## tCI  6.99  7.02 19.96 20.21 49.76 50.12 149.29 150.52
## bon  6.98  7.03 19.93 20.24 49.71 50.17 149.12 150.69

Observaciones importantes:

  • El intervalo Bonferroni es más ancho que el tCI pero similar al Hotelling.
    • Esto es lógico: Bonferroni y Hotelling ambos controlan el error global, pero Bonferroni es un poco más conservador (es decir, amplía un poco más los intervalos).

Formar intervalos de confianza para muestras grandes (T^2 aprox. Chi(p)):

chi <- NULL
for(k in 1:4){
  chi <- c(chi,
           xbar[k] - sqrt(S[k,k]/n) * sqrt(qchisq(0.95, df=p)),
           xbar[k] + sqrt(S[k,k]/n) * sqrt(qchisq(0.95, df=p)))
}

rtab <- rbind(TCI, tCI, bon,chi)
round(rtab, 2)
##     lower upper lower upper lower upper  lower  upper
## TCI  6.98  7.03 19.89 20.28 49.65 50.23 148.94 150.88
## tCI  6.99  7.02 19.96 20.21 49.76 50.12 149.29 150.52
## bon  6.98  7.03 19.93 20.24 49.71 50.17 149.12 150.69
## chi  6.98  7.03 19.89 20.28 49.65 50.23 148.94 150.87

Interpretación:

  • Hotelling (TCI) y Chi-cuadrado (chi) te dan intervalos prácticamente iguales.

    • Esto tiene sentido porque el intervalo Hotelling para un solo coeficiente se relaciona fuertemente con el 𝜒2 para pequeños p.
  • Bonferroni es apenas más ancho.

  • tCI es el más angosto, porque no ajusta por comparaciones múltiples.

Regiones de prediccion para futuras observaciones:

Formando regiones de prediccion con R

n <- nrow(datos)
p <- ncol(datos)
xbar <- colMeans(datos)
S <- cov(datos)

pconst <- sqrt((p/n)*((n^2-1)/(n-p)) * qf(0.99,p,n-p))
id <- c(1,2)
plot(ellipse(center=xbar[id], shape=S[id,id], radius=pconst, draw=F),
     xlab="pH",ylab="Proteína",col="pink3",lwd = 10)

Interpretación del gráfico:

  • Cualquier nueva observación de pH y alcohol debería caer dentro de esta elipse con un 99% de probabilidad, asumiendo que sigue el mismo modelo multivariado normal.

Esta elipse es más grande que la de las regiones de confianza para la media, porque ahora queremos capturar futuras observaciones individuales, no el valor medio.

Conclusiones generales del análisis:

1. Normalidad multivariada

  • La prueba de Shapiro-Wilk aplicada a los datos (mshapiro.test(t(datos))) mostró un p-valor de 0.2651, indicando que no se rechaza la hipótesis de normalidad multivariada.

  • El test MVN de Royston también apoyó esta conclusión (p-valor = 0.8945), confirmando que los datos siguen una distribución normal multivariada.

  • Individualmente, cada variable (pH, Proteína, Carbohidrato, Sodio) mostró cumplir la normalidad según el test de Anderson-Darling.

  • Los valores de asimetría (skewness) y curtosis están muy cerca de 0, reforzando la idea de que las variables son simétricas y no presentan colas pesadas.

    Conclusión: Sí se cumple el supuesto de normalidad multivariada en la matriz de datos.

2. Detección de outliers multivariados

  • Se utilizó la distancia de Mahalanobis clásica (mvn(data = datos, multivariateOutlierMethod = "quan")) y también la distancia ajustada (multivariateOutlierMethod = "adj") que es más robusta frente a valores extremos.

  • Ambas técnicas detectaron outliers, aunque la ajustada reduce el impacto de los outliers fuertes en el análisis.

    Conclusión: Se identificaron algunas observaciones atípicas, pero no comprometen la validez global del análisis gracias a la robustez del enfoque ajustado.

3. T² de Hotelling

  • Se utilizó el T² de Hotelling para contrastar si el vector de medias poblacional es igual a un vector de referencia (7, 20, 50, 150).

  • El análisis mostró que no hay evidencia significativa para rechazar que las medias sean iguales a esos valores.

    Conclusión: Los valores medios observados (pH, Proteína, Carbohidrato, Sodio) coinciden razonablemente con los valores esperados.

4. Intervalos de Confianza

  • Todos los intervalos fueron muy estrechos y consistentes entre sí, mostrando alta precisión en las estimaciones.

  • El método de Bonferroni fue ligeramente más conservador (intervalos un poco más amplios).

    Conclusión: Hay alta precisión y consistencia en la estimación de las medias para cada variable.

3 - Análisis Multivariado: Prueba de Hotelling T² para muestras dependientes

Contexto del Estudio Nutricional: Comparación de Dietas Bajo un Enfoque Multivariado

Un equipo de investigadores en nutrición llevó a cabo un estudio clínico con el fin de evaluar los efectos de tres tipos de dieta sobre el peso corporal de adultos en un periodo de 6 semanas. Participaron 3000 personas, hombres y mujeres, de distintas edades y estaturas. Cada participante fue asignado aleatoriamente a una de las tres dietas (denominadas Dieta 1, Dieta 2 y Dieta 3), y se registró su peso inicial (pre.weight) y su peso tras 6 semanas (weight6weeks) de seguimiento.

El estudio se planteó con tres objetivos principales:

  • Objetivo 1: Análisis Exploratorio de los Datos (EDA)

Realizar un análisis exploratorio de los datos aplicando técnicas estadísticas descriptivas y gráficas para identificar patrones, detectar valores atípicos y verificar supuestos. Este paso es fundamental para obtener una comprensión preliminar de las variables involucradas y orientar los análisis inferenciales posteriores.

  • Objetivo 2: Comparación de la Eficacia de las Dietas en la Reducción de Peso (Caso Univariado)

Evaluar si existen diferencias significativas en la pérdida de peso (variable peso_dif, calculada como la diferencia entre el peso inicial y el peso después de 6 semanas) entre los grupos de dieta mediante una prueba t de Student.

  • Objetivo 3: Comparación de Características Combinadas Entre Grupos de Dieta(Caso multivariado)

Comparar simultáneamente un conjunto de variables relacionadas con las características físicas de los individuos (por ejemplo, peso final, grasa corporal, masa muscular, etc.) entre diferentes grupos de dieta, utilizando la prueba T² de Hotelling para contrastar la igualdad de los vectores de medias multivariados.

Análisis Exploratorio de los Datos (EDA)

Antes de aplicar técnicas estadísticas formales para contrastar hipótesis, es fundamental realizar un análisis exploratorio de los datos (EDA). Esta etapa permite:

Comprender la distribución de las variables de interés (edad, estatura, peso inicial, peso final, y la diferencia de peso).

Detectar posibles valores atípicos o inconsistencias que podrían influir en los resultados.

Visualizar la relación entre las variables y cómo estas se comportan según el tipo de dieta.

Evaluar supuestos necesarios para los análisis posteriores, como normalidad, homogeneidad de varianzas, y linealidad.

Este paso no solo mejora la calidad del análisis, sino que también aporta intuición y contexto sobre cómo varían las características de los participantes en función de la dieta que siguieron.

Vista previa de los datos

Estructura y encabezado

## 'data.frame':    3000 obs. of  7 variables:
##  $ Person        : int  25 26 1 2 3 4 5 6 7 8 ...
##  $ gender        : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Edad          : int  41 32 22 46 55 33 50 50 37 28 ...
##  $ Estatura      : int  171 174 159 192 170 171 170 201 174 176 ...
##  $ peso_inicial  : int  60 103 58 60 64 64 65 66 67 69 ...
##  $ Diet          : int  2 2 1 1 1 1 1 1 1 1 ...
##  $ peso_6_semanas: num  60 103 54.2 54 63.3 61.1 62.2 64 65 60.5 ...
##   Person gender Edad Estatura peso_inicial Diet peso_6_semanas
## 1     25      0   41      171           60    2           60.0
## 2     26      0   32      174          103    2          103.0
## 3      1      0   22      159           58    1           54.2
## 4      2      0   46      192           60    1           54.0
## 5      3      0   55      170           64    1           63.3
## 6      4      0   33      171           64    1           61.1

Para el análisis univariado enfocado en evaluar la eficacia de las dietas en la reducción de peso, se creó una nueva variable denominada peso_dif, la cual representa el cambio de peso experimentado por cada individuo a lo largo del estudio. Esta variable fue construida mediante la diferencia entre el peso registrado al inicio del estudio (peso_inicial) y el peso registrado al finalizar las 6 semanas de intervención (peso_6_semanas), según la siguiente fórmula:

peso_dif=peso_inicial−peso_6_semanas

datos <- datos %>%
  mutate(peso_dif = peso_inicial - peso_6_semanas)

Estadísticos de interes

summarytools::descr(datos)
## Descriptive Statistics  
## datos  
## N: 3000  
## 
##                        Diet      Edad   Estatura    gender    Person   peso_6_semanas   peso_dif
## ----------------- --------- --------- ---------- --------- --------- ---------------- ----------
##              Mean      2.00     38.49     170.59      0.01      1.03            68.76       3.76
##           Std.Dev      0.82      9.89      11.50      0.10      7.26             9.17      12.36
##               Min      1.00      7.00     134.00      0.00      0.00            32.40     -44.50
##                Q1      1.00     32.00     163.00      0.00      0.00            62.60      -4.20
##            Median      2.00     38.50     170.00      0.00      0.00            68.80       3.80
##                Q3      3.00     45.00     178.00      0.00      0.00            75.00      11.90
##               Max      3.00     70.00     210.00      1.00     78.00           106.50      52.60
##               MAD      1.48      9.64      10.38      0.00      0.00             9.19      12.01
##               IQR      2.00     13.00      15.00      0.00      0.00            12.40      16.10
##                CV      0.41      0.26       0.07      9.48      7.07             0.13       3.29
##          Skewness      0.00     -0.02       0.17      9.37      7.84             0.07      -0.03
##       SE.Skewness      0.04      0.04       0.04      0.04      0.04             0.04       0.04
##          Kurtosis     -1.50     -0.10       0.12     85.86     63.96             0.24       0.30
##           N.Valid   3000.00   3000.00    3000.00   3000.00   3000.00          3000.00    3000.00
##                 N   3000.00   3000.00    3000.00   3000.00   3000.00          3000.00    3000.00
##         Pct.Valid    100.00    100.00     100.00    100.00    100.00           100.00     100.00
## 
## Table: Table continues below
## 
##  
## 
##                     peso_inicial
## ----------------- --------------
##              Mean          72.52
##           Std.Dev           8.67
##               Min          38.00
##                Q1          67.00
##            Median          73.00
##                Q3          78.00
##               Max         103.00
##               MAD           8.90
##               IQR          11.00
##                CV           0.12
##          Skewness          -0.04
##       SE.Skewness           0.04
##          Kurtosis           0.20
##           N.Valid        3000.00
##                 N        3000.00
##         Pct.Valid         100.00
  • EdadMediana = 38.5 años: La mediana de la edad es 38.5 años, lo que significa que el 50% de los participantes tiene menos de 38.5 años y el otro 50% tiene más.

  • EstaturaDesviación estándar(Std.Dev) = 11.50 cm: La estatura promedio del grupo es 170.59 cm, y la mayoría de las personas tienen una estatura entre aproximadamente 159.09 cm y 182.09 cm, es decir, una desviación estándar (±11.50 cm) alrededor de la media.

  • peso_6_semanasSkewness (Asimetría) = 0.07: La asimetría de peso_6_semanas es ligeramente positiva, lo que indica que la distribución está apenas sesgada hacia la derecha. Es decir, hay algunos participantes con pesos más altos después de 6 semanas, aunque la mayoría está cerca del promedio (~68.76 kg).

  • peso_difMedia = 3.76 kg: La media indica que los participantes perdieron en promedio 3.76 kg a lo largo del estudio. Refleja un resultado general positivo del tratamiento o intervención aplicada.

Seleccionando variables de interes

Encabezado de los tipos de dietas

##   Edad Estatura peso_inicial peso_6_semanas peso_dif
## 3   22      159           58           54.2      3.8
## 4   46      192           60           54.0      6.0
## 5   55      170           64           63.3      0.7
## 6   33      171           64           61.1      2.9
## 7   50      170           65           62.2      2.8
## 8   50      201           66           64.0      2.0
##    Edad Estatura peso_inicial peso_6_semanas peso_dif
## 1    41      171           60           60.0      0.0
## 2    32      174          103          103.0      0.0
## 17   44      174           58           60.1     -2.1
## 18   37      172           58           56.0      2.0
## 19   41      165           59           57.3      1.7
## 20   43      171           61           56.7      4.3
##    Edad Estatura peso_inicial peso_6_semanas peso_dif
## 31   51      165           60           53.0      7.0
## 32   35      169           62           56.4      5.6
## 33   21      159           64           60.6      3.4
## 34   22      169           65           58.2      6.8
## 35   36      160           66           58.2      7.8
## 36   20      169           67           61.6      5.4

Gráfico de cajas para la variable peso_dif(Diferencia entre el peso inicial y el peso despues de 6 semanas)

Del gráfico obtenido podemos observar lo siguiente:

  • En los tres grupos (tipo_dieta1, tipo_dieta2 y tipo_dieta3), la mayor parte de la caja (el 50% central de los datos) se encuentra por encima de la línea roja, lo que indica que la mayoría de los participantes sí perdió peso tras la intervención.
  • En el grupo tipo_dieta3, una parte considerable de la caja (y especialmente la mediana) está cerca o por debajo del umbral rojo, lo que indica que un mayor número de personas no alcanzó la pérdida de peso esperada, o incluso ganó peso.
  • Aunque tipo_dieta1 muestra una alta dispersión de resultados (con varios outliers que incluso ganaron peso), también tiene una mediana más alta que las otras dos dietas, lo que sugiere que fue más efectiva para la mayoría de los participantes, a pesar de su variabilidad.

Gráfico de densidad para la variable peso_6_semanas (Peso despues de 6 semanas)

El gráfico muestra la distribución del peso corporal de los participantes después de 6 semanas de intervención, desglosado por tipo de dieta (1, 2 y 3) de lo cual podemos observar lo siguiente:

  • La curva verde (dieta 1) está más desplazada hacia la izquierda comparada con las otras dos dietas, lo que indica que los participantes bajo esta dieta tienden a tener un peso final menor. Esto sugiere que la dieta 1 podría haber sido más efectiva para bajar de peso en comparación con las demás.

  • La curva naranja (dieta 2) es más achatada y ancha, lo que implica que hay mayor variabilidad en los pesos finales de los participantes de esta dieta. Esto puede indicar que la dieta 2 no tiene un efecto consistente, y que sus resultados son más variables entre los individuos.

  • La curva azul (dieta 3) se encuentra entre las otras dos en términos de ubicación y forma: ligeramente desplazada hacia la izquierda respecto a la dieta 2, pero no tanto como la dieta 1. Esto sugiere que la dieta 3 ayudó a perder peso, pero no fue tan efectiva como la dieta 1, ni tan inconsistente como la dieta 2.

Comparaciones de medias

Caso Univariado: Prueba t de student para la variable peso_dif (Diferencia entre el peso inicial y el peso despues de 6 semanas)

Tipo de dieta 1 vs Tipo de dieta 2

## 
##  Paired t-test
## 
## data:  tipo_dieta1 and tipo_dieta2
## t = 0.46684, df = 999, p-value = 0.6407
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
##  -0.861739  1.399739
## sample estimates:
## mean difference 
##           0.269
## 
##  Shapiro-Wilk normality test
## 
## data:  dif0
## W = 0.99773, p-value = 0.186
  • No se encontró una diferencia estadísticamente significativa entre los efectos de la dieta 1 y la dieta 2 (p > 0.05). Es decir, ambas dietas parecen tener un efecto similar en el cambio de peso tras 6 semanas.

  • Como el p-valor es mayor que 0.05, no se rechaza la normalidad. Por tanto, es válido usar la prueba t apareada en este caso.

Tipo de dieta 1 vs Tipo de dieta 3

## 
##  Paired t-test
## 
## data:  tipo_dieta1 and tipo_dieta3
## t = -3.5725, df = 999, p-value = 0.0003705
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
##  -2.856739 -0.831061
## sample estimates:
## mean difference 
##         -1.8439
## 
##  Shapiro-Wilk normality test
## 
## data:  dif1
## W = 0.99802, p-value = 0.2898
  • Existe una diferencia estadísticamente significativa entre las dietas 1 y 3 (p < 0.01). En promedio, la dieta 3 produjo una mayor pérdida de peso que la dieta 1.

  • No hay evidencia de que las diferencias se desvíen de la normalidad (p > 0.05), por lo tanto, el uso de la prueba t apareada es apropiado.

Tipo de dieta 2 vs Tipo de dieta 3

## 
##  Paired t-test
## 
## data:  tipo_dieta2 and tipo_dieta3
## t = -3.6211, df = 999, p-value = 0.0003081
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
##  -3.2579121 -0.9678879
## sample estimates:
## mean difference 
##         -2.1129
## 
##  Shapiro-Wilk normality test
## 
## data:  dif2
## W = 0.99796, p-value = 0.2672
  • Hay una diferencia estadísticamente significativa entre la dieta 2 y la dieta 3 (p < 0.01). En promedio, la dieta 3 generó una mayor pérdida de peso que la dieta 2.

  • No hay evidencia de que las diferencias se desvíen de la normalidad (p > 0.05), por lo que la prueba t es válida.

Caso Multivariado: Prueba T^2 de Hotelling para un vector de medias

Variables seleccionadas:
  • Edad

  • Estatura

  • peso_inicial

  • peso_6_semanas

Para las dietas 1 y 3:

Elipse de confianza multivariada (Dieta 1)

Para las variables Edad y peso_6_semanas

Elipse de confianza multivariada (Dieta 3)

Para las variables Estatura y peso_6_semanas

Distancia de Mahalanobis

  • Chi-Square Q-Q Plot (estándar):

    • Muestra cómo las distancias de Mahalanobis observadas se comparan con la distribución χ² teórica.

    • Los outliers son observaciones cuya distancia al centro de datos es inusualmente grande.

Distancia ajustada de Mahalanobis

  • Adjusted Q-Q Plot (robusto):

    • Usa estimaciones robustas de covarianza (menos sensibles a outliers).

    • El hecho de que ambos gráficos coincidan sugiere que la detección es consistente.

Supuesto de normalidad multivariada de la matriz de diferencias:

Prueba de Shapiro Wilk

## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.99781, p-value = 0.2123
  • Con un p-valor alto (mayor a 0.05) se concluye que si hay normalidad multivariada, la muestra tetravariada proviene de una D.normal tetravariada

Prueba de normalidad multivariante de Royston

##      Test        H   p value MVN
## 1 Royston 7.242771 0.1236017 YES
  • Se observa un p-valor relativamente alto (mayor que 0.05) lo que indica fuerte evidencia para no rechazar la normalidad multivariante.

  • El gráfico Chi-Square Q-Q muestra:

    • Desviación sistemática de los puntos respecto a la línea teórica (especialmente en valores altos)

Prueba de normalidad multivariante de Mardia

##              Test          Statistic           p value Result
## 1 Mardia Skewness   23.5679383267095 0.261774878843442    YES
## 2 Mardia Kurtosis -0.847858376406756 0.396516847716496    YES
## 3             MVN               <NA>              <NA>    YES
  • La prueba de asimetría no es significativa (p > 0.05), lo que indica que no hay evidencia suficiente para rechazar la normalidad en cuanto a la asimetría. Es decir, la distribución multivariada no muestra una asimetría significativa.

  • La prueba de curtosis tampoco es significativa (p > 0.05). Por tanto, no se rechaza la normalidad multivariante en cuanto a la curtosis. La “forma” de la distribución en términos de colas está dentro de lo esperado.

  • Como ambas pruebas individuales (asimetría y curtosis) fueron no significativas, el resultado global sugiere que los datos siguen una distribución normal multivariante.

Prueba de normalidad de Henze-Zirkler

##            Test        HZ   p value MVN
## 1 Henze-Zirkler 0.7887264 0.9628001 YES
  • El p-value es muy alto (0.9628), por lo que no se rechaza la hipótesis nula de normalidad multivariante.

  • El resultado “YES” confirma que los datos pueden considerarse como provenientes de una distribución normal multivariante.

Prueba de normalidad de Doornik-Hansen

##             Test        E df   p value MVN
## 1 Doornik-Hansen 11.56595  8 0.1716458 YES
  • La prueba de Doornik-Hansen evalúa si los datos se distribuyen normalmente en múltiples dimensiones, transformando los datos para aproximar una distribución chi-cuadrado. Dado que el p-value es 0.1716, es decir, mayor a 0.05, no se rechaza la hipótesis nula de normalidad multivariante.

  • El resultado “YES” indica que, según este test, los datos sí cumplen con la normalidad multivariante.

Prueba de normalidad Szekely-Rizzo

##          Test Statistic p value MVN
## 1 E-statistic 0.9213286    0.72 YES
  • Resultado no significativo (p = 0.72 < 0.05) esto significa que no hay evidencia suficiente para rechazar la hipótesis nula de que los datos provienen de una distribución normal multivariada.

Prueba T^2 de Hotelling

##        Multivariate Paired Hotelling T Square Test 
## 
## Hotelling T Sqaure Statistic = 85.17232 
##  F value = 21.229 , df1 = 4 , df2 = 996 , p-value: <2e-16 
## 
##             Descriptive Statistics (The First Treatment) 
## 
##            Edad  Estatura peso_inicial peso_6_semanas
## Means 39.659000 170.31600    73.101000      69.869400
## Sd     9.753658  10.96779     8.331039       8.471666
## 
## 
##             Descriptive Statistics (The Second Treatment) 
## 
##           Edad   Estatura peso_inicial peso_6_semanas
## Means 37.35800 167.123000    73.531000      68.455500
## Sd    10.32242   9.971023     7.390647       8.280398
## 
## 
##             Descriptive Statistics (The Differences) 
## 
##          Edad Estatura peso_inicial peso_6_semanas
## Means -2.3010   -3.193      0.43000       -1.41390
## Sd    14.5923   14.694     11.38854       11.93939
  1. Resultado significativo (p = 2E^-16):

    • El p-value es extremadamente pequeño (prácticamente cero), lo que indica que hay diferencias multivariadas significativas entre el primer y tercer tratamiento.

      Esto significa que, en conjunto, las variables Edad, Estatura, peso_inicial y peso_6_semanas son significativamente distintas entre ambos grupos.

  2. Análisis de las diferencias:

    • En promedio, la Edad y la Estatura disminuyen del primer al tercer tratamiento.

    • El peso inicial se mantiene similar.

    • El peso a las 6 semanas también baja, en promedio, de 69.86 a 68.45 kg.

Prueba T^2 de Hotelling respecto a un vector de medias conocido

#Usando la libreria ICSNP
xbar <- colMeans(X)
xbar #Promedio de las diferencias entre las categorias de ambas variables
##           Edad       Estatura   peso_inicial peso_6_semanas 
##         2.3010         3.1930        -0.4300         1.4139
library(ICSNP)
HotellingsT2(X,mu=c(3.5,1.5,-4,2))
## 
##  Hotelling's one sample T2-test
## 
## data:  X
## T.2 = 29.644, df1 = 4, df2 = 996, p-value < 2.2e-16
## alternative hypothesis: true location is not equal to c(3.5,1.5,-4,2)
  • El análisis muestra un estadístico T² = 29.644 con un p-valor extremadamente significativo (< 2.2e-16). Este resultado indica que existe una diferencia multivariada altamente significativa entre las medias observadas en tus datos y el vector de referencia propuesto[3.5,1.5,−4,2].

    La magnitud elevada del estadístico T² sugiere que las discrepancias son notorias y sustanciales en al menos algunas de las variables analizadas.

  • Al rechazar la hipótesis nula (p < 0.05), concluimos que el perfil multivariado real de tus datos difiere de manera importante y sistemática del patrón esperado definido por el vector de comparación. Específicamente, este resultado sugiere que las medias de las variables consideradas no se ajustan al valor teórico que se planteó.

  • Aunque la prueba T² de Hotelling detecta una diferencia global, no especifica qué variables concretas son responsables de esa diferencia. Sin embargo, en este tipo de situaciones es común que algunas variables individuales —como podría ser el peso inicial o el peso a las 6 semanas— presenten las mayores discrepancias respecto al valor hipotético.

4 - Análisis Multivariado: Prueba de Hotelling T² para muestras independientes

1. Simulación de Datos

Simulamos una base de datos de 60 estudiantes (30 de Ciencias y 30 de Humanidades) con tres variables numéricas:

  1. horas_estudio: Horas semanales dedicadas al estudio
  2. calificacion: Puntaje académico (0-20)
  3. sueño: Horas promedio de sueño diario
set.seed(123) # Para reproducibilidad

# Definir parámetros
mu_ciencias <- c(horas_estudio = 20, calificacion = 15, sueño = 7)
mu_humanidades <- c(15, 12, 6)
Sigma <- matrix(c(3, 1.2, -0.4, 
                 1.2, 2.5, -0.6, 
                -0.4, -0.6, 1.5), ncol = 3)

# Generar datos
datos <- data.frame(
  facultad = rep(c("Ciencias", "Humanidades"), each = 30),
  horas_estudio = c(mvrnorm(30, mu_ciencias, Sigma)[,1], 
                   mvrnorm(30, mu_humanidades, Sigma)[,1]),
  calificacion = c(mvrnorm(30, mu_ciencias, Sigma)[,2], 
                  mvrnorm(30, mu_humanidades, Sigma)[,2]),
  sueño = c(mvrnorm(30, mu_ciencias, Sigma)[,3], 
            mvrnorm(30, mu_humanidades, Sigma)[,3])
)

# Convertir facultad a factor
datos$facultad <- as.factor(datos$facultad)

Explicación:
- Usamos mvrnorm() del paquete MASS para simular datos multivariados normales.
- La matriz Sigma controla las correlaciones entre variables (ej: estudiantes que estudian más tienden a dormir menos).

2. Estadísticas Descriptivas

Estadísticas generales

descr(datos[, c("horas_estudio", "calificacion", "sueño")])
## Descriptive Statistics  
## datos  
## N: 60  
## 
##                     calificacion   horas_estudio    sueño
## ----------------- -------------- --------------- --------
##              Mean          13.30           17.62     6.44
##           Std.Dev           2.24            3.10     1.27
##               Min           8.88           12.02     3.15
##                Q1          11.68           14.93     5.56
##            Median          13.10           17.57     6.42
##                Q3          15.31           20.41     7.47
##               Max          18.15           23.87     8.97
##               MAD           2.84            4.14     1.43
##               IQR           3.59            5.39     1.86
##                CV           0.17            0.18     0.20
##          Skewness           0.10            0.03    -0.11
##       SE.Skewness           0.31            0.31     0.31
##          Kurtosis          -0.99           -1.23    -0.48
##           N.Valid          60.00           60.00    60.00
##                 N          60.00           60.00    60.00
##         Pct.Valid         100.00          100.00   100.00

1. Calificaciones (0-20 puntos)

  • Media = 13.30: Rendimiento ligeramente superior al punto medio (10/20)
  • SD = 2.24: 68% de estudiantes obtiene entre 11.06 y 15.54 puntos
  • Simetría (0.10): Distribución balanceada (mediana ≈ media)

2. Horas de Estudio (semana)

  • Media = 17.62: ~2.5 horas/día
  • Alta variabilidad (SD = 3.10): Desde 12.02 (mín) hasta 23.87 (máx) horas
  • IQR = 5.39: 25% superior estudia >20.41 horas

3. Sueño (horas/noche)

  • Media = 6.44: Dentro del rango saludable
  • Outlier: Mínimo = 3.15 horas (posible caso crítico)

Hallazgos clave

  1. Distribuciones simétricas (skewness ≈0)
  2. Curtosis negativo: menos extremos que una normal
  3. Mayor variabilidad en horas de estudio vs sueño

Estadísticas por facultad

datos %>%
  filter(facultad == "Ciencias") %>%
  dplyr::select(horas_estudio, calificacion, sueño) %>%
  descr() -> A
datos %>%
  filter(facultad == "Humanidades") %>%
  dplyr::select(horas_estudio, calificacion, sueño) %>%
  descr() -> B 
A;B
## Descriptive Statistics  
## datos  
## N: 30  
## 
##                     calificacion   horas_estudio    sueño
## ----------------- -------------- --------------- --------
##              Mean          15.02           20.22     6.82
##           Std.Dev           1.56            1.70     1.28
##               Min          11.08           16.57     4.53
##                Q1          13.96           18.84     5.84
##            Median          15.31           20.41     6.82
##                Q3          16.22           21.51     7.83
##               Max          18.15           23.87     8.97
##               MAD           1.64            1.97     1.47
##               IQR           2.20            2.65     1.95
##                CV           0.10            0.08     0.19
##          Skewness          -0.40           -0.20    -0.07
##       SE.Skewness           0.43            0.43     0.43
##          Kurtosis          -0.29           -0.64    -1.29
##           N.Valid          30.00           30.00    30.00
##                 N          30.00           30.00    30.00
##         Pct.Valid         100.00          100.00   100.00
## Descriptive Statistics  
## datos  
## N: 30  
## 
##                     calificacion   horas_estudio    sueño
## ----------------- -------------- --------------- --------
##              Mean          11.59           15.02     6.05
##           Std.Dev           1.28            1.62     1.15
##               Min           8.88           12.02     3.15
##                Q1          10.84           13.88     5.34
##            Median          11.75           14.93     6.05
##                Q3          12.35           16.11     6.84
##               Max          14.04           18.12     8.12
##               MAD           1.14            1.71     1.17
##               IQR           1.46            2.22     1.49
##                CV           0.11            0.11     0.19
##          Skewness          -0.11            0.13    -0.44
##       SE.Skewness           0.43            0.43     0.43
##          Kurtosis          -0.67           -0.81    -0.12
##           N.Valid          30.00           30.00    30.00
##                 N          30.00           30.00    30.00
##         Pct.Valid         100.00          100.00   100.00

1. Estadísticos descriptivos para la Facultad de Ciencias:

El promedio de calificación es de 15.02, mientras que el de horas de estudio es de 20.22 y el de sueño es de 6.82 horas.

Las variables presentan una variabilidad moderada, con desviaciones estándar que van de 1.28 a 1.70.

La distribución de las variables es aproximadamente simétrica, con valores de skewness cercanos a cero.

El coeficiente de variación es bajo para calificación y horas de estudio, lo que indica una menor dispersión relativa respecto a sus medias.

2. Estadísticos descriptivos para la Facultad de Humanidades:

El promedio de calificación es de 11.59, notablemente menor que en Ciencias. Las horas de estudio también son menores, con un promedio de 15.02, y el sueño es de 6.05 horas.

La dispersión es similar a la observada en Ciencias, aunque ligeramente menor en calificación.

La distribución de las variables también es cercana a la simetría, con skewness leve y kurtosis negativa, sugiriendo colas menos pesadas que una normal.

El coeficiente de variación se mantiene bajo en todas las variables.

Conclusiones:

  • En promedio, los estudiantes de la Facultad de Ciencias presentan mayores calificaciones (15.02), más horas de estudio (20.22) y ligeramente más horas de sueño (6.82) en comparación con los de Humanidades, quienes tienen promedios de 11.59, 15.02 y 6.05 respectivamente. Esta diferencia se refleja también en los valores globales (conjuntos), donde los promedios se sitúan en 13.30 para calificación, 17.62 para horas de estudio y 6.44 para sueño, ubicándose entre los valores individuales de ambas facultades.

  • Las medidas de dispersión indican una variabilidad mayor en el conjunto total que en los grupos individuales, lo cual es esperable dado que se están combinando dos poblaciones con medias distintas.

  • Tanto en Ciencias como en Humanidades, las distribuciones de las variables se muestran aproximadamente simétricas (skewness cercanos a cero) y sin colas pesadas (kurtosis negativa), lo cual también se mantiene en el conjunto total.

3. Visualización Gráfica

3.1. Boxplots Comparativos

p1 <- ggplot(datos, aes(x = facultad, y = horas_estudio, fill = facultad)) +
  geom_boxplot() +
  labs(title = "Horas de Estudio por Facultad", 
       y = "Horas/semana", x = "") +
  scale_fill_manual(values = c("#1f77b4", "#ff7f0e")) +
  theme_minimal()

p2 <- ggplot(datos, aes(x = facultad, y = calificacion, fill = facultad)) +
  geom_boxplot() +
  labs(title = "Calificaciones por Facultad", 
       y = "Puntaje (0-20)", x = "") +
  scale_fill_manual(values = c("#1f77b4", "#ff7f0e")) +
  theme_minimal()

grid.arrange(p1, p2, ncol = 2)

Hallazgos:
- En el gráfico de horas de estudio, la línea negra dentro de la caja (la mediana) es más alta en la Facultad de Ciencias, lo que indica que estos estudiantes estudian más horas por semana.

  • En el gráfico de calificaciones, la mediana también es más alta en Ciencias, lo que muestra que obtienen mejores puntajes.

  • Las cajas y los bigotes muestran que la mayoría de los datos en Ciencias están en niveles más altos que en Humanidades.

  • Estas diferencias visuales reflejan que, en general, los estudiantes de Ciencias tienen mejor rendimiento académico y mayor dedicación al estudio.

  • Por ello, se considera apropiado aplicar la prueba de Hotelling para verificar si estas diferencias también son estadísticamente significativas.

3.2. Densidades y Scatterplots

# Densidades
d1 <- ggplot(datos, aes(x = horas_estudio, fill = facultad)) +
  geom_density(alpha = 0.6) +
  labs(title = "Distribución de Horas de Estudio") +
  theme_minimal()

# Scatterplot
s1 <- ggplot(datos, aes(x = horas_estudio, y = calificacion, color = facultad)) +
  geom_point(alpha = 0.8) +
  labs(title = "Relación Horas de Estudio vs Calificación") +
  theme_minimal()

grid.arrange(d1, s1, nrow = 2)

Patrones identificados:
1. Bimodalidad en horas de estudio (pico en ~15 y ~20 horas).
2. Correlación positiva entre horas de estudio y calificaciones (especialmente en Ciencias).

Resumen Exploratorio

  1. Diferencias por facultad:
    • Ciencias dedica 3.1 horas más de estudio semanal.
    • Calificaciones 2.9 puntos más altas en Ciencias.
  2. Supuestos para análisis multivariado:
    • Distribuciones aproximadamente normales (ver densidad).
    • Correlaciones lineales entre variables (scatterplot).

4. Caso univariado

Caso Univariado: Prueba t para horas de estudio entre Ciencias y Humanidades

Prueba t

## 
##  Welch Two Sample t-test
## 
## data:  datos$horas_estudio[datos$facultad == "Ciencias"] and datos$horas_estudio[datos$facultad == "Humanidades"]
## t = 12.173, df = 57.867, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  4.351635 6.064526
## sample estimates:
## mean of x mean of y 
##  20.22494  15.01686
## 
##  Shapiro-Wilk normality test
## 
## data:  datos$horas_estudio[datos$facultad == "Ciencias"]
## W = 0.97688, p-value = 0.738
## 
##  Shapiro-Wilk normality test
## 
## data:  datos$horas_estudio[datos$facultad == "Humanidades"]
## W = 0.98113, p-value = 0.8546
  • La prueba t muestra una diferencia estadísticamente significativa (p < 2.2e-16) entre las horas de estudio de los estudiantes de Ciencias y Humanidades.
  • Los estudiantes de Ciencias estudian más horas (promedio de 20.22) que los de Humanidades (promedio de 15.02).
  • El intervalo de confianza del 95% para la diferencia de medias es (4.35, 6.06), lo que indica que la diferencia está entre 4.35 y 6.06 horas.
  • Las pruebas de normalidad indican que ambos grupos siguen una distribución normal (p > 0.05), lo que valida el uso de la prueba t para muestras independientes.

Caso Univariado:Prueba t para calificación entre Ciencias y Humanidades

## 
##  Welch Two Sample t-test
## 
## data:  datos$calificacion[datos$facultad == "Ciencias"] and datos$calificacion[datos$facultad == "Humanidades"]
## t = 9.3037, df = 55.8, p-value = 6.048e-13
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  2.691851 4.169282
## sample estimates:
## mean of x mean of y 
##  15.01622  11.58565
## 
##  Shapiro-Wilk normality test
## 
## data:  datos$calificacion[datos$facultad == "Ciencias"]
## W = 0.97765, p-value = 0.7603
## 
##  Shapiro-Wilk normality test
## 
## data:  datos$calificacion[datos$facultad == "Humanidades"]
## W = 0.98783, p-value = 0.9753
  • La prueba t muestra una diferencia estadísticamente significativa (p < 6.048e-13) entre las calificaciones de los estudiantes de Ciencias y Humanidades.
  • Los estudiantes de Ciencias tienen un promedio de calificación de 15.02, mientras que los de Humanidades tienen un promedio de 11.59.
  • El intervalo de confianza del 95% para la diferencia de medias es (2.69, 4.17), lo que indica que la diferencia de calificación está entre 2.69 y 4.17 puntos a favor de los estudiantes de Ciencias.
  • Las pruebas de normalidad indican que ambos grupos siguen una distribución normal (p > 0.05), lo que valida el uso de la prueba t para muestras independientes.

Caso Univariado:Prueba t para sueño entre Ciencias y Humanidades

## 
##  Welch Two Sample t-test
## 
## data:  datos$sueño[datos$facultad == "Ciencias"] and datos$sueño[datos$facultad == "Humanidades"]
## t = 2.4549, df = 57.329, p-value = 0.01715
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  0.1419437 1.3975693
## sample estimates:
## mean of x mean of y 
##  6.823052  6.053295
## 
##  Shapiro-Wilk normality test
## 
## data:  datos$sueño[datos$facultad == "Ciencias"]
## W = 0.95513, p-value = 0.2315
## 
##  Shapiro-Wilk normality test
## 
## data:  datos$sueño[datos$facultad == "Humanidades"]
## W = 0.9708, p-value = 0.5614
  • La prueba t muestra una diferencia estadísticamente significativa (p = 0.01715) entre las horas de sueño de los estudiantes de Ciencias y Humanidades.
  • Los estudiantes de Ciencias duermen en promedio 6.82 horas, mientras que los de Humanidades duermen en promedio 6.05 horas.
  • El intervalo de confianza del 95% para la diferencia de medias es (0.14, 1.40), lo que indica que la diferencia en las horas de sueño está entre 0.14 y 1.40 horas a favor de los estudiantes de Ciencias.
  • Las pruebas de normalidad indican que ambos grupos siguen una distribución normal (p > 0.05), lo que valida el uso de la prueba t para muestras independientes.

5. Caso Multivariado

En este análisis visualizamos el comportamiento conjunto de pares de variables académicas entre estudiantes de las facultades de Ciencias y Humanidades, mediante elipses de confianza del 99%.

Las combinaciones exploradas son: - Horas de estudio vs Calificación - Horas de estudio vs Sueño - Calificación vs Sueño

Gráfico para el primer par de variables (horas_estudio y calificación)

### Gráfico para el segundo par de variables (horas_estudio y sueño) ### Gráfico para el tercer par de variables (calificación y sueño) #### Distancia de Mahalanobis

Para detectar posibles outliers multivariados, utilizamos la distancia de Mahalanobis entre las observaciones de las facultades de Ciencias y Humanidades. En este caso, comparamos las observaciones de ambas facultades para verificar si existen puntos atípicos.

- Chi-Square Q-Q Plot (estándar):

-   Muestra cómo las distancias de Mahalanobis observadas se comparan con la distribución χ² teórica.

Distancia ajustada de Mahalanobis

- Adjusted Q-Q Plot (robusto):

-   Usa estimaciones robustas de covarianza (menos sensibles a outliers).
    -   El hecho de que ambos gráficos coincidan sugiere que la detección es consistente.
    

Supuesto de normalidad multivariada de la matriz de diferencias:

Prueba de Shapiro Wilk

## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.95073, p-value = 0.1768
  • Prueba de Shapiro-Wilk:

    • Esta prueba evalúa la normalidad multivariada transformando la matriz de diferencias (X) y aplicando el test a sus transpuestas.

    • En nuestro caso, el p-valor fue 0.1768, que es mayor a 0.05, por lo tanto:

    No se rechaza la hipótesis nula de normalidad.
    Existe evidencia para asumir que la matriz de diferencias proviene de una distribución normal multivariada.

Prueba de normalidad multivariante de Royston

##      Test        H   p value MVN
## 1 Royston 1.018725 0.7964468 YES
  • Se observa un p-valor mayor al p-valor, por lo que los datos pueden ser considerados como provenientes de una distribución normal multivariada.

  • El gráfico Chi-Square Q-Q muestra:

    • Desviación sistemática de los puntos respecto a la línea teórica (especialmente en valores altos)

    • Patrón lineal que refuerza la conclusión de normalidad #### Prueba de normalidad multivariante de Mardia

La prueba de Mardia es una prueba comúnmente utilizada para detectar la normalidad multivariada en los datos. En esta prueba, se evalúan dos aspectos de la distribución de los datos:

  1. Prueba de asimetría: La prueba evalúa si los datos presentan una asimetría significativa.
  2. Prueba de curtosis: La prueba evalúa si las colas de la distribución se alejan significativamente de una distribución normal.
##              Test         Statistic           p value Result
## 1 Mardia Skewness  5.26417266079858 0.872846818377872    YES
## 2 Mardia Kurtosis -1.10504586941767 0.269139713994496    YES
## 3             MVN              <NA>              <NA>    YES
  • La asimetría de los datos muestra un valor positivo (5.26), lo que indica que los datos tienen una asimetría significativa, es decir, las colas de la distribución están desbalanceadas en comparación con una distribución normal.
  • La curtosis es negativa (-1.11), lo que sugiere que las colas de los datos son más ligeras que las de una distribución normal, lo que también indica una desviación de la normalidad.

Dado que la prueba de Mardia ha indicado una asimetría significativa y una curtosis no normal, podemos concluir que los datos no siguen una distribución normal multivariada según esta prueba.

Comparación con otras pruebas:

Es importante mencionar que, a pesar de los resultados de Mardia, otras pruebas como Royston o Henze-Zirkler podrían no haber mostrado la misma conclusión. Esto se debe a que diferentes pruebas tienen distintas sensibilidades y pueden detectar distintos tipos de desviaciones de la normalidad. En este caso, las pruebas de asimetría y curtosis detectadas por Mardia sugieren que los datos no son normales, aunque las demás pruebas podrían haber sido más permisivas.

En resumen, aunque algunas pruebas no rechacen la normalidad, la prueba de Mardia proporciona evidencia fuerte de que los datos no siguen una distribución normal multivariada debido a la asimetría y la curtosis observadas.

Prueba de normalidad de Henze-Zirkler

La prueba de Henze-Zirkler evalúa la normalidad multivariada tomando en cuenta la forma general de la distribución, incluida la asimetría y la curtosis

##            Test        HZ  p value MVN
## 1 Henze-Zirkler 0.5569979 0.619313 YES
  • El p-valor obtenido de la prueba de Henze-Zirkler es 0.6193, que es significativamente mayor que el umbral de 0.05. Esto sugiere que no hay evidencia suficiente para rechazar la hipótesis nula, lo que implica que los datos podrían seguir una distribución normal multivariada.
Conclusión:

La prueba de Henze-Zirkler no rechaza la hipótesis de normalidad multivariada, lo que implica que los datos tienen una distribución normal multivariada. Esto está en concordancia con las pruebas de Royston y Shapiro-Wilk, que también sugieren que los datos siguen una distribución normal multivariada. Sin embargo, otras pruebas como la de Mardia indicaron una posible violación de la normalidad debido a la asimetría y la curtosis.

Este resultado refuerza la idea de que las conclusiones sobre la normalidad de los datos pueden variar según el tipo de prueba aplicada.

Prueba de normalidad de Doornik-Hansen

La prueba de Doornik-Hansen evalúa la normalidad multivariada y es sensible a la forma de la distribución, siendo especialmente útil para muestras pequeñas y medianas.

##             Test        E df   p value MVN
## 1 Doornik-Hansen 1.211034  6 0.9763362 YES

El p-valor obtenido de la prueba de Doornik-Hansen es 0.976, que es mucho mayor que el umbral de 0.05. Esto sugiere que no hay evidencia suficiente para rechazar la hipótesis nula de normalidad multivariada. Es decir, según esta prueba, los datos siguen una distribución normal multivariada.

Conclusión:

La prueba de Doornik-Hansen no rechaza la hipótesis de normalidad multivariada, lo que indica que los datos en cuestión podrían seguir una distribución normal multivariada, a diferencia de lo indicado por otras pruebas como Mardia o Royston, que habían rechazado la normalidad.

Es importante tener en cuenta que las pruebas de normalidad multivariada pueden mostrar resultados diferentes dependiendo de las características de los datos y de la sensibilidad de cada prueba.

Conclusión general:

Aunque algunas pruebas sugieren que los datos podrían seguir una distribución normal multivariada (como la de Royston, Henze-Zirkler y Doornik-Hansen), otras pruebas (como Mardia y Szekely-Rizzo) indican que los datos presentan asimetría significativa y colas no normales, lo que sugiere que los datos no siguen una distribución normal multivariada en general.

Prueba T^2 de Hotelling

##        Multivariate Paired Hotelling T Square Test 
## 
## Hotelling T Sqaure Statistic = 213.5373 
##  F value = 66.27 , df1 = 3 , df2 = 27 , p-value: 1.42e-12 
## 
##             Descriptive Statistics (The First Treatment) 
## 
##       calificacion horas_estudio    sueño
## Means    15.016220     20.224943 6.823052
## Sd        1.563454      1.696274 1.278399
## 
## 
##             Descriptive Statistics (The Second Treatment) 
## 
##       calificacion horas_estudio    sueño
## Means    11.585654     15.016862 6.053295
## Sd        1.278472      1.616764 1.146853
## 
## 
##             Descriptive Statistics (The Differences) 
## 
##       calificacion horas_estudio      sueño
## Means    -3.430566     -5.208081 -0.7697565
## Sd        2.114889      2.403818  1.9816868
  1. Resultado significativo (p = 1.42e-12):
    • El valor p es extremadamente bajo, lo que indica que rechazamos la hipótesis nula de que los vectores de medias de las dos facultades son iguales.
    • Esto sugiere que existen diferencias multivariadas significativas entre las facultades de Ciencias y Humanidades en las variables consideradas: calificación, horas de estudio y sueño. la prueba T² de Hotelling muestra que hay diferencias multivariadas significativas entre las facultades de Ciencias y Humanidades en las tres variables analizadas.
  2. Diferencias observadas entre las facultades:
  • Calificación: Las diferencias en la media de calificación entre las dos facultades son de -3.43, con una desviación estándar de 2.11. Esto indica que los estudiantes de Ciencias tienen, en promedio, calificaciones más altas que los de Humanidades.

  • Horas de estudio: La diferencia en las horas de estudio es de -5.21, con una desviación estándar de 2.40. Los estudiantes de Ciencias estudian más horas, en promedio, que los de Humanidades.

  • Sueño: La diferencia en el promedio de horas de sueño es de -0.77, con una desviación estándar de 1.98. Los estudiantes de Humanidades tienen, en promedio, más horas de sueño que los de Ciencias.

Prueba T^2 de Hotelling respecto a un vector de medias conocido

# Usando la librería ICSNP
xbar <- colMeans(datos_ciencias[, c("calificacion", "horas_estudio", "sueño")])
xbar  # Promedio de las diferencias entre las categorías de ambas variables
##  calificacion horas_estudio         sueño 
##     15.016220     20.224943      6.823052
# Realizar la prueba T² de Hotelling respecto a un vector de medias conocido
HotellingsT2(datos_ciencias[, c("calificacion", "horas_estudio", "sueño")], mu=c(15, 18, 7))
## 
##  Hotelling's one sample T2-test
## 
## data:  datos_ciencias[, c("calificacion", "horas_estudio", "sueño")]
## T.2 = 17.022, df1 = 3, df2 = 27, p-value = 2.089e-06
## alternative hypothesis: true location is not equal to c(15,18,7)
  1. Resultado de la prueba:
    • El análisis muestra un estadístico T² = 17.022 con un p-valor extremadamente significativo (p = 2.089e-06).
    • Esto indica que existe una diferencia multivariada significativa entre las medias observadas en las variables de calificación, horas de estudio, y sueño en la facultad de Ciencias, y el vector de medias propuesto [15, 18, 7].
  2. Interpretación del resultado:
    • Al rechazar la hipótesis nula (p < 0.05), concluimos que el perfil multivariado real de las facultades de Ciencias difiere significativamente del patrón esperado en el vector de comparación [15, 18, 7].
  3. Especificidad de las variables:
    • Aunque la prueba general no identifica qué variables específicas difieren, las diferencias observadas en las calificaciones, horas de estudio y sueño son suficientes para concluir que el perfil multivariado de la facultad de Ciencias no es compatible con el vector de medias conocido.

5 - MANOVA EN DCA

1. Cargar Librerías

library(readxl)
library(tidyverse)
library(mvnormtest)
library(MVTests)
library(heplots)

2. Preparación de datos

Se presenta un análisis MANOVA en un Diseño Completamente al Azar (DCA), aplicado a un conjunto de datos. El objetivo es evaluar el efecto de cuatro tratamientos experimentales sobre tres variables clave en un cultivo.

Estructura del experimento:

  • Factores de estudio:
    • Tratamiento: con cuatro niveles (A, B, C, D).
  • Variables de respuesta:
    • Largo (cm)
    • Ancho (cm)
    • Peso (g)
rm(list = ls())
datos <- read_excel("papas_fertilizantes.xlsx")
datos$Tratamiento <- as.factor(datos$Tratamiento)
str(datos)
## tibble [1,500 × 4] (S3: tbl_df/tbl/data.frame)
##  $ Tratamiento: Factor w/ 4 levels "A","B","C","D": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Largo      : num [1:1500] 13 15 15.2 13.1 12.5 ...
##  $ Ancho      : num [1:1500] 4.93 4.88 5.38 4.77 4.04 ...
##  $ Peso       : num [1:1500] 269 243 236 236 198 ...
# Separar datos por tratamiento
tratA <- datos %>% filter(Tratamiento == "A") %>% dplyr::select(Largo, Ancho, Peso)
tratB <- datos %>% filter(Tratamiento == "B") %>% dplyr::select(Largo, Ancho, Peso)
tratC <- datos %>% filter(Tratamiento == "C") %>% dplyr::select(Largo, Ancho, Peso)
tratD <- datos %>% filter(Tratamiento == "D") %>% dplyr::select(Largo, Ancho, Peso)

3. Supuestos

a. Test de normalidad multivariada

mshapiro.test(t(tratA))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.99485, p-value = 0.2451
  • Fertilizante A:Las papas tratadas con A muestran una distribución normal en sus características combinadas de tamaño y peso.
mshapiro.test(t(tratB))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.99635, p-value = 0.5491
  • Fertilizante B:Las papas tratadas con B muestran una distribución normal en sus características combinadas de tamaño y peso
mshapiro.test(t(tratC))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.99072, p-value = 0.01835
  • Fertilizante C:Las papas tratadas con C no muestran una distribución normal en sus características combinadas de tamaño y peso
mshapiro.test(t(tratD))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.99663, p-value = 0.6246
  • Fertilizante D:Las papas tratadas con D muestran una distribución normal en sus características combinadas de tamaño y peso

Conclusión: 3 de 4 fertilizantes cumplen con el supuesto de normalidad, la unica que no cumple es el fertilizante C, eso nos indica que hay mayor variabilidad en cuanto al peso de las papas

b. Homogeneidad de matrices varianza-covarianza (Box’s M)

heplots::boxM(cbind(Largo, Ancho, Peso) ~ Tratamiento, data = datos)
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  Y
## Chi-Sq (approx.) = 325.73, df = 18, p-value < 2.2e-16

Conclusión: Cada fertilizante produce no solo diferencias en los promedios (Largo, Ancho, Peso), sino también en la variabilidad individual de cada característica.Las relaciones entre variables morfológicas cambian según el fertilizante. Por ejemplo: en un fertilizante el Largo y Peso pueden estar fuertemente asociados, mientras que en otro no

c. Esfericidad de Bartlett

res1 <- Bsper(datos[, -1])
summary(res1)
##        Bartlett's Sphericity Test 
## 
## Chi-Squared Value = 213.2051 , df = 3  and p-value: <2e-16 
## 
##        Correlation Matrix 
## 
##           Largo     Ancho      Peso
## Largo 1.0000000 0.1607042 0.1259117
## Ancho 0.1607042 1.0000000 0.3226589
## Peso  0.1259117 0.3226589 1.0000000

Conclusión: Existen correlaciones significativas entre al menos algunas de las variables respuesta (Largo, Ancho, Peso), esto nos indica que los atributos físicos de las papas están interrelacionados.
- Analisis de relaciones: - Ancho-Peso: Las papas más anchas tienden a ser más pesadas (relación más fuerte) - Largo-Ancho: El largo no predice fuertemente el ancho (papas largas no necesariamente anchas) - Largo-Peso: El peso depende más del ancho que del largo

4. Modelo MANOVA en Diseño Completamente al Azar

modelo <- manova(cbind(Largo, Ancho, Peso) ~ Tratamiento, data = datos)

#Determinación de la matriz residual y la matriz factorial del MANOVA
Matrices <- summary(modelo)$SS
F <- Matrices$Tratamiento
W <- Matrices$Residuals

# Variabilidad explicada por el factor (Tratamientos)
F
##            Largo      Ancho      Peso
## Largo  1184.1870   729.7497  29418.83
## Ancho   729.7497   455.0107  18473.27
## Peso  29418.8292 18473.2663 755443.56
  • El peso muestra la mayor variabilidad explicada por los fertilizantes (valor 755443.56), indicando que el tipo de fertilizante tiene un impacto especialmente fuerte en el rendimiento (peso de las papas)
#Variabilidad residual
W
##            Largo     Ancho         Peso
## Largo 11682.4353 -119.3639   -5220.7196
## Ancho  -119.3639  666.2063    -168.1891
## Peso  -5220.7196 -168.1891 2115112.6985
  • Las covariaciones negativas sugieren relaciones inversas dentro de los grupos. Por ejemplo en: Largo-Peso, Largo-Ancho y Ancho-Peso
#Variabilidad Total
T <- F + W
T
##            Largo      Ancho       Peso
## Largo 12866.6224   610.3859   24198.11
## Ancho   610.3859  1121.2169   18305.08
## Peso  24198.1095 18305.0773 2870556.25
  • Efecto más fuerte en Ancho: Los fertilizantes explican el 40.6% de la variabilidad en anchura (el efecto relativo más grande)
  • Efecto moderado en Peso: Aunque el efecto absoluto es grande, relativamente los fertilizantes explican el 26.3%
  • Efecto más débil en Largo: Solo 9.2% explicado (la longitud depende más de otros factores)
# Bondad de ajuste
eta <- 1 - det(W)/det(T)
eta
## [1] 0.5430053

Interpretación: El valor eta = 0.543 confirma que los fertilizantes explican más de la mitad de la variabilidad multivariada en las características de las papas, esto indica que la elección del fertilizante es un factor determinante en las características combinadas de las papas.

5. Pruebas de hipótesis

summary(modelo, test = "Pillai")
##               Df  Pillai approx F num Df den Df    Pr(>F)    
## Tratamiento    3 0.54475   110.64      9   4488 < 2.2e-16 ***
## Residuals   1496                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • Los fertilizantes explican 54.475% de la variabilidad multivariada combinada en las características de las papas (Largo, Ancho, Peso)
  • Nivel de confianza: da certeza de que al menos un fertilizante difiere en su efecto multivariado.
summary(modelo, test = "Wilks")
##               Df   Wilks approx F num Df den Df    Pr(>F)    
## Tratamiento    3 0.45699   153.35      9 3636.2 < 2.2e-16 ***
## Residuals   1496                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • El valor 0.457 sugiere que aproximadamente el 54.3% de la variabilidad multivariada NO es explicada por los fertilizantes (1-0.457 = 0.543)
  • Nivel de confianza: da certeza en diferencias multivariadas entre fertilizantes
summary(modelo, test = "Hotelling-Lawley")
##               Df Hotelling-Lawley approx F num Df den Df    Pr(>F)    
## Tratamiento    3           1.1844   196.43      9   4478 < 2.2e-16 ***
## Residuals   1496                                                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • El valor 1.1844 indica que los diferentes fertilizantes están produciendo papas con perfiles de tamaño y peso claramente distintos
  • Nivel de confianza: da certeza de que hay evidencia estadística extremadamente fuerte para rechazar la hipótesis nula de que todos los fertilizantes producen papas con las mismas características combinadas
summary(modelo, test = "Roy")
##               Df    Roy approx F num Df den Df    Pr(>F)    
## Tratamiento    3 1.1812   589.01      3   1496 < 2.2e-16 ***
## Residuals   1496                                            
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • El valor 1.1812 indica que al menos un tratamiento (fertilizante) produce papas significativamente diferentes en alguna combinación de tamaño y peso.
  • Nivel de confianza: da certeza de que al menos un fertilizante produce papas con dimensiones (Largo, Ancho, Peso) significativamente diferentes de los demás

A continuacion se aprecia que las 3 variables respuesta son significativas lo que indica que las todas las variables contribuyeron para que se rechace la H0 que dice que los 4 vectores de promedios son iguales y se concluye que al menos uno de los vectores de promedios es diferente

summary.aov(modelo)
##  Response Largo :
##               Df  Sum Sq Mean Sq F value    Pr(>F)    
## Tratamiento    3  1184.2  394.73  50.547 < 2.2e-16 ***
## Residuals   1496 11682.4    7.81                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Ancho :
##               Df Sum Sq Mean Sq F value    Pr(>F)    
## Tratamiento    3 455.01 151.670  340.58 < 2.2e-16 ***
## Residuals   1496 666.21   0.445                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Peso :
##               Df  Sum Sq Mean Sq F value    Pr(>F)    
## Tratamiento    3  755444  251815  178.11 < 2.2e-16 ***
## Residuals   1496 2115113    1414                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

6. Comparación General por pares

  • H0:los 2 vectores de promedios son iguales
  • H1:los 2 vectores de promedios difieren
Tratam <- c("A", "B", "C", "D")
comb <- t(combn(length(Tratam), 2))

for(i in 1:nrow(comb)){
  modelo.comp <- manova(cbind(Largo, Ancho, Peso) ~ Tratamiento, data = datos,
                        subset = Tratamiento %in% Tratam[comb[i,]])
  cat("Trat:", Tratam[comb[i,]][1], "y", Tratam[comb[i,]][2], "\n")
  print(summary(modelo.comp, test = "Pillai"))
  cat("\n")
}
## Trat: A y B 
##              Df  Pillai approx F num Df den Df    Pr(>F)    
## Tratamiento   1 0.26671   90.446      3    746 < 2.2e-16 ***
## Residuals   748                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Trat: A y C 
##              Df  Pillai approx F num Df den Df    Pr(>F)    
## Tratamiento   1 0.54033    292.3      3    746 < 2.2e-16 ***
## Residuals   748                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Trat: A y D 
##              Df  Pillai approx F num Df den Df    Pr(>F)    
## Tratamiento   1 0.67616   519.21      3    746 < 2.2e-16 ***
## Residuals   748                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Trat: B y C 
##              Df  Pillai approx F num Df den Df    Pr(>F)    
## Tratamiento   1 0.20193   62.918      3    746 < 2.2e-16 ***
## Residuals   748                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Trat: B y D 
##              Df  Pillai approx F num Df den Df    Pr(>F)    
## Tratamiento   1 0.44087   196.07      3    746 < 2.2e-16 ***
## Residuals   748                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Trat: C y D 
##              Df  Pillai approx F num Df den Df    Pr(>F)    
## Tratamiento   1 0.14264   41.372      3    746 < 2.2e-16 ***
## Residuals   748                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • Nivel de confianza: lo que significa que hay diferencias estadísticamente significativas entre los tratamientos comparados para el conjunto combinado de variables (Largo, Ancho y Peso)

Conclusión Final: El tipo de fertilizante tiene un efecto significativo en las características morfológicas de las papas. El análisis MANOVA permitió identificar estas diferencias de manera conjunta considerando la interrelación entre las variables Largo, Ancho y Peso.

6 - MANOVA EN DBCA

1.PREPARACIÓN DE DATOS

El presente informe describe un conjunto de datos experimentales con el propósito de evaluar el comportamiento de cinco variedades de arroz bajo condiciones controladas.

El diseño experimental contempla:

  • 5 variedades de arroz: V1, V2, V3, V4 y V5.
  • 10 parcelas: identificadas como Parcela_1 hasta Parcela_10.
  • Rendimiento (kg/ha)
  • Altura de planta (cm)
  • Número de macollos
  • Humedad del grano (%)

Se importa la base de datos que contiene evaluaciones de distintas variedades de arroz en un Diseño en Bloques Completos al Azar (DBCA). Se realiza la conversión de las variables categóricas (Variedad y Parcela) a factores, y se inspecciona la estructura de los datos para asegurar su correcta codificación antes del análisis estadístico multivariado.

library(tidyverse)
library(readr)

datos <- read_delim("evaluacion_arroz.csv", 
                    delim = ";",         # coma como separador de columnas
                    locale = locale(decimal_mark = "."))  # punto como separador decimal
datos <- as.data.frame(datos)
head(datos)
##   Variedad Parcela Rendimiento Altura_planta N_macollos Humedad_grano
## 1       V1      P1    561.1288     104.62529   13.70116      13.61434
## 2       V2      P1    523.0591      98.62061   13.84415      13.80729
## 3       V3      P1    570.8939     103.85367   12.15053      14.49300
## 4       V4      P1    598.9859     103.88487   12.78659      14.05133
## 5       V5      P1    612.1280     100.02033   15.41638      16.61576
## 6       V1      P2    516.8163      90.01259   13.93168      13.42054
str(datos)
## 'data.frame':    1000 obs. of  6 variables:
##  $ Variedad     : chr  "V1" "V2" "V3" "V4" ...
##  $ Parcela      : chr  "P1" "P1" "P1" "P1" ...
##  $ Rendimiento  : num  561 523 571 599 612 ...
##  $ Altura_planta: num  104.6 98.6 103.9 103.9 100 ...
##  $ N_macollos   : num  13.7 13.8 12.2 12.8 15.4 ...
##  $ Humedad_grano: num  13.6 13.8 14.5 14.1 16.6 ...
# Verificar valores únicos en cada columna
unique(datos$Variedad)
## [1] "V1" "V2" "V3" "V4" "V5"
unique(datos$Parcela)
##  [1] "P1"  "P2"  "P3"  "P4"  "P5"  "P6"  "P7"  "P8"  "P9"  "P10"
# Luego, si los valores coinciden, hacer la conversión
datos$Variedad <- factor(datos$Variedad, levels = c("V1", "V2", "V3", "V4", "V5"),
                         labels = c("V1", "V2", "V3", "V4", "V5"))
datos$Parcela <- factor(datos$Parcela, levels = c("P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8", "P9", "P10"),
                        labels = c("P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8", "P9", "P10"))
str(datos)
## 'data.frame':    1000 obs. of  6 variables:
##  $ Variedad     : Factor w/ 5 levels "V1","V2","V3",..: 1 2 3 4 5 1 2 3 4 5 ...
##  $ Parcela      : Factor w/ 10 levels "P1","P2","P3",..: 1 1 1 1 1 2 2 2 2 2 ...
##  $ Rendimiento  : num  561 523 571 599 612 ...
##  $ Altura_planta: num  104.6 98.6 103.9 103.9 100 ...
##  $ N_macollos   : num  13.7 13.8 12.2 12.8 15.4 ...
##  $ Humedad_grano: num  13.6 13.8 14.5 14.1 16.6 ...
head(datos)
##   Variedad Parcela Rendimiento Altura_planta N_macollos Humedad_grano
## 1       V1      P1    561.1288     104.62529   13.70116      13.61434
## 2       V2      P1    523.0591      98.62061   13.84415      13.80729
## 3       V3      P1    570.8939     103.85367   12.15053      14.49300
## 4       V4      P1    598.9859     103.88487   12.78659      14.05133
## 5       V5      P1    612.1280     100.02033   15.41638      16.61576
## 6       V1      P2    516.8163      90.01259   13.93168      13.42054

2.SUPUESTOS

a) SUPUESTOS DE NORMALIDAD MULTIVARIADA

  • Prueba utilizada: Prueba de Shapiro-Wilk Multivariada

    Hipótesis:

    • H₀:Los datos siguen una distribución normal multivariada.

    • H₁:: Los datos no siguen una distribución normal multivariada.

library(tidyverse)

parc1 = datos %>% filter(Parcela== "P1") %>%
  dplyr::select(Rendimiento, Altura_planta, N_macollos, Humedad_grano)
parc2 = datos %>% filter(Parcela== "P2") %>%
  dplyr::select( Rendimiento, Altura_planta, N_macollos, Humedad_grano)
parc3 = datos %>% filter(Parcela== "P3") %>%
  dplyr::select( Rendimiento, Altura_planta, N_macollos, Humedad_grano)
parc4 = datos %>% filter(Parcela== "P4") %>%
  dplyr::select(Rendimiento, Altura_planta, N_macollos, Humedad_grano)
parc5 = datos %>% filter(Parcela== "P5") %>%
  dplyr::select(Rendimiento, Altura_planta, N_macollos, Humedad_grano)
parc6 = datos %>% filter(Parcela== "P6") %>%
  dplyr::select(Rendimiento, Altura_planta, N_macollos, Humedad_grano)
parc7 = datos %>% filter(Parcela== "P7") %>%
  dplyr::select(Rendimiento, Altura_planta, N_macollos, Humedad_grano)
parc8 = datos %>% filter(Parcela== "P8") %>%
  dplyr::select(Rendimiento, Altura_planta, N_macollos, Humedad_grano)
parc9 = datos %>% filter(Parcela== "P9") %>%
  dplyr::select(Rendimiento, Altura_planta, N_macollos, Humedad_grano)
parc10 = datos %>% filter(Parcela== "P10") %>%
  dplyr::select(Rendimiento, Altura_planta, N_macollos, Humedad_grano)

#Ejecutamos el test

library(mvnormtest)
mshapiro.test(t(parc1))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.98598, p-value = 0.3727
mshapiro.test(t(parc2))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.97124, p-value = 0.0275
mshapiro.test(t(parc3))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.97823, p-value = 0.09675
mshapiro.test(t(parc4))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.98069, p-value = 0.1503
mshapiro.test(t(parc5))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.97796, p-value = 0.09208
mshapiro.test(t(parc6))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.97663, p-value = 0.07245
mshapiro.test(t(parc7))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.98803, p-value = 0.5101
mshapiro.test(t(parc8))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.97599, p-value = 0.06445
mshapiro.test(t(parc9))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.98004, p-value = 0.1338
mshapiro.test(t(parc10))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.98376, p-value = 0.2578

Conclusión general: Solo el grupo P2 presentó evidencia significativa (p < 0.05) para rechazar la normalidad multivariada. El resto de grupos no presentaron evidencia suficiente para rechazar H₀, por lo que se asume normalidad multivariada en general, aunque con una ligera violación en P2.

b) SUPUESTOS DE HOMOGENEIDAD DE MATRICES VARIANZA-COVARIANZAS

Prueba utilizada:

  • Box’s M test:

    Hipótesis:

    • H₀:Las matrices varianza-covarianza son iguales entre los grupos.

    • H₁:Al menos una matriz de variaanza-covarianza difiere.

library(heplots)

res <- boxM(datos[, 3:6], datos[, "Parcela"])
res
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  datos[, 3:6]
## Chi-Sq (approx.) = 96.973, df = 90, p-value = 0.289
summary(res)
## Summary for Box's M-test of Equality of Covariance Matrices
## 
## Chi-Sq:   96.97255 
## df:   90 
## p-value: 0.289 
## 
## log of Covariance determinants:
##       P1      P10       P2       P3       P4       P5       P6       P7 
## 12.19054 12.43337 13.07821 12.20480 12.81953 12.41135 12.58394 12.38739 
##       P8       P9 
## 12.97447 12.32000 
## 
## Eigenvalues:
##             P1          P10          P2           P3           P4           P5
## 1 1553.4461600 1940.0028127 1832.236290 1529.0320797 1933.3313377 2064.7884392
## 2   32.3004261   41.1206659   39.557862   31.8598596   40.5728053   29.9121505
## 3    4.4566978    4.1773853    5.038287    5.0984854    5.4225543    4.1302928
## 4    0.8805773    0.7533134    1.310077    0.8042227    0.8683702    0.9626653
##            P6           P7          P8          P9      pooled
## 1 1449.399640 1485.6962628 1882.276721 1335.152950 1700.122171
## 2   29.138199   30.3532268   31.817286   32.671696   34.225869
## 3    5.894682    6.2239226    6.584333    4.871831    5.279203
## 4    1.172263    0.8542285    1.093656    1.054659    1.004694
## 
## Statistics based on eigenvalues:
##                     P1          P10           P2           P3           P4
## product   1.969179e+05 2.510399e+05 4.784032e+05 1.997459e+05 3.693602e+05
## sum       1.591084e+03 1.986054e+03 1.878143e+03 1.566795e+03 1.980195e+03
## precision 7.185957e-01 6.282642e-01 1.012536e+00 6.795256e-01 7.346665e-01
## max       1.553446e+03 1.940003e+03 1.832236e+03 1.529032e+03 1.933331e+03
##                     P5           P6           P7           P8           P9
## product   2.455723e+05 2.918342e+05 2.397580e+05 4.312599e+05 2.241336e+05
## sum       2.099794e+03 1.485605e+03 1.523128e+03 1.921772e+03 1.373751e+03
## precision 7.605651e-01 9.454434e-01 7.326351e-01 9.105803e-01 8.440302e-01
## max       2.064788e+03 1.449400e+03 1.485696e+03 1.882277e+03 1.335153e+03
##                 pooled
## product   3.086292e+05
## sum       1.740632e+03
## precision 8.233462e-01
## max       1.700122e+03
heplots::boxM(cbind(Rendimiento, Altura_planta, N_macollos, Humedad_grano) 
              ~ Parcela, data = datos)
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  Y
## Chi-Sq (approx.) = 96.973, df = 90, p-value = 0.289
library(biotools)

boxM(datos[3:6], datos[, 1])
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  datos[3:6]
## Chi-Sq (approx.) = 44.222, df = 40, p-value = 0.2979

Conclusión: Dado que los p-valores son mayores a 0.05, no se rechaza H₀.
Se cumple el supuesto de homogeneidad de matrices de varianza-covarianza.

  • Prueba de Ahmad et al

    Hipótesis:

    • H₀:Todas las matrices de covarianza son iguales

    • H₁:Al menos una matriz es diferente.

library(covTestR)
maiz<- unique(datos$Parcela)
maiz1 <- lapply(maiz,
    function(x){as.matrix(datos[datos$Parcela == x, 3:6])}
)

names(maiz1) <- maiz
Ahmad2017(maiz1)
## 
##  Ahmad 2017 Homogeneity of Covariance Matrices Test
## 
## data:  P1, P2, P3, P4, P5, P6, P7, P8, P9 and P10
## Standard Normal = 260653384, Mean = 0, Variance = 1, p-value < 2.2e-16
## alternative hypothesis: true difference in covariance matrices is not equal to 0

Conclusión: Dado que el p-valor es muy pequeño (menor a 0.05), se rechaza H₀.
No se cumple el supuesto de homogeneidad de matrices de covarianza, según el test de Ahmad (2017).

  • Prueba Wrapper

    Hipótesis:

    • H₀:Todas las matrices de covarianza son iguales

    • H₁:Al menos una difiere.

## Prueba Wrapper
homogeneityCovariances(datos[, -1], group = Parcela, covTest = BoxesM)
## 
##  Boxes' M Homogeneity of Covariance Matrices Test
## 
## data:  P1, P2, P3, P4, P5, P6, P7, P8, P9 and P10
## Chi-Squared = 98.542, df = 45450, p-value = 1
## alternative hypothesis: true difference in covariance matrices is not equal to 0
library(DFA.CANCOR)
HOMOGENEITY(data = datos[, -1], groups = 'Parcela', 
            variables = c('Rendimiento', 'Altura_planta',
                          'N_macollos', 'Humedad_grano'))   
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento       1540.17        136.46      35.27         12.45
## Altura_planta      136.46         43.02       9.50          2.86
## N_macollos          35.27          9.50       6.79          0.88
## Humedad_grano       12.45          2.86       0.88          1.10
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento       1826.37         94.03      36.32         18.55
## Altura_planta       94.03         43.98       5.62          3.13
## N_macollos          36.32          5.62       6.16          0.87
## Humedad_grano       18.55          3.13       0.87          1.65
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento       1518.89        114.46      42.78         12.78
## Altura_planta      114.46         40.33       6.04          2.27
## N_macollos          42.78          6.04       6.60          0.33
## Humedad_grano       12.78          2.27       0.33          0.97
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento       1921.30        139.49      53.33         19.03
## Altura_planta      139.49         50.77       5.66          3.04
## N_macollos          53.33          5.66       6.99          0.44
## Humedad_grano       19.03          3.04       0.44          1.13
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento       2057.74        106.74      52.11         14.40
## Altura_planta      106.74         35.01       6.20          1.89
## N_macollos          52.11          6.20       5.91          0.77
## Humedad_grano       14.40          1.89       0.77          1.13
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento       1437.70        117.23      51.86          8.30
## Altura_planta      117.23         38.34       7.86          0.80
## N_macollos          51.86          7.86       8.34          0.35
## Humedad_grano        8.30          0.80       0.35          1.22
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento       1471.62        134.55      46.46          6.79
## Altura_planta      134.55         42.80       6.00          0.89
## N_macollos          46.46          6.00       7.77          0.75
## Humedad_grano        6.79          0.89       0.75          0.94
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento       1869.86        136.32      62.67         18.27
## Altura_planta      136.32         41.14       8.86          2.68
## N_macollos          62.67          8.86       9.42          1.13
## Humedad_grano       18.27          2.68       1.13          1.35
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento       1323.85        115.48      34.29          9.28
## Altura_planta      115.48         42.28       7.35          1.88
## N_macollos          34.29          7.35       6.38          0.95
## Humedad_grano        9.28          1.88       0.95          1.24
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento       1932.99        105.68      44.69         11.20
## Altura_planta      105.68         46.43       6.82          2.41
## N_macollos          44.69          6.82       5.70          0.81
## Humedad_grano       11.20          2.41       0.81          0.94
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento      1690.049       120.045     45.978        13.104
## Altura_planta     120.045        42.411      6.989         2.184
## N_macollos         45.978         6.989      7.006         0.727
## Humedad_grano      13.104         2.184      0.727         1.166
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento         1.000         0.448      0.423         0.295
## Altura_planta       0.448         1.000      0.405         0.311
## N_macollos          0.423         0.405      1.000         0.254
## Humedad_grano       0.295         0.311      0.254         1.000
##        Log Determinant
## P1              12.191
## P2              13.078
## P3              12.205
## P4              12.820
## P5              12.411
## P6              12.584
## P7              12.387
## P8              12.974
## P9              12.320
## P10             12.433
## Pooled          12.640

Conclusión: Se cumple el supuesto de homogeneidad de las matrices de varianzas-covarianzas entre los grupos (parcelas)

b) SUPUESTOS DE VARIABLES DEPENDIENTES CORRELACIONADAS

  • Prueba de esfericidad de Bartlett

    Hipótesis:

    • H₀:No estan correlacionas det(Rp)=1 (La matriz de correlación es la matriz identidad)

    • H₁:Al menos una difiere.(La matriz de correlación no es la matriz identidad)

library(psych)
options(scipen = 0)
cortest.bartlett(cor(datos[,c(-1, -2)]), n = nrow(datos[, c(-1, -2)]))
## $chisq
## [1] 627.3808
## 
## $p.value
## [1] 2.888833e-132
## 
## $df
## [1] 6
library(MVTests)
res1 = Bsper(datos[, c(-1, -2)])
summary(res1)
##        Bartlett's Sphericity Test 
## 
## Chi-Squared Value = 627.3808 , df = 6  and p-value: <2e-16 
## 
##        Correlation Matrix 
## 
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento     1.0000000     0.4477554  0.4168608     0.2906873
## Altura_planta   0.4477554     1.0000000  0.4012487     0.3104042
## N_macollos      0.4168608     0.4012487  1.0000000     0.2462650
## Humedad_grano   0.2906873     0.3104042  0.2462650     1.0000000

Conclusión: Dado que el valor-p es mucho menor que 0.05, se rechaza la hipótesis nula, concluyéndose que existe una correlación significativa entre las variables. Por lo tanto, es adecuado aplicar análisis MANOVA .

3. ANÁLISIS MULTIVARIADO DE LA VARIANZA (MANOVA)

Se realizó un análisis MANOVA para evaluar el efecto de los factores Variedad y Parcela sobre las variables de respuesta: Rendimiento, Altura de planta, Número de macollos y Humedad del grano.

modelo = manova(cbind(Rendimiento, Altura_planta, N_macollos,
                     Humedad_grano) ~Variedad + Parcela, data = datos)
  • Matriz de sumas de cuadrados y produtos cruzados (SSCP)

Se obtuvieron tres matrices de variabilidad:

  • F (SCOCF): Variabilidad explicada por el factor Variedad

  • B (SCOCB): Variabilidad explicada por el factor Parcela

  • W (SCOCR): Variabilidad no explicada (residual)

#Determinacion de la matriz residual y la matriz factorial del MANOVA.
str(modelo)
## List of 13
##  $ coefficients : num [1:14, 1:4] 522.6 17.4 37.6 55.2 79.3 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr [1:14] "(Intercept)" "VariedadV2" "VariedadV3" "VariedadV4" ...
##   .. ..$ : chr [1:4] "Rendimiento" "Altura_planta" "N_macollos" "Humedad_grano"
##  $ residuals    : num [1:1000, 1:4] 38.5 -16.9 10.7 21.2 10.2 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr [1:1000] "1" "2" "3" "4" ...
##   .. ..$ : chr [1:4] "Rendimiento" "Altura_planta" "N_macollos" "Humedad_grano"
##  $ effects      : num [1:1000, 1:4] -17684.3 324.8 89.1 -179.1 -793.5 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr [1:1000] "(Intercept)" "VariedadV2" "VariedadV3" "VariedadV4" ...
##   .. ..$ : chr [1:4] "Rendimiento" "Altura_planta" "N_macollos" "Humedad_grano"
##  $ rank         : int 14
##  $ fitted.values: num [1:1000, 1:4] 523 540 560 578 602 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr [1:1000] "1" "2" "3" "4" ...
##   .. ..$ : chr [1:4] "Rendimiento" "Altura_planta" "N_macollos" "Humedad_grano"
##  $ assign       : int [1:14] 0 1 1 1 1 2 2 2 2 2 ...
##  $ qr           :List of 5
##   ..$ qr   : num [1:1000, 1:14] -31.6228 0.0316 0.0316 0.0316 0.0316 ...
##   .. ..- attr(*, "dimnames")=List of 2
##   .. .. ..$ : chr [1:1000] "1" "2" "3" "4" ...
##   .. .. ..$ : chr [1:14] "(Intercept)" "VariedadV2" "VariedadV3" "VariedadV4" ...
##   .. ..- attr(*, "assign")= int [1:14] 0 1 1 1 1 2 2 2 2 2 ...
##   .. ..- attr(*, "contrasts")=List of 2
##   .. .. ..$ Variedad: chr "contr.treatment"
##   .. .. ..$ Parcela : chr "contr.treatment"
##   ..$ qraux: num [1:14] 1.03 1.06 1.06 1.06 1.05 ...
##   ..$ pivot: int [1:14] 1 2 3 4 5 6 7 8 9 10 ...
##   ..$ tol  : num 1e-07
##   ..$ rank : int 14
##   ..- attr(*, "class")= chr "qr"
##  $ df.residual  : int 986
##  $ contrasts    :List of 2
##   ..$ Variedad: chr "contr.treatment"
##   ..$ Parcela : chr "contr.treatment"
##  $ xlevels      :List of 2
##   ..$ Variedad: chr [1:5] "V1" "V2" "V3" "V4" ...
##   ..$ Parcela : chr [1:10] "P1" "P2" "P3" "P4" ...
##  $ call         : language manova(cbind(Rendimiento, Altura_planta, N_macollos, Humedad_grano) ~ Variedad +      Parcela, data = datos)
##  $ terms        :Classes 'terms', 'formula'  language cbind(Rendimiento, Altura_planta, N_macollos, Humedad_grano) ~ Variedad +      Parcela
##   .. ..- attr(*, "variables")= language list(cbind(Rendimiento, Altura_planta, N_macollos, Humedad_grano), Variedad,      Parcela)
##   .. ..- attr(*, "factors")= int [1:3, 1:2] 0 1 0 0 0 1
##   .. .. ..- attr(*, "dimnames")=List of 2
##   .. .. .. ..$ : chr [1:3] "cbind(Rendimiento, Altura_planta, N_macollos, Humedad_grano)" "Variedad" "Parcela"
##   .. .. .. ..$ : chr [1:2] "Variedad" "Parcela"
##   .. ..- attr(*, "term.labels")= chr [1:2] "Variedad" "Parcela"
##   .. ..- attr(*, "order")= int [1:2] 1 1
##   .. ..- attr(*, "intercept")= int 1
##   .. ..- attr(*, "response")= int 1
##   .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
##   .. ..- attr(*, "predvars")= language list(cbind(Rendimiento, Altura_planta, N_macollos, Humedad_grano), Variedad,      Parcela)
##   .. ..- attr(*, "dataClasses")= Named chr [1:3] "nmatrix.4" "factor" "factor"
##   .. .. ..- attr(*, "names")= chr [1:3] "cbind(Rendimiento, Altura_planta, N_macollos, Humedad_grano)" "Variedad" "Parcela"
##  $ model        :'data.frame':   1000 obs. of  3 variables:
##   ..$ cbind(Rendimiento, Altura_planta, N_macollos, Humedad_grano): num [1:1000, 1:4] 561 523 571 599 612 ...
##   .. ..- attr(*, "dimnames")=List of 2
##   .. .. ..$ : NULL
##   .. .. ..$ : chr [1:4] "Rendimiento" "Altura_planta" "N_macollos" "Humedad_grano"
##   ..$ Variedad                                                    : Factor w/ 5 levels "V1","V2","V3",..: 1 2 3 4 5 1 2 3 4 5 ...
##   ..$ Parcela                                                     : Factor w/ 10 levels "P1","P2","P3",..: 1 1 1 1 1 2 2 2 2 2 ...
##   ..- attr(*, "terms")=Classes 'terms', 'formula'  language cbind(Rendimiento, Altura_planta, N_macollos, Humedad_grano) ~ Variedad +      Parcela
##   .. .. ..- attr(*, "variables")= language list(cbind(Rendimiento, Altura_planta, N_macollos, Humedad_grano), Variedad,      Parcela)
##   .. .. ..- attr(*, "factors")= int [1:3, 1:2] 0 1 0 0 0 1
##   .. .. .. ..- attr(*, "dimnames")=List of 2
##   .. .. .. .. ..$ : chr [1:3] "cbind(Rendimiento, Altura_planta, N_macollos, Humedad_grano)" "Variedad" "Parcela"
##   .. .. .. .. ..$ : chr [1:2] "Variedad" "Parcela"
##   .. .. ..- attr(*, "term.labels")= chr [1:2] "Variedad" "Parcela"
##   .. .. ..- attr(*, "order")= int [1:2] 1 1
##   .. .. ..- attr(*, "intercept")= int 1
##   .. .. ..- attr(*, "response")= int 1
##   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
##   .. .. ..- attr(*, "predvars")= language list(cbind(Rendimiento, Altura_planta, N_macollos, Humedad_grano), Variedad,      Parcela)
##   .. .. ..- attr(*, "dataClasses")= Named chr [1:3] "nmatrix.4" "factor" "factor"
##   .. .. .. ..- attr(*, "names")= chr [1:3] "cbind(Rendimiento, Altura_planta, N_macollos, Humedad_grano)" "Variedad" "Parcela"
##  - attr(*, "class")= chr [1:5] "manova" "maov" "aov" "mlm" ...
Matrices = summary(modelo)$SS
Matrices
## $Variedad
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento     775117.50    117453.215 46685.9314    12454.1828
## Altura_planta   117453.21     17945.611  7088.4991     1891.9298
## N_macollos       46685.93      7088.499  2823.8935      754.7993
## Humedad_grano    12454.18      1891.930   754.7993      202.1265
## 
## $Parcela
##               Rendimiento Altura_planta  N_macollos Humedad_grano
## Rendimiento    2749.86613    198.002951 -195.915882    -51.823991
## Altura_planta   198.00295    190.502681    1.373657     27.089926
## N_macollos     -195.91588      1.373657  116.887804     -9.150788
## Humedad_grano   -51.82399     27.089926   -9.150788     24.619267
## 
## $Residuals
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento   898030.9298     1391.3188 -1168.1051      519.2285
## Altura_planta   1391.3188    24040.8228  -169.2603      269.9063
## N_macollos     -1168.1051     -169.2603  4112.4261      -35.4791
## Humedad_grano    519.2285      269.9063   -35.4791      952.3032
F = Matrices$Variedad
B = Matrices$Parcela
W = Matrices$Residuals

#Variabilidad explicada por el factor (Parcelas). 
#Matriz suma de cuadrados y productos cruzados del factor (SCOCF)
F
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento     775117.50    117453.215 46685.9314    12454.1828
## Altura_planta   117453.21     17945.611  7088.4991     1891.9298
## N_macollos       46685.93      7088.499  2823.8935      754.7993
## Humedad_grano    12454.18      1891.930   754.7993      202.1265
#Variabilidad explicada por los Variedad. Matriz suma de cuadrados
#y productos cruzados de Variedad (SCOCB)
B
##               Rendimiento Altura_planta  N_macollos Humedad_grano
## Rendimiento    2749.86613    198.002951 -195.915882    -51.823991
## Altura_planta   198.00295    190.502681    1.373657     27.089926
## N_macollos     -195.91588      1.373657  116.887804     -9.150788
## Humedad_grano   -51.82399     27.089926   -9.150788     24.619267
#Variabilidad residual. Matriz suma de cuadrados y productos cruzados
#del residual (SCOCR)
W
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento   898030.9298     1391.3188 -1168.1051      519.2285
## Altura_planta   1391.3188    24040.8228  -169.2603      269.9063
## N_macollos     -1168.1051     -169.2603  4112.4261      -35.4791
## Humedad_grano    519.2285      269.9063   -35.4791      952.3032
#Variabilidad Total. Matriz suma de cuadrados y productos cruzados
#total (SCOCT) del factor 
T = F + B + W
T
##               Rendimiento Altura_planta N_macollos Humedad_grano
## Rendimiento    1675898.30    119042.537 45321.9104    12921.5873
## Altura_planta   119042.54     42176.937  6920.6125     2188.9261
## N_macollos       45321.91      6920.612  7053.2075      710.1694
## Humedad_grano    12921.59      2188.926   710.1694     1179.0490
  • Bondad de ajuste

Se utilizó el determinante de las matrices para calcular la proporción de la variabilidad total explicada por los factores.

#Bondad de ajuste. Un valor proximo a 1 indica que la mayor parte
#de la variabilidad total puede atribuirse al factor, mientras que
#un valor proximo a 0 significa que el factor explica muy poco
#de esa variabilidad total.

eta2 = 1 - det(B + W)/det(T)
eta2
## [1] 0.7136257

Conclusión : Este valor indica que aproximadamente el 73.13% de la variabilidad total en las variables de respuesta puede atribuirse al efecto conjunto de los factores Variedad y Parcela.

4.CONTRASTES MULTIVARIADOS DEL MODELO COMPLETO

El objetivo es evaluar si existen diferencias significativas entre variedades de cultivo en varias variables respuesta (Rendimiento, Altura de planta, Número de macollos, Humedad del grano), y si el factor Parcela (como posible bloque) tiene efectos significativos sobre estas variables, justificando su inclusión como factor de bloqueo.

  • Prueba utilizada: Pillai, Wilks, Hotelling-Lawley, Roy.

    Hipótesis para el factor Parcela:

    • H₀:Los vectores de medias poblacionales para las diferentes parcelas son iguales.

    • H₁: Al menos un vector de medias es diferente.

    Hipótesis para el factor Variedad (bloqueo):

    • H₀: No existe diferencia entre variedades.

    • H₁:: Existen diferencias entre variedades (se justifica el bloqueo).

summary(modelo, test = "Pillai")
##            Df  Pillai approx F num Df den Df    Pr(>F)    
## Variedad    4 0.72084   54.187     16   3944 < 2.2e-16 ***
## Parcela     9 0.06296    1.752     36   3944  0.003685 ** 
## Residuals 986                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(modelo, test = "Wilks")
##            Df   Wilks approx F num Df den Df    Pr(>F)    
## Variedad    4 0.28391   95.753     16 3003.8 < 2.2e-16 ***
## Parcela     9 0.93824    1.756     36 3685.5  0.003562 ** 
## Residuals 986                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(modelo, test = "Hotelling-Lawley")
##            Df Hotelling-Lawley approx F num Df den Df    Pr(>F)    
## Variedad    4          2.50555   153.70     16   3926 < 2.2e-16 ***
## Parcela     9          0.06455     1.76     36   3926  0.003443 ** 
## Residuals 986                                                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(modelo,test = "Roy")
##            Df     Roy approx F num Df den Df    Pr(>F)    
## Variedad    4 2.49889   615.98      4    986 < 2.2e-16 ***
## Parcela     9 0.03155     3.46      9    986 0.0003284 ***
## Residuals 986                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Conclusión multivariada general El factor Variedad presenta diferencias estadísticamente significativas en el conjunto de variables multivariadas. Esto indica que al menos una variedad difiere significativamente de las demás, justificando el uso de análisis multivariado.

El factor Parcela también resultó significativo en todos los tests multivariados. Esto sugiere que el efecto de parcela (bloqueo) es relevante, y se justifica su inclusión en el modelo para controlar la variabilidad experimental.

5. Resultado univariados (ANOVA por variable respuesta)

#Para cada variable respuesta
summary.aov(modelo)
##  Response Rendimiento :
##              Df Sum Sq Mean Sq  F value Pr(>F)    
## Variedad      4 775118  193779 212.7616 <2e-16 ***
## Parcela       9   2750     306   0.3355 0.9633    
## Residuals   986 898031     911                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Altura_planta :
##              Df  Sum Sq Mean Sq  F value Pr(>F)    
## Variedad      4 17945.6  4486.4 184.0034 <2e-16 ***
## Parcela       9   190.5    21.2   0.8681 0.5534    
## Residuals   986 24040.8    24.4                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response N_macollos :
##              Df Sum Sq Mean Sq  F value    Pr(>F)    
## Variedad      4 2823.9  705.97 169.2650 < 2.2e-16 ***
## Parcela       9  116.9   12.99   3.1139  0.001057 ** 
## Residuals   986 4112.4    4.17                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Humedad_grano :
##              Df Sum Sq Mean Sq F value    Pr(>F)    
## Variedad      4 202.13  50.532 52.3197 < 2.2e-16 ***
## Parcela       9  24.62   2.735  2.8323  0.002701 ** 
## Residuals   986 952.30   0.966                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Conclusión univariada general El factor Variedad tiene un efecto altamente significativo en todas las variables respuesta.

El factor Parcela presenta un efecto significativo solo en N° de macollos y Humedad del grano, pero con efectos relativamente bajos, lo que sugiere que no hay una justificación fuerte para su uso como bloque.

6. ANÁLISIS MANOVA

a.COMPARACIÓN POR PARES

Este análisis busca evaluar si realmente Parcela tiene un efecto importante en un subconjunto de los datos (P1 y P3).

  • Prueba utilizada: Pillai, Wilks, Hotelling-Lawley, Roy.

    Hipótesis Para el factor Parcela (P1 vs P3):

    • H₀:Los vectores de medias para las parcelas P1 y P3 son iguales.

    • H₁:Al menos un vector de medias difiere entre las parcelas P1 y P3.

    Hipótesis Para el factor Parcela (bloqueo:):

    • H₀:Los vectores de medias para las distintas variedades son iguales.

    • H₁:Al menos un vector de medias difiere entre variedades.

modelo1 = manova(cbind(Rendimiento, Altura_planta,
                          N_macollos, Humedad_grano) ~ Variedad + Parcela, data = datos,
                 subset = Parcela %in% c("P1", "P3"))

summary(modelo1, test = "Pillai")
##            Df  Pillai approx F num Df den Df Pr(>F)    
## Variedad    4 0.77046  11.5704     16    776 <2e-16 ***
## Parcela     1 0.02629   1.2894      4    191 0.2756    
## Residuals 194                                          
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(modelo1, test = "Wilks")
##            Df   Wilks approx F num Df den Df Pr(>F)    
## Variedad    4 0.27270  19.3530     16 584.15 <2e-16 ***
## Parcela     1 0.97371   1.2894      4 191.00 0.2756    
## Residuals 194                                          
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(modelo1, test = "Hotelling-Lawley")
##            Df Hotelling-Lawley approx F num Df den Df Pr(>F)    
## Variedad    4           2.5098  29.7253     16    758 <2e-16 ***
## Parcela     1           0.0270   1.2894      4    191 0.2756    
## Residuals 194                                                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(modelo1, test = "Roy")
##            Df    Roy approx F num Df den Df Pr(>F)    
## Variedad    4 2.4461  118.636      4    194 <2e-16 ***
## Parcela     1 0.0270    1.289      4    191 0.2756    
## Residuals 194                                         
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary.aov(modelo1)
##  Response Rendimiento :
##              Df Sum Sq Mean Sq F value Pr(>F)    
## Variedad      4 142412   35603 43.0516 <2e-16 ***
## Parcela       1    126     126  0.1529 0.6962    
## Residuals   194 160435     827                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Altura_planta :
##              Df Sum Sq Mean Sq F value Pr(>F)    
## Variedad      4 3794.4  948.60 41.2802 <2e-16 ***
## Parcela       1   22.1   22.11  0.9624 0.3278    
## Residuals   194 4458.0   22.98                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response N_macollos :
##              Df Sum Sq Mean Sq F value Pr(>F)    
## Variedad      4 513.60 128.400 30.6767 <2e-16 ***
## Parcela       1   6.07   6.069  1.4499   0.23    
## Residuals   194 812.00   4.186                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Humedad_grano :
##              Df  Sum Sq Mean Sq F value    Pr(>F)    
## Variedad      4  48.450 12.1126 15.0259 1.023e-10 ***
## Parcela       1   2.548  2.5479  3.1606     0.077 .  
## Residuals   194 156.387  0.8061                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Decisión sobre las hipótesis

Para Parcela: dado que p-valor > 0.05 en todos los tests, no se rechaza H0. Es decir, no hay diferencias significativas entre las parcelas P1 y P3 en el vector de respuestas.

Para Variedad: se rechaza H0 con evidencia muy fuerte, por lo tanto, sí hay diferencias entre las variedades.

Conclusión específica del análisis restringido

El bloqueo por Parcela no es necesario ni útil al evaluar únicamente P1 y P3, ya que no hay diferencias significativas entre ellas.

Variedad sigue mostrando un efecto significativo fuerte, lo que reafirma su importancia como factor de estudio.

b.COMPARACIÓN GENERAL POR PARES

  • Prueba utilizada: Pillai, Wilks, Hotelling-Lawley, Roy.

    Hipótesis para el factor variedad:

    • H₀: Las dos parcelas en comparación no presentan diferencias multivariadas significativas.

    • H₁:Las dos parcelas en comparación presentan diferencias multivariadas significativas.

    Parc <- c("P1", "P2", "P3", "P4","P5", "P6", "P7", "P8","P9","P10")
    comb <- t(combn(length(Parc), 2))
    
    for(i in 1:nrow(comb)){
      modelo.comp = manova(cbind(Rendimiento, Altura_planta, N_macollos, Humedad_grano) ~
                        Variedad + Parcela, data = datos,
                       subset = Parcela %in% Parc[comb[i,]])
      print(paste("Trat: ",Parc[comb[i,]][1], "y", Parc[comb[i,]][2]))
      print(summary(modelo.comp, test = "Pillai"))
      cat("\n")
    }
    ## [1] "Trat:  P1 y P2"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.78501  11.8423     16    776 <2e-16 ***
    ## Parcela     1 0.02115   1.0318      4    191 0.3921    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P1 y P3"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.77046  11.5704     16    776 <2e-16 ***
    ## Parcela     1 0.02629   1.2894      4    191 0.2756    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P1 y P4"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.74119  11.0309     16    776 <2e-16 ***
    ## Parcela     1 0.03821   1.8971      4    191 0.1126    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P1 y P5"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.76736  11.5128     16    776 <2e-16 ***
    ## Parcela     1 0.02437   1.1927      4    191 0.3154    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P1 y P6"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.80918   12.299     16    776 <2e-16 ***
    ## Parcela     1 0.00981    0.473      4    191 0.7555    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P1 y P7"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.78455  11.8337     16    776 <2e-16 ***
    ## Parcela     1 0.02612   1.2805      4    191 0.2791    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P1 y P8"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.75323  11.2518     16    776 <2e-16 ***
    ## Parcela     1 0.02815   1.3832      4    191 0.2413    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P1 y P9"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.76537  11.4760     16    776 <2e-16 ***
    ## Parcela     1 0.03507   1.7354      4    191 0.1438    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P1 y P10"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.83646  12.8238     16    776 <2e-16 ***
    ## Parcela     1 0.01133   0.5474      4    191 0.7011    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P2 y P3"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.75917  11.3612     16    776 <2e-16 ***
    ## Parcela     1 0.02504   1.2263      4    191 0.3011    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P2 y P4"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.72754  10.7826     16    776 <2e-16 ***
    ## Parcela     1 0.01740   0.8457      4    191 0.4978    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P2 y P5"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.75013  11.1948     16    776 <2e-16 ***
    ## Parcela     1 0.03775   1.8732      4    191 0.1168    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P2 y P6"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.79209  11.9755     16    776 <2e-16 ***
    ## Parcela     1 0.01165   0.5628      4    191   0.69    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P2 y P7"
    ##            Df  Pillai approx F num Df den Df    Pr(>F)    
    ## Variedad    4 0.77985  11.7456     16    776 < 2.2e-16 ***
    ## Parcela     1 0.06858   3.5158      4    191  0.008537 ** 
    ## Residuals 194                                             
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P2 y P8"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.77536  11.6618     16    776 <2e-16 ***
    ## Parcela     1 0.00774   0.3727      4    191 0.8279    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P2 y P9"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.79693  12.0669     16    776 <2e-16 ***
    ## Parcela     1 0.03328   1.6437      4    191 0.1649    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P2 y P10"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.80098  12.1436     16    776 <2e-16 ***
    ## Parcela     1 0.05002   2.5142      4    191  0.043 *  
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P3 y P4"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.71839  10.6173     16    776 <2e-16 ***
    ## Parcela     1 0.01664   0.8081      4    191 0.5214    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P3 y P5"
    ##            Df  Pillai approx F num Df den Df    Pr(>F)    
    ## Variedad    4 0.73820  10.9764     16    776 < 2.2e-16 ***
    ## Parcela     1 0.07718   3.9937      4    191  0.003903 ** 
    ## Residuals 194                                             
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P3 y P6"
    ##            Df  Pillai approx F num Df den Df  Pr(>F)    
    ## Variedad    4 0.79779  12.0831     16    776 < 2e-16 ***
    ## Parcela     1 0.04173   2.0796      4    191 0.08505 .  
    ## Residuals 194                                           
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P3 y P7"
    ##            Df  Pillai approx F num Df den Df  Pr(>F)    
    ## Variedad    4 0.78097  11.7665     16    776 < 2e-16 ***
    ## Parcela     1 0.05456   2.7554      4    191 0.02926 *  
    ## Residuals 194                                           
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P3 y P8"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.75800  11.3395     16    776 <2e-16 ***
    ## Parcela     1 0.03872   1.9235      4    191 0.1081    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P3 y P9"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.73783  10.9696     16    776 <2e-16 ***
    ## Parcela     1 0.01244   0.6017      4    191 0.6619    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P3 y P10"
    ##            Df  Pillai approx F num Df den Df  Pr(>F)    
    ## Variedad    4 0.77570  11.6681     16    776 < 2e-16 ***
    ## Parcela     1 0.05367   2.7082      4    191 0.03156 *  
    ## Residuals 194                                           
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P4 y P5"
    ##            Df  Pillai approx F num Df den Df    Pr(>F)    
    ## Variedad    4 0.79971  12.1195     16    776 < 2.2e-16 ***
    ## Parcela     1 0.08004   4.1543      4    191  0.002997 ** 
    ## Residuals 194                                             
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P4 y P6"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.75032  11.1982     16    776 <2e-16 ***
    ## Parcela     1 0.03495   1.7294      4    191 0.1451    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P4 y P7"
    ##            Df  Pillai approx F num Df den Df  Pr(>F)    
    ## Variedad    4 0.75537   11.291     16    776 < 2e-16 ***
    ## Parcela     1 0.04736    2.374      4    191 0.05368 .  
    ## Residuals 194                                           
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P4 y P8"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.74562  11.1120     16    776 <2e-16 ***
    ## Parcela     1 0.01185   0.5725      4    191 0.6829    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P4 y P9"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.71801  10.6105     16    776 <2e-16 ***
    ## Parcela     1 0.00880   0.4241      4    191 0.7911    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P4 y P10"
    ##            Df  Pillai approx F num Df den Df  Pr(>F)    
    ## Variedad    4 0.77177  11.5948     16    776 < 2e-16 ***
    ## Parcela     1 0.05866   2.9756      4    191 0.02053 *  
    ## Residuals 194                                           
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P5 y P6"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.77810  11.7129     16    776 <2e-16 ***
    ## Parcela     1 0.01136   0.5488      4    191 0.7001    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P5 y P7"
    ##            Df  Pillai approx F num Df den Df    Pr(>F)    
    ## Variedad    4 0.78193  11.7847     16    776 < 2.2e-16 ***
    ## Parcela     1 0.07529   3.8879      4    191  0.004642 ** 
    ## Residuals 194                                             
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P5 y P8"
    ##            Df  Pillai approx F num Df den Df  Pr(>F)    
    ## Variedad    4 0.77050  11.5713     16    776 < 2e-16 ***
    ## Parcela     1 0.04389   2.1918      4    191 0.07143 .  
    ## Residuals 194                                           
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P5 y P9"
    ##            Df  Pillai approx F num Df den Df    Pr(>F)    
    ## Variedad    4 0.73789  10.9707     16    776 < 2.2e-16 ***
    ## Parcela     1 0.10189   5.4171      4    191 0.0003747 ***
    ## Residuals 194                                             
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P5 y P10"
    ##            Df  Pillai approx F num Df den Df  Pr(>F)    
    ## Variedad    4 0.80519  12.2234     16    776 < 2e-16 ***
    ## Parcela     1 0.04119   2.0516      4    191 0.08881 .  
    ## Residuals 194                                           
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P6 y P7"
    ##            Df  Pillai approx F num Df den Df  Pr(>F)    
    ## Variedad    4 0.80696  12.2571     16    776 < 2e-16 ***
    ## Parcela     1 0.05762   2.9197      4    191 0.02247 *  
    ## Residuals 194                                           
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P6 y P8"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.79644  12.0576     16    776 <2e-16 ***
    ## Parcela     1 0.01432   0.6937      4    191 0.5971    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P6 y P9"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.81416  12.3944     16    776 <2e-16 ***
    ## Parcela     1 0.04252   2.1206      4    191 0.0798 .  
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P6 y P10"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.79398  12.0112     16    776 <2e-16 ***
    ## Parcela     1 0.03006   1.4797      4    191 0.2099    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P7 y P8"
    ##            Df  Pillai approx F num Df den Df  Pr(>F)    
    ## Variedad    4 0.76720  11.5100     16    776 < 2e-16 ***
    ## Parcela     1 0.04538   2.2698      4    191 0.06323 .  
    ## Residuals 194                                           
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P7 y P9"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.76977  11.5577     16    776 <2e-16 ***
    ## Parcela     1 0.03186   1.5716      4    191 0.1835    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P7 y P10"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.82999   12.699     16    776 <2e-16 ***
    ## Parcela     1 0.01024    0.494      4    191 0.7401    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P8 y P9"
    ##            Df  Pillai approx F num Df den Df Pr(>F)    
    ## Variedad    4 0.77083  11.5774     16    776 <2e-16 ***
    ## Parcela     1 0.02733   1.3417      4    191  0.256    
    ## Residuals 194                                          
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P8 y P10"
    ##            Df  Pillai approx F num Df den Df  Pr(>F)    
    ## Variedad    4 0.76078  11.3909     16    776 < 2e-16 ***
    ## Parcela     1 0.04300   2.1458      4    191 0.07674 .  
    ## Residuals 194                                           
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## [1] "Trat:  P9 y P10"
    ##            Df  Pillai approx F num Df den Df  Pr(>F)    
    ## Variedad    4 0.76825  11.5294     16    776 < 2e-16 ***
    ## Parcela     1 0.04856   2.4373      4    191 0.04857 *  
    ## Residuals 194                                           
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretación:

El bloqueo por parcela controla parte de la variabilidad experimental, pero no garantiza homogeneidad total entre todas las parcelas. Hay subconjuntos (por ejemplo, P2–P7 o P5–P9) donde el bloque ejerce un efecto significativo que habría que investigar o ajustar en el modelo. Sin embargo, la Variedad mantiene un efecto fuertemente significativo en todas las comparaciones.

7 - Experimento factorial en DCA

Presentación de datos

Este dataset simula los resultados de un estudio agrícola de 1,000 parcelas experimentales donde se evaluó el efecto de diferentes prácticas de manejo en el rendimiento y calidad de un cultivo.

Descripción de Variables

1. Variables Factoriales (Tratamientos)

Variable Tipo N iveles/Descripción
fertilizante Cualitativa/ Categórica

3 niveles :

  • Orgánico (abono verde)

  • Químico (NPK)

  • Mixto (50/50

riego Cualitativa/ Categórica

3 sistemas:

  • Diario (10mm/día)

  • Cada 3 días (20mm/día)

  • Por humedad

variedad Cualitativa/ Categórica

3 genotipos:

  • Variedad A (alto rendimiento)

  • B (resistente)

  • C (local)

2. Variables respuestas

Variable Tipo Descripción
rendimiento Cuantitativo Producción del cultivo (Kg/m^2) (variable principal de interés)
calidad Cuantitativo

Puntuación de calidad (1-10) basada en:

  • Tamaño

  • Color

  • Sanidad

Análisis exploratorio inicial

1. Balance de Diseño Experimental:

table(datos$fertilizante, datos$riego, datos$variedad) %>% 
  ftable() %>% 
  print() 
##                       Variedad A Variedad B Variedad C
##                                                       
## Mixto    Cada 3 días          22         31         32
##          Diario               26         20         28
##          Por humedad          22         16         18
## Orgánico Cada 3 días          32         58         36
##          Diario               46         50         41
##          Por humedad          45         54         39
## Químico  Cada 3 días          39         39         52
##          Diario               35         49         44
##          Por humedad          49         38         39

Se puede observar que existe mayor representación de fertilizantes Orgánicos (promedio 45 obs/grupo vs 34 en Mixto), como vemos en la combinación de Orgánico con variedad B que es la mas frecuente.

2. Visualización de distribución de rendimiento:

La Variedad A tiende a mostrar mayores rendimientos que B y C, especialmente cuando se usan fertilizantes químicos o mixtos. Mientras que la Variedad C también presenta buenos rendimientos, pero con mayor variabilidad. Por ultimo, la Variedad B muestra un rendimiento ligeramente inferior, especialmente con fertilizante orgánico.

El fertilizante químico fue el más efectivo en la mayoría de las combinaciones, seguido por el mixto. El orgánico mostró menores rendimientos, aunque con algunas excepciones. En cuanto a la frecuencia de riego, el riego diario fue el más favorable, mientras que el riego por humedad presentó mayor variabilidad.

Hipotesis estadística

\(H_0:\) No existen diferencias significativas entre los niveles de los factores ni su interacción sobre la variable de respuesta.

\(H_i:\) Al menos uno de los factores o la interacción entre ellos tiene un efecto significativo sobre la variable de respuesta.

Supuestos

1. Supuesto de normalidad multivariada

##       trat1       trat2       trat3       trat4       trat5       trat6 
## 0.270446245 0.467567299 0.711033305 0.346001231 0.194226103 0.105922774 
##       trat7       trat8       trat9      trat10      trat11      trat12 
## 0.114713276 0.266449117 0.874305195 0.044273923 0.070207578 0.166843177 
##      trat13      trat14      trat15      trat16      trat17      trat18 
## 0.817931360 0.953897914 0.944319575 0.729352403 0.303234824 0.009384424 
##      trat19      trat20      trat21      trat22      trat23      trat24 
## 0.051334998 0.130509390 0.236006178 0.273947392 0.791847767 0.202757963 
##      trat25      trat26      trat27 
## 0.131627601 0.277312808 0.026309558

Aunque el 11.11% de tus grupos (3/27 combinaciones) presentan no-normalidad multivariada (p < 0.05), el Diseño Completamente al Azar (DCA) y el análisis factorial puede ser aplicado.

2. Supuesto de homogeneidad de matrices de varianza-covarianza

## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  Y
## Chi-Sq (approx.) = 19.272, df = 24, p-value = 0.7373

El test de Box’s M no mostró evidencia de heterogeneidad en las matrices de covarianza entre los grupos, cumpliendo así un supuesto clave para el MANOVA. Esto indica que la relación entre rendimiento y calidad fue estable en todas las combinaciones de fertilizante y riego, respaldando la comparabilidad de los efectos entre tratamientos.

3. Supuesto de variables dependientes correlacionadas

##        chisq      p_valor           df 
## 1.633755e+02 2.070995e-37 1.000000e+00

La prueba de esfericidad de Bartlett mostró una correlación altamente significativa entre rendimiento y calidad (χ²(1) = 163.38, p < 0.001), validando el uso de MANOVA para analizar estos resultados de manera conjunta. Esto indica que las variables respuesta comparten información relevante sobre el efecto de los tratamientos.

MANOVA factorial

modelo_manova <- manova(cbind(rendimiento, calidad) ~ fertilizante * riego * variedad, 
                        data = datos)
Obtención de matrices SSCP
Matrices <- summary(modelo_manova)$SS
FFertilizante <- Matrices$fertilizante
FRiego <- Matrices$riego
FVariedad <- Matrices$variedad
FInteraccion <- Matrices$`fertilizante:riego:variedad`
W <- Matrices$Residuals
W
##             rendimiento   calidad
## rendimiento   471.87556  67.32037
## calidad        67.32037 123.42405
Variabilidad total
T <- FFertilizante + FRiego + FVariedad + FInteraccion + W

T
##             rendimiento  calidad
## rendimiento    597.7908 111.4579
## calidad        111.4579 140.3726
Bondad de ajuste
eta2 <- 1 - (det(W)/det(T))
eta2
## [1] 0.2487297

El coeficiente eta² multivariado obtenido fue de 0.249 aproximadamente. Este valor indica que el 24.9% de la variabilidad total del rendimiento puede ser explicada por el efecto conjunto de los factores tipo de fertilizante, frecuencia de riego y su interacción.

Esto sugiere que el modelo factorial 3×3 tiene un efecto moderado sobre el rendimiento, siendo capaz de explicar una proporción considerable de la variabilidad observada, aunque también existe una parte importante atribuida al error o a otras fuentes no consideradas.

Pruebas multivariadas

summary(modelo_manova, test = "Pillai")
##                              Df   Pillai approx F num Df den Df    Pr(>F)    
## fertilizante                  2 0.106359   27.325      4   1946 < 2.2e-16 ***
## riego                         2 0.128684   33.455      4   1946 < 2.2e-16 ***
## variedad                      2 0.054130   13.533      4   1946 6.956e-11 ***
## fertilizante:riego            4 0.010774    1.317      8   1946    0.2299    
## fertilizante:variedad         4 0.006837    0.834      8   1946    0.5722    
## riego:variedad                4 0.007809    0.954      8   1946    0.4709    
## fertilizante:riego:variedad   8 0.004935    0.301     16   1946    0.9966    
## Residuals                   973                                              
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(modelo_manova, test = "Wilks")
##                              Df   Wilks approx F num Df den Df    Pr(>F)    
## fertilizante                  2 0.89372   28.085      4   1944 < 2.2e-16 ***
## riego                         2 0.87172   34.533      4   1944 < 2.2e-16 ***
## variedad                      2 0.94591   13.703      4   1944 5.061e-11 ***
## fertilizante:riego            4 0.98924    1.318      8   1944    0.2296    
## fertilizante:variedad         4 0.99317    0.834      8   1944    0.5725    
## riego:variedad                4 0.99220    0.953      8   1944    0.4713    
## fertilizante:riego:variedad   8 0.99507    0.301     16   1944    0.9966    
## Residuals                   973                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(modelo_manova, test = "Hotelling-Lawley")
##                              Df Hotelling-Lawley approx F num Df den Df
## fertilizante                  2         0.118825   28.845      4   1942
## riego                         2         0.146696   35.610      4   1942
## variedad                      2         0.057146   13.872      4   1942
## fertilizante:riego            4         0.010865    1.319      8   1942
## fertilizante:variedad         4         0.006869    0.834      8   1942
## riego:variedad                4         0.007849    0.953      8   1942
## fertilizante:riego:variedad   8         0.004949    0.300     16   1942
## Residuals                   973                                        
##                                Pr(>F)    
## fertilizante                < 2.2e-16 ***
## riego                       < 2.2e-16 ***
## variedad                    3.685e-11 ***
## fertilizante:riego             0.2293    
## fertilizante:variedad          0.5728    
## riego:variedad                 0.4717    
## fertilizante:riego:variedad    0.9966    
## Residuals                                
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Según los resultados se observa que al menos una de las combinaciones de los factores evaluados, tiene un efecto estadísticamente significativo sobre el rendimiento. En particular, la prueba de Wilks’ Lambda presentó un valor cercano a 0, lo que sugiere que una parte importante de la variabilidad en el rendimiento es explicada por los factores del diseño factorial. Esto se refuerza con los valores de significancia (p-valor) menores a 0.05 en las pruebas aplicadas, lo que permite rechazar la hipótesis nula de que no existe efecto de los factores sobre la variable respuesta.

Estos resultados apoyan la importancia del manejo conjunto de fertilización y riego para maximizar el rendimiento, de acuerdo con el diseño experimental planteado.

Visualización de resultados

Gráfico de interacción para rendimiento

En el gráfico podemos observar que el fertilizante químico junto con riego diario genera los mayores rendimientos, especialmente en las variedades A y C, mientras que el fertilizante orgánico presenta los valores más bajos en la mayoría de las combinaciones. La variedad B muestra menor variabilidad entre tratamientos, sugiriendo una menor sensibilidad a los cambios en fertilización y riego. Estos resultados indican que la elección del manejo agronómico óptimo depende tanto del tipo de insumos como de la variedad cultivada.

Gráfico de calidad por tratamiento

En el gráfico se evalua tres tipos de fertilizantes (Mixto, Orgánico y Químico) y tres frecuencias de riego (Cada 3 días, Diario y Por humedad). Se observa que los tratamientos con riego diario, independientemente del tipo de fertilizante, presentan medianas de calidad más elevadas y menor dispersión, destacando el tratamiento Químico-Diario como uno de los más consistentes. Por otro lado, las combinaciones con fertilizante orgánico y riego por humedad o cada 3 días tienden a tener puntuaciones más bajas y mayor variabilidad, lo que indica una menor estabilidad en la calidad del producto. Estos resultados sugieren que existe una interacción entre fertilización y riego que influye significativamente en la calidad, siendo el manejo con fertilizante químico y riego diario la opción más favorable en términos de consistencia y calidad del cultivo.

Conclusión

Los resultados muestran que al menos uno de los factores (fertilizante, riego o variedad) tiene un efecto significativo sobre las variables de respuesta (rendimiento y calidad). Esto se evidencia por los valores de p (< 0.05) en las pruebas de Pillai, Wilks y Hotelling-Lawley para estos factores principales. Por lo tanto, se rechaza la hipótesis nula (\(H_0:\)) en favor de la hipótesis alternativa (\(H_i:\)).

Se concluye que los factores de fertilizante, riego y variedad tienen efectos significativos individuales sobre el rendimiento y la calidad del cultivo, pero no se encontraron interacciones significativas entre ellos. Estos hallazgos respaldan la importancia de seleccionar prácticas de manejo adecuadas para optimizar la producción agrícola.

8 - Experimento factorial en DBCA

1. Preparación de los Datos

Se presenta un análisis MANOVA factorial en un Diseño en Bloques Completos al Azar (DBCA), aplicado a un conjunto de datos simulados. El objetivo es evaluar el efecto combinado de tres fertilizantes y dos tipos de riego sobre variables agronómicas clave del cultivo de arroz, controlando la variabilidad mediante un bloque representado por el tipo de suelo.

El experimento incluye:

  • Factores:
    • Fertilizante: con tres niveles (Nitro, Fosfo, Mix).
    • Riego: con dos niveles (Goteo, Aspersión).
  • Bloque:
    • Tipo de Suelo: con cuatro niveles (Arcilloso, Arenoso, Franco, Limoso).
  • Variables de respuesta:
    • Rendimiento (kg/ha)
    • Altura de plantas (cm)
    • Humedad del grano (%)
# Leer el archivo CSV desde el directorio actual
cultivos <- read.csv("cultivos.csv")

# Verificamos la estructura del data frame
str(cultivos)
## 'data.frame':    1500 obs. of  6 variables:
##  $ Fertilizante  : chr  "Mix" "Mix" "Mix" "Fosfo" ...
##  $ Riego         : chr  "Goteo" "Aspersión" "Goteo" "Goteo" ...
##  $ Soil_Type     : chr  "Arcilloso" "Arcilloso" "Franco" "Arcilloso" ...
##  $ Rendimiento_kg: num  5850 5230 5460 4492 5435 ...
##  $ Altura_plantas: num  252 220 227 231 239 ...
##  $ Humedad_grano : num  19 19.7 17.9 18.9 20 ...
# Convertimos a factores
cultivos$Fertilizante <- as.factor(cultivos$Fertilizante)
cultivos$Riego <- as.factor(cultivos$Riego)
cultivos$Soil_Type <- as.factor(cultivos$Soil_Type)

# Revisamos la estructura
str(cultivos)
## 'data.frame':    1500 obs. of  6 variables:
##  $ Fertilizante  : Factor w/ 3 levels "Fosfo","Mix",..: 2 2 2 1 2 1 1 1 2 3 ...
##  $ Riego         : Factor w/ 2 levels "Aspersión","Goteo": 2 1 2 2 1 2 1 2 1 2 ...
##  $ Soil_Type     : Factor w/ 4 levels "Arcilloso","Arenoso",..: 1 1 3 1 2 4 3 3 3 4 ...
##  $ Rendimiento_kg: num  5850 5230 5460 4492 5435 ...
##  $ Altura_plantas: num  252 220 227 231 239 ...
##  $ Humedad_grano : num  19 19.7 17.9 18.9 20 ...
head(cultivos)
##   Fertilizante     Riego Soil_Type Rendimiento_kg Altura_plantas Humedad_grano
## 1          Mix     Goteo Arcilloso       5849.861       252.2244      18.95561
## 2          Mix Aspersión Arcilloso       5230.052       219.6283      19.68588
## 3          Mix     Goteo    Franco       5460.125       227.2786      17.92613
## 4        Fosfo     Goteo Arcilloso       4491.870       231.3112      18.86013
## 5          Mix Aspersión   Arenoso       5435.110       238.5381      20.03358
## 6        Fosfo     Goteo    Limoso       5244.703       202.4947      17.75968

2. Supuesto de Normalidad Multivariada

Aquí evaluamos si las variables dependientes se distribuyen normalmente dentro de cada combinación de niveles de los factores Fertilizante y Riego, utilizando el test de Shapiro-Wilk multivariado (mshapiro.test).

library(tidyverse)
library(mvnormtest)
library(dplyr)
# Test de normalidad multivariada por combinación de Fertilizante y Riego

trat1 <- cultivos %>%
  filter(Fertilizante == "Mix", Riego == "Goteo") %>%
  dplyr::select(Rendimiento_kg, Altura_plantas, Humedad_grano)

trat2 <- cultivos %>%
  filter(Fertilizante == "Mix", Riego == "Aspersión") %>%
  dplyr::select(Rendimiento_kg, Altura_plantas, Humedad_grano)

trat3 <- cultivos %>%
  filter(Fertilizante == "Fosfo", Riego == "Goteo") %>%
  dplyr::select(Rendimiento_kg, Altura_plantas, Humedad_grano)

trat4 <- cultivos %>%
  filter(Fertilizante == "Fosfo", Riego == "Aspersión") %>%
  dplyr::select(Rendimiento_kg, Altura_plantas, Humedad_grano)

trat5 <- cultivos %>%
  filter(Fertilizante == "Nitro", Riego == "Goteo") %>%
  dplyr::select(Rendimiento_kg, Altura_plantas, Humedad_grano)

trat6 <- cultivos %>%
  filter(Fertilizante == "Nitro", Riego == "Aspersión") %>%
  dplyr::select(Rendimiento_kg, Altura_plantas, Humedad_grano)



# Ejecutamos la prueba de normalidad multivariada
mshapiro.test(t(trat1))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.99329, p-value = 0.2794
mshapiro.test(t(trat2))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.99416, p-value = 0.4591
mshapiro.test(t(trat3))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.99098, p-value = 0.1316
mshapiro.test(t(trat4))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.99369, p-value = 0.3925
mshapiro.test(t(trat5))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.9926, p-value = 0.2263
mshapiro.test(t(trat6))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.9886, p-value = 0.05647

La prueba de Shapiro-Wilk aplicada a cada combinación de tratamiento indica que todos los tratamientos (Fertilizante × Riego) sobre las tres variables dependientes cumplen con la normalidad multivariada (valores de p > = 0.05).
Esto valida completamente el uso de MANOVA desde el punto de vista del supuesto de normalidad.

3. Supuesto de Homogeneidad de Matrices Varianza-Covarianza

Se evalúa si las matrices de varianzas y covarianzas son homogéneas entre los grupos definidos por los factores (Fertilizante × Riego), mediante la prueba de Box’s M (boxM).

library(heplots)
heplots::boxM(cbind(Rendimiento_kg, Altura_plantas, Humedad_grano) ~ 
       Fertilizante * Riego, data = cultivos)
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  Y
## Chi-Sq (approx.) = 16.662, df = 30, p-value = 0.9764

El valor de p > 0.05 indica que no se rechaza la hipótesis nula de homogeneidad de matrices, por lo tanto, el supuesto se cumple. Esto respalda la validez del uso del MANOVA.

4. Supuesto de Correlación entre Variables Dependientes (Prueba de Bartlett)

Se aplica la prueba de esfericidad de Bartlett (cortest.bartlett) para confirmar que las variables dependientes están correlacionadas entre sí.

library(psych)
respuestas <- cultivos[, c("Rendimiento_kg", "Altura_plantas", "Humedad_grano")]
cortest.bartlett(cor(respuestas), n = nrow(respuestas))
## $chisq
## [1] 1048.556
## 
## $p.value
## [1] 5.266441e-227
## 
## $df
## [1] 3

La prueba es altamente significativa, por lo que se rechaza la hipótesis de esfericidad. Las variables dependientes están correlacionadas, lo cual justifica plenamente la aplicación de MANOVA.

Grafico de densidad del rendimiento

library(ggplot2)

ggplot(cultivos, aes(x = Rendimiento_kg, fill = Fertilizante)) +
  geom_density(alpha = 0.5) +
  facet_wrap(~Riego) +
  labs(title = "Densidad de Rendimiento según Fertilizante y Riego")

  • Comparación entre Fertilizantes en cada tipo de Riego:
    • Aspersión:
      • Fosfo: tiene una distribución centrada más baja (menor rendimiento), con un pico cerca de 4700 kg.
      • Nitro: tiene su pico alrededor de 4900 kg, ligeramente superior.
      • Mix: parece tener la mayor media, con un pico cercano a 5000–5100 kg.
    • Goteo:
      • Fosfo: sigue estando más bajo, con un pico por debajo de los 5000 kg.
      • Nitro: sube su rendimiento en comparación con aspersión, con su pico hacia los 5100–5200 kg.
      • Mix: se ve claramente desplazado hacia la derecha, con un pico sobre los 5500 kg, indicando un mayor rendimiento.
  • El riego por goteo mejora el rendimiento agrícola en todos los fertilizantes, pero especialmente con el fertilizante Mix.
  • Las curvas tienen formas simétricas, con poca cola; los rendimientos parecen estar distribuidos normalmente dentro de cada grupo.

5. Ajuste del Modelo MANOVA Factorial con Bloque (DBCA)

En esta etapa se ajusta el modelo MANOVA.

Los factores del modelo fueron:
- Fertilizante (3 niveles)
- Riego (2 niveles)
- Soil_Type como bloque (4 niveles)

Considerando las variables respuesta:
- Rendimiento_kg
- Altura_plantas
- Humedad_grano

modelo <- manova(cbind(Rendimiento_kg, Altura_plantas, Humedad_grano) ~ 
                   Fertilizante * Riego + Soil_Type, data = cultivos)
str(modelo)
## List of 13
##  $ coefficients : num [1:9, 1:3] 4571 436 240 443 300 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr [1:9] "(Intercept)" "FertilizanteMix" "FertilizanteNitro" "RiegoGoteo" ...
##   .. ..$ : chr [1:3] "Rendimiento_kg" "Altura_plantas" "Humedad_grano"
##  $ residuals    : num [1:1500, 1:3] 236 223 -278 -522 128 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr [1:1500] "1" "2" "3" "4" ...
##   .. ..$ : chr [1:3] "Rendimiento_kg" "Altura_plantas" "Humedad_grano"
##  $ effects      : num [1:1500, 1:3] -201865 -7635 -3563 -9175 -3154 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr [1:1500] "(Intercept)" "FertilizanteMix" "FertilizanteNitro" "RiegoGoteo" ...
##   .. ..$ : chr [1:3] "Rendimiento_kg" "Altura_plantas" "Humedad_grano"
##  $ rank         : int 9
##  $ fitted.values: num [1:1500, 1:3] 5614 5007 5738 5014 5307 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr [1:1500] "1" "2" "3" "4" ...
##   .. ..$ : chr [1:3] "Rendimiento_kg" "Altura_plantas" "Humedad_grano"
##  $ assign       : int [1:9] 0 1 1 2 3 3 3 4 4
##  $ qr           :List of 5
##   ..$ qr   : num [1:1500, 1:9] -38.7298 0.0258 0.0258 0.0258 0.0258 ...
##   .. ..- attr(*, "dimnames")=List of 2
##   .. .. ..$ : chr [1:1500] "1" "2" "3" "4" ...
##   .. .. ..$ : chr [1:9] "(Intercept)" "FertilizanteMix" "FertilizanteNitro" "RiegoGoteo" ...
##   .. ..- attr(*, "assign")= int [1:9] 0 1 1 2 3 3 3 4 4
##   .. ..- attr(*, "contrasts")=List of 3
##   .. .. ..$ Fertilizante: chr "contr.treatment"
##   .. .. ..$ Riego       : chr "contr.treatment"
##   .. .. ..$ Soil_Type   : chr "contr.treatment"
##   ..$ qraux: num [1:9] 1.03 1.03 1 1.03 1.04 ...
##   ..$ pivot: int [1:9] 1 2 3 4 5 6 7 8 9
##   ..$ tol  : num 1e-07
##   ..$ rank : int 9
##   ..- attr(*, "class")= chr "qr"
##  $ df.residual  : int 1491
##  $ contrasts    :List of 3
##   ..$ Fertilizante: chr "contr.treatment"
##   ..$ Riego       : chr "contr.treatment"
##   ..$ Soil_Type   : chr "contr.treatment"
##  $ xlevels      :List of 3
##   ..$ Fertilizante: chr [1:3] "Fosfo" "Mix" "Nitro"
##   ..$ Riego       : chr [1:2] "Aspersión" "Goteo"
##   ..$ Soil_Type   : chr [1:4] "Arcilloso" "Arenoso" "Franco" "Limoso"
##  $ call         : language manova(cbind(Rendimiento_kg, Altura_plantas, Humedad_grano) ~ Fertilizante *      Riego + Soil_Type, data = cultivos)
##  $ terms        :Classes 'terms', 'formula'  language cbind(Rendimiento_kg, Altura_plantas, Humedad_grano) ~ Fertilizante * Riego +      Soil_Type
##   .. ..- attr(*, "variables")= language list(cbind(Rendimiento_kg, Altura_plantas, Humedad_grano), Fertilizante,      Riego, Soil_Type)
##   .. ..- attr(*, "factors")= int [1:4, 1:4] 0 1 0 0 0 0 1 0 0 0 ...
##   .. .. ..- attr(*, "dimnames")=List of 2
##   .. .. .. ..$ : chr [1:4] "cbind(Rendimiento_kg, Altura_plantas, Humedad_grano)" "Fertilizante" "Riego" "Soil_Type"
##   .. .. .. ..$ : chr [1:4] "Fertilizante" "Riego" "Soil_Type" "Fertilizante:Riego"
##   .. ..- attr(*, "term.labels")= chr [1:4] "Fertilizante" "Riego" "Soil_Type" "Fertilizante:Riego"
##   .. ..- attr(*, "order")= int [1:4] 1 1 1 2
##   .. ..- attr(*, "intercept")= int 1
##   .. ..- attr(*, "response")= int 1
##   .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
##   .. ..- attr(*, "predvars")= language list(cbind(Rendimiento_kg, Altura_plantas, Humedad_grano), Fertilizante,      Riego, Soil_Type)
##   .. ..- attr(*, "dataClasses")= Named chr [1:4] "nmatrix.3" "factor" "factor" "factor"
##   .. .. ..- attr(*, "names")= chr [1:4] "cbind(Rendimiento_kg, Altura_plantas, Humedad_grano)" "Fertilizante" "Riego" "Soil_Type"
##  $ model        :'data.frame':   1500 obs. of  4 variables:
##   ..$ cbind(Rendimiento_kg, Altura_plantas, Humedad_grano): num [1:1500, 1:3] 5850 5230 5460 4492 5435 ...
##   .. ..- attr(*, "dimnames")=List of 2
##   .. .. ..$ : NULL
##   .. .. ..$ : chr [1:3] "Rendimiento_kg" "Altura_plantas" "Humedad_grano"
##   ..$ Fertilizante                                        : Factor w/ 3 levels "Fosfo","Mix",..: 2 2 2 1 2 1 1 1 2 3 ...
##   ..$ Riego                                               : Factor w/ 2 levels "Aspersión","Goteo": 2 1 2 2 1 2 1 2 1 2 ...
##   ..$ Soil_Type                                           : Factor w/ 4 levels "Arcilloso","Arenoso",..: 1 1 3 1 2 4 3 3 3 4 ...
##   ..- attr(*, "terms")=Classes 'terms', 'formula'  language cbind(Rendimiento_kg, Altura_plantas, Humedad_grano) ~ Fertilizante * Riego +      Soil_Type
##   .. .. ..- attr(*, "variables")= language list(cbind(Rendimiento_kg, Altura_plantas, Humedad_grano), Fertilizante,      Riego, Soil_Type)
##   .. .. ..- attr(*, "factors")= int [1:4, 1:4] 0 1 0 0 0 0 1 0 0 0 ...
##   .. .. .. ..- attr(*, "dimnames")=List of 2
##   .. .. .. .. ..$ : chr [1:4] "cbind(Rendimiento_kg, Altura_plantas, Humedad_grano)" "Fertilizante" "Riego" "Soil_Type"
##   .. .. .. .. ..$ : chr [1:4] "Fertilizante" "Riego" "Soil_Type" "Fertilizante:Riego"
##   .. .. ..- attr(*, "term.labels")= chr [1:4] "Fertilizante" "Riego" "Soil_Type" "Fertilizante:Riego"
##   .. .. ..- attr(*, "order")= int [1:4] 1 1 1 2
##   .. .. ..- attr(*, "intercept")= int 1
##   .. .. ..- attr(*, "response")= int 1
##   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
##   .. .. ..- attr(*, "predvars")= language list(cbind(Rendimiento_kg, Altura_plantas, Humedad_grano), Fertilizante,      Riego, Soil_Type)
##   .. .. ..- attr(*, "dataClasses")= Named chr [1:4] "nmatrix.3" "factor" "factor" "factor"
##   .. .. .. ..- attr(*, "names")= chr [1:4] "cbind(Rendimiento_kg, Altura_plantas, Humedad_grano)" "Fertilizante" "Riego" "Soil_Type"
##  - attr(*, "class")= chr [1:5] "manova" "maov" "aov" "mlm" ...
# Pruebas de significancia global
summary(modelo, test = "Pillai")
##                      Df  Pillai approx F num Df den Df    Pr(>F)    
## Fertilizante          2 0.66044   244.87      6   2980 < 2.2e-16 ***
## Riego                 1 0.70429  1182.12      3   1489 < 2.2e-16 ***
## Soil_Type             3 0.13028    22.56      9   4473 < 2.2e-16 ***
## Fertilizante:Riego    2 0.02818     7.10      6   2980 1.588e-07 ***
## Residuals          1491                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(modelo, test = "Wilks")
##                      Df   Wilks approx F num Df den Df    Pr(>F)    
## Fertilizante          2 0.37875   310.16      6   2978 < 2.2e-16 ***
## Riego                 1 0.29571  1182.12      3   1489 < 2.2e-16 ***
## Soil_Type             3 0.86985    23.74      9   3624 < 2.2e-16 ***
## Fertilizante:Riego    2 0.97184     7.14      6   2978 1.423e-07 ***
## Residuals          1491                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(modelo, test = "Hotelling-Lawley")
##                      Df Hotelling-Lawley approx F num Df den Df    Pr(>F)    
## Fertilizante          2          1.53681   381.13      6   2976 < 2.2e-16 ***
## Riego                 1          2.38170  1182.12      3   1489 < 2.2e-16 ***
## Soil_Type             3          0.14947    24.71      9   4463 < 2.2e-16 ***
## Fertilizante:Riego    2          0.02895     7.18      6   2976 1.275e-07 ***
## Residuals          1491                                                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(modelo, test = "Roy")
##                      Df     Roy approx F num Df den Df    Pr(>F)    
## Fertilizante          2 1.46625   728.24      3   1490 < 2.2e-16 ***
## Riego                 1 2.38170  1182.12      3   1489 < 2.2e-16 ***
## Soil_Type             3 0.14846    73.78      3   1491 < 2.2e-16 ***
## Fertilizante:Riego    2 0.02812    13.96      3   1490 5.569e-09 ***
## Residuals          1491                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Análisis univariado por variable dependiente
summary.aov(modelo)
##  Response Rendimiento_kg :
##                      Df    Sum Sq  Mean Sq  F value  Pr(>F)    
## Fertilizante          2  70980802 35490401  422.659 < 2e-16 ***
## Riego                 1  84176708 84176708 1002.470 < 2e-16 ***
## Soil_Type             3  18579100  6193033   73.754 < 2e-16 ***
## Fertilizante:Riego    2   3497520  1748760   20.826 1.2e-09 ***
## Residuals          1491 125198211    83969                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Altura_plantas :
##                      Df Sum Sq Mean Sq  F value Pr(>F)    
## Fertilizante          2 103381   51691 540.5670 <2e-16 ***
## Riego                 1  89830   89830 939.4185 <2e-16 ***
## Soil_Type             3    141      47   0.4927 0.6874    
## Fertilizante:Riego    2    143      71   0.7460 0.4744    
## Residuals          1491 142574      96                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Humedad_grano :
##                      Df  Sum Sq Mean Sq   F value Pr(>F)    
## Fertilizante          2  332.19  166.09  169.0275 <2e-16 ***
## Riego                 1 1491.44 1491.44 1517.7812 <2e-16 ***
## Soil_Type             3    0.24    0.08    0.0809 0.9704    
## Fertilizante:Riego    2    0.01    0.01    0.0062 0.9938    
## Residuals          1491 1465.12    0.98                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

El modelo MANOVA muestra efectos multivariados significativos en cada test para todos los factores, incluyendo la interacción, lo que indica que el tipo de fertilizante, el método de riego y sus combinaciones influyen en conjunto sobre las variables de respuesta.
Esto valida la ejecución de contrastes específicos para identificar las diferencias entre tratamientos y combinaciones.

6. Extracción de Matrices de Suma de Cuadrados y Evaluación de Varianza Explicada

Se calcularon las matrices de suma de cuadrados y productos cruzados (SSCP) para cada fuente de variación, y se usó la razón de determinantes para estimar el TAMAÑO DE EFECTO (BONDAD DE AJUSTE) (eta²).

#Determinacion de la matriz residual y las matrices factoriales 
Matrices <- summary(modelo)$SS

#Variabilidad explicada por el factor(Fertilizante). Matriz suma de cuadrados y 
#productos cruzados del factor (SCOCFFert).
FFert <- Matrices$Fertilizante

#Variabilidad explicada por el factor Riego Matriz suma de cuadrados y 
#productos cruzados del factor Velocidad (SCOCFRiego)
FRiego <- Matrices$Riego

#Variabilidad explicada por la interaccion Fertilizante*Riego Matriz suma de
#cuadrados y productos cruzados de la interaccion Fertilizante*Riego
#(SCOCFertilizante*Riego)
FInteraccion <- Matrices$`Fertilizante:Riego`

#Variabilidad explicada por el Bloque. Matriz suma de cuadrados y productos cruzados
#del Bloque (SCOCBloque)
FBloque <- Matrices$Soil_Type

#Variabilidad residual. Matriz suma de cuadrados y productos cruzados
#del residual (SCOCR)
W <- Matrices$Residuals

# #Variabilidad Total. Matriz suma de cuadrados y productos cruzados total (SCOCT)
T <- FFert + FRiego + FInteraccion + FBloque + W

#Bondad de ajuste
eta2 <- 1 - det(FBloque + W) / det(T); eta2
## [1] 0.8189937

El diseño explica el 81.9% de la variabilidad multivariada, lo cual es excelente. Esto respalda la capacidad explicativa del modelo y justifica la implementación del diseño factorial DBCA.

7. Pruebas de Hipótesis Específicas (Contrastes)

Se realizan contrastes específicos para efectos e interacciones relevantes del modelo, usando la función linearHypothesis() del paquete car.

library(car)

Interacciones de Fertilizante con Riego

linearHypothesis(modelo, "FertilizanteMix:RiegoGoteo = 0")
## 
## Sum of squares and products for the hypothesis:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg     1677117.12   14558.500451 -137.27998949
## Altura_plantas       14558.50     126.377540   -1.19168230
## Humedad_grano         -137.28      -1.191682    0.01123702
## 
## Sum of squares and products for error:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg   125198211.15     26679.1023    11266.1071
## Altura_plantas       26679.10    142573.5247      219.1194
## Humedad_grano        11266.11       219.1194     1465.1196
## 
## Multivariate Tests: 
##                  Df test stat approx F num Df den Df     Pr(>F)    
## Pillai            1 0.0140772 7.086766      3   1489 9.9546e-05 ***
## Wilks             1 0.9859228 7.086766      3   1489 9.9546e-05 ***
## Hotelling-Lawley  1 0.0142782 7.086766      3   1489 9.9546e-05 ***
## Roy               1 0.0142782 7.086766      3   1489 9.9546e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • Existe una interacción significativa entre Mix y Goteo, lo que indica que su efecto combinado tiene un comportamiento único que no puede predecirse sumando sus efectos individuales.
linearHypothesis(modelo, "FertilizanteNitro:RiegoGoteo = 0")
## 
## Sum of squares and products for the hypothesis:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg   258341.88079  -4660.9572517  40.329712717
## Altura_plantas    -4660.95725     84.0921435  -0.727621346
## Humedad_grano        40.32971     -0.7276213   0.006295865
## 
## Sum of squares and products for error:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg   125198211.15     26679.1023    11266.1071
## Altura_plantas       26679.10    142573.5247      219.1194
## Humedad_grano        11266.11       219.1194     1465.1196
## 
## Multivariate Tests: 
##                  Df test stat approx F num Df den Df  Pr(>F)
## Pillai            1 0.0026618 1.324651      3   1489 0.26472
## Wilks             1 0.9973382 1.324651      3   1489 0.26472
## Hotelling-Lawley  1 0.0026689 1.324651      3   1489 0.26472
## Roy               1 0.0026689 1.324651      3   1489 0.26472
  • No hay evidencia suficiente para concluir que la interacción entre FertilizanteNitro y RiegoGoteo tenga un efecto significativo. Esto implica que su efecto conjunto no se desvía significativamente de la suma de sus efectos individuales. Puedes interpretar los efectos de FertilizanteNitro de manera independiente del tipo de riego
linearHypothesis(modelo, "FertilizanteMix:RiegoGoteo - FertilizanteNitro:RiegoGoteo = 0")
## 
## Sum of squares and products for the hypothesis:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg    3280107.281   3622.5957628 -4.719400e+01
## Altura_plantas       3622.596      4.0008448 -5.212170e-02
## Humedad_grano         -47.194     -0.0521217  6.790245e-04
## 
## Sum of squares and products for error:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg   125198211.15     26679.1023    11266.1071
## Altura_plantas       26679.10    142573.5247      219.1194
## Humedad_grano        11266.11       219.1194     1465.1196
## 
## Multivariate Tests: 
##                  Df test stat approx F num Df den Df     Pr(>F)    
## Pillai            1 0.0255716  13.0251      3   1489 2.1258e-08 ***
## Wilks             1 0.9744284  13.0251      3   1489 2.1258e-08 ***
## Hotelling-Lawley  1 0.0262426  13.0251      3   1489 2.1258e-08 ***
## Roy               1 0.0262426  13.0251      3   1489 2.1258e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • El efecto de Fertilizante Mix es significativamente diferente al efecto de Fertilizante Nitro en el riego Goteo. Esto implica que los efectos de Fertilizante Mix y Fertilizante Nitro no son iguales cuando se usa el riego Goteo.

Efectos simples

# Comparar Mix vs Fosfo cuando el riego es por Goteo
linearHypothesis(modelo, "FertilizanteMix + FertilizanteMix:RiegoGoteo = 0")
## 
## Sum of squares and products for the hypothesis:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg    46000953.34    1590294.162   -71623.9316
## Altura_plantas     1590294.16      54977.894    -2476.1035
## Humedad_grano       -71623.93      -2476.103      111.5192
## 
## Sum of squares and products for error:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg   125198211.15     26679.1023    11266.1071
## Altura_plantas       26679.10    142573.5247      219.1194
## Humedad_grano        11266.11       219.1194     1465.1196
## 
## Multivariate Tests: 
##                  Df test stat approx F num Df den Df     Pr(>F)    
## Pillai            1 0.4562412 416.4488      3   1489 < 2.22e-16 ***
## Wilks             1 0.5437588 416.4488      3   1489 < 2.22e-16 ***
## Hotelling-Lawley  1 0.8390507 416.4488      3   1489 < 2.22e-16 ***
## Roy               1 0.8390507 416.4488      3   1489 < 2.22e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • Existe un efecto simple significativo al comparar el Fertilizante Mix vs Fosfo cuando el Riego es por Goteo.
# Comparar Nitro vs Fosfo cuando el riego es por Goteo
linearHypothesis(modelo, "FertilizanteNitro + FertilizanteNitro:RiegoGoteo = 0")
## 
## Sum of squares and products for the hypothesis:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg     3859602.58     230569.089   -22240.4525
## Altura_plantas      230569.09      13773.984    -1328.6241
## Humedad_grano       -22240.45      -1328.624      128.1577
## 
## Sum of squares and products for error:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg   125198211.15     26679.1023    11266.1071
## Altura_plantas       26679.10    142573.5247      219.1194
## Humedad_grano        11266.11       219.1194     1465.1196
## 
## Multivariate Tests: 
##                  Df test stat approx F num Df den Df     Pr(>F)    
## Pillai            1 0.1802447 109.1319      3   1489 < 2.22e-16 ***
## Wilks             1 0.8197553 109.1319      3   1489 < 2.22e-16 ***
## Hotelling-Lawley  1 0.2198763 109.1319      3   1489 < 2.22e-16 ***
## Roy               1 0.2198763 109.1319      3   1489 < 2.22e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • El efecto del Fertilizante Nitro es diferente al del Fosfo cuando se aplica riego por Goteo.
# Comparar Mix vs Fosfo cuando el riego es por Aspersión
linearHypothesis(modelo, "FertilizanteMix = 0")
## 
## Sum of squares and products for the hypothesis:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg    23297621.10    1031935.056   -49180.8584
## Altura_plantas     1031935.06      45708.099    -2178.3963
## Humedad_grano       -49180.86      -2178.396      103.8199
## 
## Sum of squares and products for error:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg   125198211.15     26679.1023    11266.1071
## Altura_plantas       26679.10    142573.5247      219.1194
## Humedad_grano        11266.11       219.1194     1465.1196
## 
## Multivariate Tests: 
##                  Df test stat approx F num Df den Df     Pr(>F)    
## Pillai            1 0.3692771 290.5944      3   1489 < 2.22e-16 ***
## Wilks             1 0.6307229 290.5944      3   1489 < 2.22e-16 ***
## Hotelling-Lawley  1 0.5854823 290.5944      3   1489 < 2.22e-16 ***
## Roy               1 0.5854823 290.5944      3   1489 < 2.22e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • Existe una una diferencia significativa entre el fertilizante Mix y Fosfo cuando el riego es por Aspersión.
# Comparar Nitro vs Fosfo cuando el riego es por Aspersión
linearHypothesis(modelo, "FertilizanteNitro = 0")
## 
## Sum of squares and products for the hypothesis:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg     6941238.33     268925.032   -28908.5154
## Altura_plantas      268925.03      10418.987    -1120.0053
## Humedad_grano       -28908.52      -1120.005      120.3967
## 
## Sum of squares and products for error:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg   125198211.15     26679.1023    11266.1071
## Altura_plantas       26679.10    142573.5247      219.1194
## Humedad_grano        11266.11       219.1194     1465.1196
## 
## Multivariate Tests: 
##                  Df test stat approx F num Df den Df     Pr(>F)    
## Pillai            1 0.1775939 107.1804      3   1489 < 2.22e-16 ***
## Wilks             1 0.8224061 107.1804      3   1489 < 2.22e-16 ***
## Hotelling-Lawley  1 0.2159443 107.1804      3   1489 < 2.22e-16 ***
## Roy               1 0.2159443 107.1804      3   1489 < 2.22e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • Nitro es significativamente diferente a Fosfo bajo riego por aspersión

Visualización de los Resultados

ggplot(cultivos, aes(x = interaction(Fertilizante, Riego), y = Rendimiento_kg, fill = Fertilizante)) +
  geom_boxplot() +
  labs(title = "Boxplot del Rendimiento por combinación de Fertilizante y Riego", x = "Fertilizante:Riego") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Comparar Goteo vs Aspersión cuando el fertilizante es Mix
linearHypothesis(modelo,"RiegoGoteo + FertilizanteMix:RiegoGoteo = 0")
## 
## Sum of squares and products for the hypothesis:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg     47016693.9    1244669.498  -155036.5658
## Altura_plantas      1244669.5      32950.045    -4104.2717
## Humedad_grano       -155036.6      -4104.272      511.2298
## 
## Sum of squares and products for error:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg   125198211.15     26679.1023    11266.1071
## Altura_plantas       26679.10    142573.5247      219.1194
## Humedad_grano        11266.11       219.1194     1465.1196
## 
## Multivariate Tests: 
##                  Df test stat approx F num Df den Df     Pr(>F)    
## Pillai            1 0.4950169 486.5379      3   1489 < 2.22e-16 ***
## Wilks             1 0.5049831 486.5379      3   1489 < 2.22e-16 ***
## Hotelling-Lawley  1 0.9802644 486.5379      3   1489 < 2.22e-16 ***
## Roy               1 0.9802644 486.5379      3   1489 < 2.22e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • El tipo de riego (Goteo vs Aspersión) sí afecta significativamente las respuestas cuando se usa fertilizante Mix.
# Comparar Goteo vs Aspersión cuando el fertilizante es Nitro
linearHypothesis(modelo,"RiegoGoteo + FertilizanteNitro:RiegoGoteo = 0")
## 
## Sum of squares and products for the hypothesis:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg    17693324.30     739328.323    -93406.590
## Altura_plantas      739328.32      30893.367     -3903.062
## Humedad_grano       -93406.59      -3903.062       493.112
## 
## Sum of squares and products for error:
##                Rendimiento_kg Altura_plantas Humedad_grano
## Rendimiento_kg   125198211.15     26679.1023    11266.1071
## Altura_plantas       26679.10    142573.5247      219.1194
## Humedad_grano        11266.11       219.1194     1465.1196
## 
## Multivariate Tests: 
##                  Df test stat approx F num Df den Df     Pr(>F)    
## Pillai            1 0.4160653 353.6475      3   1489 < 2.22e-16 ***
## Wilks             1 0.5839347 353.6475      3   1489 < 2.22e-16 ***
## Hotelling-Lawley  1 0.7125202 353.6475      3   1489 < 2.22e-16 ***
## Roy               1 0.7125202 353.6475      3   1489 < 2.22e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • El tipo de riego también afecta significativamente cuando se aplica fertilizante Nitro.

Visualización de Resultados

ggplot(cultivos, aes(x = interaction(Fertilizante, Riego), y = Rendimiento_kg, fill = Riego)) +
  geom_boxplot() +
  labs(title = "Boxplot por combinación Fertilizante × Riego",
       x = "Tratamientos", y = "Rendimiento (kg)") +
  theme_minimal()