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 datos

contexto del problema:se busca comparar el rendimiento de vehículos pertenecientes a cinco marcas reconocidas del mercado automotriz: Toyota, Ford, Hyundai, Chevrolet y Volkswagen. Se evaluaron 350 autos en total, distribuidos equitativamente entre las marcas bajo un Diseño Completamente al Azar (DCA), lo que garantiza que cada unidad experimental fue asignada aleatoriamente sin influencia de factores externos. El objetivo es determinar si existen diferencias significativas entre las marcas en cuanto a múltiples características técnicas y económicas de los vehículos. Para ello, se aplicó un análisis MANOVA, que permite evaluar simultáneamente varias variables de respuesta.

set.seed(123)

# Marcas y repeticiones
marcas <- rep(c("Toyota", "Ford", "Hyundai", "Chevrolet", "Volkswagen"), each = 70)

# Variables dependientes simuladas
velocidad   <- rnorm(350, mean = rep(c(190, 200, 185, 195, 188), each = 70), sd = 10)
consumo     <- rnorm(350, mean = rep(c(16, 14, 17, 15, 16.5), each = 70), sd = 1.5)
aceleracion <- rnorm(350, mean = rep(c(9.5, 8.8, 10.2, 9.3, 9.0), each = 70), sd = 0.6)
precio      <- rnorm(350, mean = rep(c(30, 28, 25, 27, 29), each = 70), sd = 3)
emisiones   <- rnorm(350, mean = rep(c(120, 130, 115, 125, 118), each = 70), sd = 10)

# Data frame final
autos <- data.frame(
  Marca = marcas,
  Velocidad_max = round(velocidad, 1),
  Consumo = round(consumo, 2),
  Aceleracion = round(aceleracion, 2),
  Precio = round(precio, 1),
  Emisiones = round(emisiones, 1)
)

1. Supuesto de normalidad multivariada

Hipótesis de Shapiro-Wilk multivariado

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

  • H₁: Los datos NO provienen de una normal multivariada.

library(tidyverse)
toyota = autos %>% filter(Marca == "Toyota") %>%
  dplyr::select(Velocidad_max, Consumo, Aceleracion, Precio, Emisiones)
ford = autos %>% filter(Marca == "Ford") %>%
  dplyr::select(Velocidad_max, Consumo, Aceleracion, Precio, Emisiones)
hyundai = autos %>% filter(Marca == "Hyundai") %>%
  dplyr::select(Velocidad_max, Consumo, Aceleracion, Precio, Emisiones)
chevrolet = autos %>% filter(Marca == "Chevrolet") %>%
  dplyr::select(Velocidad_max, Consumo, Aceleracion, Precio, Emisiones)
volkswagen = autos %>% filter(Marca == "Volkswagen") %>%
  dplyr::select(Velocidad_max, Consumo, Aceleracion, Precio, Emisiones)

#Ejecutamos el test de normalidad multivariada

library(mvnormtest)
mshapiro.test(t(toyota))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.96508, p-value = 0.04803
mshapiro.test(t(ford))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.92552, p-value = 0.0004645
mshapiro.test(t(hyundai))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.94714, p-value = 0.005153
mshapiro.test(t(chevrolet))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.96199, p-value = 0.03229
mshapiro.test(t(volkswagen))
## 
##  Shapiro-Wilk normality test
## 
## data:  Z
## W = 0.9522, p-value = 0.009468

conclusion:

Como en todas las marcas p < 0.05, rechazamos H₀. A un nivel de significación del 0.5%, existe suficiente evidencia estadística para afirmar que los datos no cumplen el supuesto de normalidad multivariada.

Sin embargo, debido a que contamos con un tamaño de muestra grande (n = 350, 70 por grupo), el Teorema Central del Límite (TCL) nos respalda: al aumentar el tamaño muestral.

Supuesto de homogeneidad de matrices variancia covariancia

H₀: Las matrices de varianzas-covarianzas son iguales entre los grupos (marcas).

H₁: Al menos una matriz de varianzas-covarianzas difiere entre los grupos.

En este caso se evaluaron 3 pruebas para evaluar este supuesto

# MANOVA con 5 respuestas: Velocidad, Consumo, Aceleración, Precio, Emisiones
res <- boxM(autos[, -1], autos$Marca)
res
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  autos[, -1]
## Chi-Sq (approx.) = 36.548, df = 60, p-value = 0.9928
summary(res)
## Summary for Box's M-test of Equality of Covariance Matrices
## 
## Chi-Sq:   36.54757 
## df:   60 
## p-value: 0.9928 
## 
## log of Covariance determinants:
##  Chevrolet       Ford    Hyundai     Toyota Volkswagen 
##   11.13877   10.72263   10.93171   10.75061   11.48488 
## 
## Eigenvalues:
##     Chevrolet       Ford     Hyundai     Toyota  Volkswagen      pooled
## 1 123.5055709 97.9369713 109.3741906 91.5285303 121.6573435 102.8216093
## 2  80.6349734 79.4242280  89.7329031 77.2978375 105.1141321  92.2590158
## 3   8.7326293  7.7449957   9.2115855  8.5522379   8.1838240   8.6009040
## 4   2.4113255  2.2995390   1.6776331  2.1567286   2.2290557   2.1821441
## 5   0.3280159  0.3275034   0.3687094  0.3575441   0.4168155   0.3772915
## 
## Statistics based on eigenvalues:
##              Chevrolet         Ford      Hyundai       Toyota   Volkswagen
## product   6.878691e+04 4.537090e+04 55921.925473 4.665829e+04 9.723453e+04
## sum       2.156125e+02 1.877332e+02   210.365022 1.798929e+02 2.376012e+02
## precision 2.779049e-01 2.747109e-01     0.290944 2.940041e-01 3.347068e-01
## max       1.235056e+02 9.793697e+01   109.374191 9.152853e+01 1.216573e+02
##                 pooled
## product   6.717346e+04
## sum       2.062410e+02
## precision 3.081126e-01
## max       1.028216e+02

Conclsuion:Como el p-valor=0.9928 > 0.05, no se rechaza H, xiste suficiente evidencia estadística para afirmar que se cumple el supuesto de homogeneidad de las matrices de varianzas-covarianzas entre las cinco marcas de vehículos.

library(biotools)

boxM(autos[, -1], autos[, 1])
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  autos[, -1]
## Chi-Sq (approx.) = 36.548, df = 60, p-value = 0.9928

Con la anterior pureba tambien cumple el supuestro de homogeneidad de varianzas.

Y con esta prueba de WRAPER

library(DFA.CANCOR)

HOMOGENEITY(data = autos,
            groups = 'Marca',
            variables = c('Velocidad_max','Consumo','Aceleracion','Precio','Emisiones'))
##               Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max         84.58   -0.17       -0.04  -3.02    -12.56
## Consumo               -0.17    2.42       -0.37   0.31      2.53
## Aceleracion           -0.04   -0.37        0.40  -0.01     -1.20
## Precio                -3.02    0.31       -0.01   8.84      0.27
## Emisiones            -12.56    2.53       -1.20   0.27    119.37
##               Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max         87.25   -0.08        0.29   4.52      9.23
## Consumo               -0.08    2.36       -0.06   0.44     -1.74
## Aceleracion            0.29   -0.06        0.34   0.24      0.09
## Precio                 4.52    0.44        0.24   7.98     -0.58
## Emisiones              9.23   -1.74        0.09  -0.58     89.81
##               Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max        102.05   -0.74       -0.73  -0.86     -9.52
## Consumo               -0.74    1.81        0.06   0.71     -2.29
## Aceleracion           -0.73    0.06        0.39   0.25     -0.76
## Precio                -0.86    0.71        0.25   9.15     -0.42
## Emisiones             -9.52   -2.29       -0.76  -0.42     96.97
##               Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max         82.52   -1.91        1.10  -2.82      6.78
## Consumo               -1.91    2.24       -0.11   0.47     -1.47
## Aceleracion            1.10   -0.11        0.38   0.00     -0.30
## Precio                -2.82    0.47        0.00   8.71     -2.58
## Emisiones              6.78   -1.47       -0.30  -2.58     86.05
##               Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max        105.23   -0.81        1.42  -0.51      1.53
## Consumo               -0.81    2.26       -0.04   0.34     -0.88
## Aceleracion            1.42   -0.04        0.44  -0.11     -0.03
## Precio                -0.51    0.34       -0.11   8.19      1.72
## Emisiones              1.53   -0.88       -0.03   1.72    121.48
##               Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max        92.325  -0.741       0.409 -0.540    -0.909
## Consumo              -0.741   2.219      -0.104  0.457    -0.768
## Aceleracion           0.409  -0.104       0.388  0.075    -0.441
## Precio               -0.540   0.457       0.075  8.573    -0.317
## Emisiones            -0.909  -0.768      -0.441 -0.317   102.735
##               Velocidad_max Consumo Aceleracion Precio Emisiones
## Velocidad_max         1.000  -0.052       0.068 -0.019    -0.009
## Consumo              -0.052   1.000      -0.112  0.105    -0.051
## Aceleracion           0.068  -0.112       1.000  0.041    -0.070
## Precio               -0.019   0.105       0.041  1.000    -0.011
## Emisiones            -0.009  -0.051      -0.070 -0.011     1.000
##            Log Determinant
## Toyota              11.139
## Ford                10.723
## Hyundai             10.932
## Chevrolet           10.751
## Volkswagen          11.485
## Pooled              11.115

2. Supuesto de variables dependientes correlacionadas (Bartlett)

library(psych)
options(scipen = 0)

# Bartlett sobre la matriz de correlación de las variables dependientes
cortest.bartlett(cor(autos[, -1]), n = nrow(autos[, -1]))
## $chisq
## [1] 127.8793
## 
## $p.value
## [1] 1.264207e-22
## 
## $df
## [1] 10

conlusión:Como p-vaor < 0.05, se rechaza la hipótesis nula.

Podemos afirmar que existe evidencia estadística de que las variables están correlacionadas entre sí.

library(MVTests)

res1 <- Bsper(autos[, -1])  # Variables dependientes
summary(res1)
##        Bartlett's Sphericity Test 
## 
## Chi-Squared Value = 127.8793 , df = 10  and p-value: <2e-16 
## 
##        Correlation Matrix 
## 
##               Velocidad_max      Consumo Aceleracion       Precio   Emisiones
## Velocidad_max    1.00000000 -0.293988633  -0.2101076  0.047949543  0.22523062
## Consumo         -0.29398863  1.000000000   0.2257921  0.001177129 -0.31740846
## Aceleracion     -0.21010757  0.225792120   1.0000000 -0.136911411 -0.29881962
## Precio           0.04794954  0.001177129  -0.1369114  1.000000000  0.04294112
## Emisiones        0.22523062 -0.317408461  -0.2988196  0.042941115  1.00000000

MODELO MANOVA

modelo <- manova(cbind(Velocidad_max, Consumo, Aceleracion, Precio, Emisiones) ~ Marca, 
                 data = autos)

Determinación de la matriz residual y la matriz factorial del MANOVA.

A continuación en la salida se muestran amabas matrices

Matrices = summary(modelo)$SS
F = Matrices$Marca       # Variabilidad explicada por el factor Marca
W = Matrices$Residuals   # Variabilidad residual (dentro de cada marca)
T = F + W                # Variabilidad total
F
##               Velocidad_max    Consumo Aceleracion    Precio  Emisiones
## Velocidad_max     8611.6367 -1719.9534   -794.1877  795.6666 10219.0869
## Consumo          -1719.9534   350.4071    152.3376 -155.0666 -2053.2561
## Aceleracion       -794.1877   152.3376    104.9375 -159.4726  -857.6446
## Precio             795.6666  -155.0666   -159.4726 1034.4562   702.6053
## Emisiones        10219.0869 -2053.2561   -857.6446  702.6053 12357.0519
W
##               Velocidad_max    Consumo Aceleracion     Precio  Emisiones
## Velocidad_max    31852.2023 -255.68800   141.01897 -186.23114  -313.5566
## Consumo           -255.6880  765.65421   -35.76323  157.55137  -265.0955
## Aceleracion        141.0190  -35.76323   133.89877   25.78241  -152.0174
## Precio            -186.2311  157.55137    25.78241 2957.80957  -109.4071
## Emisiones         -313.5566 -265.09546  -152.01743 -109.40714 35443.5680

Pruebas estadísticas para probar la hipótesis Ho en el MANOVA.

Criterio de Razón de verosimilitud (Lambda de Wilk` s)

eta2 = 1 - det(W)/det(T)
eta2
## [1] 0.7692905

Conclusión: El 76.9% de la variabilidad total está explicada por las diferencias entre los grupos (Marca),indica efecto fuerte del factor Marca sobre las variables dependientes.

Lo que se quiere probar es lo siguiente:

H0:μ1=μ2=μ3=μ4=μ5

H1: al menos un μi es diferente a los demás

summary(modelo, test = "Pillai")
##            Df Pillai approx F num Df den Df    Pr(>F)    
## Marca       4 1.0182   23.492     20   1376 < 2.2e-16 ***
## Residuals 345                                            
## ---
## 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)    
## Marca       4           2.3386   39.699     20   1358 < 2.2e-16 ***
## Residuals 345                                                      
## ---
## 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)    
## Marca       4 1.8748   128.99      5    344 < 2.2e-16 ***
## Residuals 345                                            
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Dado que todas las pruebas (Pillai, Hotelling, Roy) son significativas con p < 0.001, podemos afirmar que:Existe suficiente evidencia estadística para rechazar la hipótesis nula Ho, los vectores de medias de las variables dependientes difieren entre las marcas de autos.
Por lo tanto, el factor Marca tiene un efecto significativo sobre el conjunto de variables dependientes.

summary.aov(modelo)
##  Response Velocidad_max :
##              Df Sum Sq Mean Sq F value    Pr(>F)    
## Marca         4   8612 2152.91  23.319 < 2.2e-16 ***
## Residuals   345  31852   92.33                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Consumo :
##              Df Sum Sq Mean Sq F value    Pr(>F)    
## Marca         4 350.41  87.602  39.473 < 2.2e-16 ***
## Residuals   345 765.65   2.219                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Aceleracion :
##              Df Sum Sq Mean Sq F value    Pr(>F)    
## Marca         4 104.94 26.2344  67.595 < 2.2e-16 ***
## Residuals   345 133.90  0.3881                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Precio :
##              Df Sum Sq Mean Sq F value    Pr(>F)    
## Marca         4 1034.5 258.614  30.165 < 2.2e-16 ***
## Residuals   345 2957.8   8.573                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response Emisiones :
##              Df Sum Sq Mean Sq F value    Pr(>F)    
## Marca         4  12357 3089.26   30.07 < 2.2e-16 ***
## Residuals   345  35444  102.73                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Conclusión: De la salida se puede apreciar que todas las variables aportan para que se rechace la hipotesis nula Ho, es decir que contribuyen para que se esta hipótesis se rechace, esto se debe que cada uno de los p-valores son menores al nivel de significación alfa.

Comparamos dos Marcas de automóviles

Primero generamos un modelo lineal

modelo1 = manova(cbind(Velocidad_max, Consumo, Aceleracion,Precio, Emisiones) ~ Marca, data = autos,
               subset = Marca %in% c("Toyota","Ford"))
summary(modelo1,test="Pillai")
##            Df  Pillai approx F num Df den Df    Pr(>F)    
## Marca       1 0.59459   39.305      5    134 < 2.2e-16 ***
## Residuals 138                                             
## ---
## 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)    
## Marca       1 0.40541   39.305      5    134 < 2.2e-16 ***
## Residuals 138                                             
## ---
## 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)    
## Marca       1           1.4666   39.305      5    134 < 2.2e-16 ***
## Residuals 138                                                      
## ---
## 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)    
## Marca       1 1.4666   39.305      5    134 < 2.2e-16 ***
## Residuals 138                                            
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Como en todos los casos el p-valor < 0.001, rechazamos H₀.Se puede afirmar que con las distintas pruebas de pillai,willks,hotelling y roy, en todas ellas rechazamos Ho, es decir podemos afirmar que el vector de promedios de las marcas “Toyota” y “Ford” no son iguales. Es decir las 5 variables dicen que hay diferencias entre los promedios de las marcas “Toyota” y “Ford”.

Comparación General por pares