relacionadas con el rendimiento y caracter´ısticas del motor. Las variables incluidas son: mpg (millas por galón), cyl (cilindros), disp (desplazamiento), hp (caballos de fuerza), drat (relación del eje trasero), wt (peso), qsec (tiempo en cuarto de milla), vs (configuración del motor), am (tipo de transmisión), gear (n´umero de marchas) y carb (n´umero de carburadores). Teniendo en cuenta esta informaci´on:
str(mtcars)
## 'data.frame': 32 obs. of 11 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
###a) Calcule el vector de medias, la matriz de covarianzas y la matriz de correlación. Ilustre la última e interprete los resultados.
library(corrplot)
## corrplot 0.94 loaded
# vector de medias
medias <- colMeans(mtcars)
medias
## mpg cyl disp hp drat wt qsec
## 20.090625 6.187500 230.721875 146.687500 3.596563 3.217250 17.848750
## vs am gear carb
## 0.437500 0.406250 3.687500 2.812500
# Matriz de covarianzas
matriz_cov <- cov(mtcars)
matriz_cov
## mpg cyl disp hp drat wt
## mpg 36.324103 -9.1723790 -633.09721 -320.732056 2.19506351 -5.1166847
## cyl -9.172379 3.1895161 199.66028 101.931452 -0.66836694 1.3673710
## disp -633.097208 199.6602823 15360.79983 6721.158669 -47.06401915 107.6842040
## hp -320.732056 101.9314516 6721.15867 4700.866935 -16.45110887 44.1926613
## drat 2.195064 -0.6683669 -47.06402 -16.451109 0.28588135 -0.3727207
## wt -5.116685 1.3673710 107.68420 44.192661 -0.37272073 0.9573790
## qsec 4.509149 -1.8868548 -96.05168 -86.770081 0.08714073 -0.3054816
## vs 2.017137 -0.7298387 -44.37762 -24.987903 0.11864919 -0.2736613
## am 1.803931 -0.4657258 -36.56401 -8.320565 0.19015121 -0.3381048
## gear 2.135685 -0.6491935 -50.80262 -6.358871 0.27598790 -0.4210806
## carb -5.363105 1.5201613 79.06875 83.036290 -0.07840726 0.6757903
## qsec vs am gear carb
## mpg 4.50914919 2.01713710 1.80393145 2.1356855 -5.36310484
## cyl -1.88685484 -0.72983871 -0.46572581 -0.6491935 1.52016129
## disp -96.05168145 -44.37762097 -36.56401210 -50.8026210 79.06875000
## hp -86.77008065 -24.98790323 -8.32056452 -6.3588710 83.03629032
## drat 0.08714073 0.11864919 0.19015121 0.2759879 -0.07840726
## wt -0.30548161 -0.27366129 -0.33810484 -0.4210806 0.67579032
## qsec 3.19316613 0.67056452 -0.20495968 -0.2804032 -1.89411290
## vs 0.67056452 0.25403226 0.04233871 0.0766129 -0.46370968
## am -0.20495968 0.04233871 0.24899194 0.2923387 0.04637097
## gear -0.28040323 0.07661290 0.29233871 0.5443548 0.32661290
## carb -1.89411290 -0.46370968 0.04637097 0.3266129 2.60887097
# Matriz de correlación
matriz_cor <- cor(mtcars)
matriz_cor
## mpg cyl disp hp drat wt
## mpg 1.0000000 -0.8521620 -0.8475514 -0.7761684 0.68117191 -0.8676594
## cyl -0.8521620 1.0000000 0.9020329 0.8324475 -0.69993811 0.7824958
## disp -0.8475514 0.9020329 1.0000000 0.7909486 -0.71021393 0.8879799
## hp -0.7761684 0.8324475 0.7909486 1.0000000 -0.44875912 0.6587479
## drat 0.6811719 -0.6999381 -0.7102139 -0.4487591 1.00000000 -0.7124406
## wt -0.8676594 0.7824958 0.8879799 0.6587479 -0.71244065 1.0000000
## qsec 0.4186840 -0.5912421 -0.4336979 -0.7082234 0.09120476 -0.1747159
## vs 0.6640389 -0.8108118 -0.7104159 -0.7230967 0.44027846 -0.5549157
## am 0.5998324 -0.5226070 -0.5912270 -0.2432043 0.71271113 -0.6924953
## gear 0.4802848 -0.4926866 -0.5555692 -0.1257043 0.69961013 -0.5832870
## carb -0.5509251 0.5269883 0.3949769 0.7498125 -0.09078980 0.4276059
## qsec vs am gear carb
## mpg 0.41868403 0.6640389 0.59983243 0.4802848 -0.55092507
## cyl -0.59124207 -0.8108118 -0.52260705 -0.4926866 0.52698829
## disp -0.43369788 -0.7104159 -0.59122704 -0.5555692 0.39497686
## hp -0.70822339 -0.7230967 -0.24320426 -0.1257043 0.74981247
## drat 0.09120476 0.4402785 0.71271113 0.6996101 -0.09078980
## wt -0.17471588 -0.5549157 -0.69249526 -0.5832870 0.42760594
## qsec 1.00000000 0.7445354 -0.22986086 -0.2126822 -0.65624923
## vs 0.74453544 1.0000000 0.16834512 0.2060233 -0.56960714
## am -0.22986086 0.1683451 1.00000000 0.7940588 0.05753435
## gear -0.21268223 0.2060233 0.79405876 1.0000000 0.27407284
## carb -0.65624923 -0.5696071 0.05753435 0.2740728 1.00000000
# Visualiza la matriz de correlación
corrplot(matriz_cor,
method = "color",
type = "upper",
addCoef.col = "black",
tl.cex = 0.8,
number.cex = 0.7,
title = "Matriz de Correlación de mtcars",
mar = c(0,0,1,0))
En la matriz de correlaciones obtenida, podemos observar distintas
relaciones lineales entre las variables del dataset:
El rendimiento del combustible (mpg) tiene una fuerte
correlación negativa con el peso del vehículo (wt, -0.87),
el número de cilindros (cyl, -0.85), el desplazamiento del
motor (disp, -0.85) y los caballos de fuerza
(hp, -0.78). Esto sugiere que los autos más pesados, con
motores más grandes y potentes, tienden a ser menos eficientes en
combustible. En contraste, mpg tiene correlaciones
positivas con la relación del eje trasero (drat, 0.68), el
motor en línea (vs, 0.66) y la transmisión manual
(am, 0.60), lo que indica que estas características
favorecen un mejor rendimiento del combustible.
El peso del vehículo (wt) no solo está fuertemente
correlacionado con el rendimiento del combustible, sino que también
muestra una fuerte correlación positiva con el desplazamiento del motor
(disp, 0.89) y el número de cilindros (cyl,
0.78). Los autos más pesados suelen tener motores más grandes y más
cilindros. También se observa una correlación positiva con los caballos
de fuerza (hp, 0.66), aunque en menor medida.
En cuanto al desempeño en el cuarto de milla (qsec), se
observa una correlación negativa con la potencia del motor
(hp, -0.71) y con el número de carburadores
(carb, -0.66), indicando que los autos más potentes y con
más carburadores tienden a ser más rápidos. Además, la correlación
positiva de qsec con el motor en línea (vs,
0.74) sugiere que estos motores podrían ser más lentos en aceleración en
comparación con los motores en V.
La variable drat (relación del eje trasero) muestra una
correlación positiva moderada con la transmisión manual
(am, 0.71) y el número de marchas (gear,
0.70), lo cual podría indicar que los autos con mayor relación del eje
trasero suelen tener transmisiones manuales y más marchas, posiblemente
orientados a un manejo más deportivo o eficiente.
Finalmente, el número de carburadores (carb) presenta
una fuerte correlación positiva con los caballos de fuerza
(hp, 0.75) y una correlación moderada con el número de
cilindros (cyl, 0.53), lo que sugiere que los motores más
potentes y grandes tienden a tener más carburadores, posiblemente en
vehículos de alto rendimiento o deportivos.
Escogimos mpg (eficiencia de combustible), hp (potencia del motor) y wt (peso del vehículo) porque representan aspectos fundamentales y complementarios de un automóvil. Estas variables permiten un análisis multivariado que abarque la eficiencia, el rendimiento y una física del vehículo.
# 1. Histogramas
hist(mtcars$mpg, main = "Distribución de mpg", xlab = "Millas por galón", col = "lightblue", border = "black")
hist(mtcars$hp, main = "Distribución de hp", xlab = "Caballos de fuerza", col = "lightgreen", border = "black")
hist(mtcars$wt, main = "Distribución de wt", xlab = "Peso (1000 lbs)", col = "lightcoral", border = "black")
# 2. Boxplots
boxplot(mtcars$mpg, main = "Boxplot de mpg", col = "lightblue", horizontal = TRUE)
boxplot(mtcars$hp, main = "Boxplot de hp", col = "lightgreen", horizontal = TRUE)
boxplot(mtcars$wt, main = "Boxplot de wt", col = "lightcoral", horizontal = TRUE)
Como se puede observar, las observaciones de las variables seleccionadas presentan un comportamiento asimétrico: Hp se encuentra sesgada a la derecha, al igual que mpg, pero esta última en un menor grado. Adicionalmente, a pesar de que wt muestra un pico central, aún tiene un alto grado de asimetría. Además, se evidencian valores atípicos en las variables hp y wt, que pueden influir en el análisis debido al tamaño reducido del dataset.
Para este punto vamos a utilizar las caras de Chernoff.
#install.packages(aplpack)
require(aplpack)
## Loading required package: aplpack
## Warning: package 'aplpack' was built under R version 4.2.2
faces(mtcars[, 1:11],
face.type = 1,
scale = TRUE,
labels = as.character(1:nrow(mtcars)),
plot.faces = TRUE,
nrow.plot = 5)
## effect of variables:
## modified item Var
## "height of face " "mpg"
## "width of face " "cyl"
## "structure of face" "disp"
## "height of mouth " "hp"
## "width of mouth " "drat"
## "smiling " "wt"
## "height of eyes " "qsec"
## "width of eyes " "vs"
## "height of hair " "am"
## "width of hair " "gear"
## "style of hair " "carb"
## "height of nose " "mpg"
## "width of nose " "cyl"
## "width of ear " "disp"
## "height of ear " "hp"
A partir de esto podemos concluir que las observaciones con variables más parecidas son 1 y 2; 10 y 11; 15 y 16
# Seleccionamos variables escogidas
Datos <- mtcars[, c("mpg", "hp", "wt")]
# Pruebas de Shapiro-Wilk para cada variable
shapiro.test(Datos$mpg)
##
## Shapiro-Wilk normality test
##
## data: Datos$mpg
## W = 0.94756, p-value = 0.1229
shapiro.test(Datos$hp)
##
## Shapiro-Wilk normality test
##
## data: Datos$hp
## W = 0.93342, p-value = 0.04881
shapiro.test(Datos$wt)
##
## Shapiro-Wilk normality test
##
## data: Datos$wt
## W = 0.94326, p-value = 0.09265
El test de normalidad de Shapiro-Wilk indica que la variable mpg (W = 0.94756, p = 0.1229) y wt (W = 0.94326, p = 0.09265) no rechazan la hipótesis nula de normalidad al nivel de significancia común (α = 0.05), sugiriendo que podrían seguir una distribución normal. Sin embargo, la variable hp (W = 0.93342, p = 0.04881) presenta un p-valor inferior a 0.05, lo que indica que no se ajusta a una distribución normal, por lo que podría requerir una transformación.
#install.packages("MVA")
require(MVA)
## Loading required package: MVA
## Loading required package: HSAUR2
## Warning: package 'HSAUR2' was built under R version 4.2.3
## Loading required package: tools
# Elipse de dispersión para mpg y hp
x1x2 <- data.frame(Datos$mpg, Datos$hp)
mat12 <- as.matrix.data.frame(x1x2)
bvbox(mat12, method = "robust",
xlab = expression(mpg),
ylab = expression(hp))
# Elipse de dispersión para mpg y wt
x1x3 <- data.frame(Datos$mpg, Datos$wt)
mat13 <- as.matrix.data.frame(x1x3)
bvbox(mat13, method = "robust",
xlab = expression(mpg),
ylab = expression(wt))
# Elipse de dispersión para hp y wt
x2x3 <- data.frame(Datos$hp, Datos$wt)
mat23 <- as.matrix.data.frame(x2x3)
bvbox(mat23, method = "robust",
xlab = expression(hp),
ylab = expression(wt))
Por medio de las elipses de dispersión podemos confirmar las correlaciones lineales de las variables calculada previamente. Además, se evidencia mucha dispersión en los datos (muchas obervaciones fuera de la elipse), lo que puede indicar que no hay normalidad.
# Matriz de datos
X <- as.matrix(Datos)
Xbarra <- colMeans(X)
S <- cov(X)
# Distancias de Mahalanobis
dm <- mahalanobis(X, Xbarra, S)
# QQplot
cuantiles <- qchisq(ppoints(length(dm)), df = ncol(X))
qqplot(cuantiles, dm,
main = "QQplot Normal Multivariada",
xlab = "Cuantiles teóricos",
ylab = "Distancias de Mahalanobis")
abline(0, 1, col = "blue")
El QQ plot con la distancia de Mahalanobis frente a la distribución chi-cuadrado muestra que los datos no siguen completamente la línea de referencia. Aunque en ciertos tramos la alineación es adecuada, en los extremos superiores los puntos se desvían por encima de la línea, lo cual indica una posible falta de normalidad multivariada.
#install.packages("mvShapiroTest")
#install.packages("MVN")
require(MVN)
## Loading required package: MVN
## Warning: package 'MVN' was built under R version 4.2.3
require(mvShapiroTest)
## Loading required package: mvShapiroTest
# Prueba de Shapiro Multivariada
mvShapiro.Test(X)
##
## Generalized Shapiro-Wilk test for Multivariate Normality by
## Villasenor-Alva and Gonzalez-Estrada
##
## data: X
## MVW = 0.92021, p-value = 0.0008699
mvn(X, mvnTest="hz") # test de Henze-Zirkler
## $multivariateNormality
## Test HZ p value MVN
## 1 Henze-Zirkler 1.226047 0.001048295 NO
##
## $univariateNormality
## Test Variable Statistic p value Normality
## 1 Anderson-Darling mpg 0.5797 0.1207 YES
## 2 Anderson-Darling hp 0.7077 0.0584 YES
## 3 Anderson-Darling wt 0.6091 0.1038 YES
##
## $Descriptives
## n Mean Std.Dev Median Min Max 25th 75th Skew
## mpg 32 20.09062 6.0269481 19.200 10.400 33.900 15.42500 22.80 0.6106550
## hp 32 146.68750 68.5628685 123.000 52.000 335.000 96.50000 180.00 0.7260237
## wt 32 3.21725 0.9784574 3.325 1.513 5.424 2.58125 3.61 0.4231465
## Kurtosis
## mpg -0.37276603
## hp -0.13555112
## wt -0.02271075
mvn(X, mvnTest = "royston") # test de royston
## $multivariateNormality
## Test H p value MVN
## 1 Royston 3.782309 0.07940766 YES
##
## $univariateNormality
## Test Variable Statistic p value Normality
## 1 Anderson-Darling mpg 0.5797 0.1207 YES
## 2 Anderson-Darling hp 0.7077 0.0584 YES
## 3 Anderson-Darling wt 0.6091 0.1038 YES
##
## $Descriptives
## n Mean Std.Dev Median Min Max 25th 75th Skew
## mpg 32 20.09062 6.0269481 19.200 10.400 33.900 15.42500 22.80 0.6106550
## hp 32 146.68750 68.5628685 123.000 52.000 335.000 96.50000 180.00 0.7260237
## wt 32 3.21725 0.9784574 3.325 1.513 5.424 2.58125 3.61 0.4231465
## Kurtosis
## mpg -0.37276603
## hp -0.13555112
## wt -0.02271075
Escogimos estas pruebas de normalidad multivariada siguiendo las recomendaciones específicas de cada una y tomando en cuenta sus ventajas. La prueba de Shapiro Multivariada es adecuada para muestras pequeñas y moderadas, lo cual se ajusta al tamaño reducido del dataset. El test de Henze-Zirkler es robusto y funciona bien en diferentes tamaños de muestra y dimensiones de los datos. Finalmente, el test de Royston es recomendado cuando hay pocas dimensiones, como en nuestro caso con p = 3 (mpg, hp, wt).
Los resultados de las pruebas de normalidad multivariada muestran que la prueba de Shapiro-Wilk generalizada (MVW = 0.92021, p-value = 0.0008699) y el test de Henze-Zirkler (HZ = 1.226047, p-value = 0.0010) rechazan la hipótesis nula de normalidad multivariada, indicando que los datos no siguen una distribución normal multivariada. Sin embargo, la prueba de Royston (H = 3.7823, p-value = 0.0794) no rechaza la normalidad multivariada, aunque el p-valor cercano a 0.05 sugiere precaución en la interpretación.
A nivel univariado, las pruebas de Anderson-Darling muestran que cada variable individual (mpg, hp, wt) presenta una distribución normal (p-valores mayores a 0.05).
A pesar de esto, debido los resultados mixtos en las pruebas de normalidad multivariada, sería recomendable tener precaución al aplicar métodos estadísticos que asumen normalidad multivariada.
Primero vamos a crear el dataset teniendo en cuenta la tabla presentada en el libro
companies_data <- data.frame(
x1 = c(108.28, 152.36, 95.04, 65.45, 62.97, 263.99, 265.19, 285.06, 92.01, 165.68),
x2 = c(17.05, 16.59, 10.91, 14.14, 9.52, 25.33, 18.54, 15.73, 8.10, 11.13),
x3 = c(1484.10, 750.33, 766.42, 1110.46, 1031.29, 195.26, 193.83, 191.11, 1175.16, 211.15)
)
print(companies_data)
## x1 x2 x3
## 1 108.28 17.05 1484.10
## 2 152.36 16.59 750.33
## 3 95.04 10.91 766.42
## 4 65.45 14.14 1110.46
## 5 62.97 9.52 1031.29
## 6 263.99 25.33 195.26
## 7 265.19 18.54 193.83
## 8 285.06 15.73 191.11
## 9 92.01 8.10 1175.16
## 10 165.68 11.13 211.15
pairs(~ x1 + x2, data = companies_data, pch = 12,
main = "Diagrama de Pares para Sells y Assets")
Observando la relación entre X1(ventas) y X2(beneficios), se aprecia una
tendencia positiva, indicando que un incremento en las ventas podría
estar asociado con un aumento en los beneficios. Sin embargo, la
relación no parece ser perfectamente lineal, lo cual sugiere que otros
factores podrían influir en los beneficios además de las ventas. Además,
la dispersión de los puntos muestra una correlación positiva, aunque no
perfectamente definida, entre estas dos variables
#Promedios
x_barra_1 <- mean(companies_data$x1)
x_barra_2 <- mean(companies_data$x2)
print(paste("X barra 1 es: ",x_barra_1))
## [1] "X barra 1 es: 155.603"
print(paste("X barra 2 es: ",x_barra_2))
## [1] "X barra 2 es: 14.704"
#Varianzas
s_11 <- var(companies_data$x1)
s_22 <- var(companies_data$x2)
print(paste("S11 es : ",s_11))
## [1] "S11 es : 7476.45324555556"
print(paste("S22 es : ",s_22))
## [1] "S22 es : 26.1903155555556"
# Covarianza entre x1 y x2
s_12 <- cov(companies_data$x1, companies_data$x2)
print(paste("S12 es : ",s_12))
## [1] "S12 es : 303.61862"
# Coeficiente de correlación
r_12 <- cor(companies_data$x1, companies_data$x2)
print(paste("r12 es : ",r_12))
## [1] "r12 es : 0.686136030325892"
la interpretación de (r_{12}: =.68 es una correlación moderada, lo que nos dice que un aumento en las ventas generalmente se asocia con un incremento en los beneficios.
pairs(~ x2 + x3, data = companies_data, pch = 12,
main = "Diagrama de dispersión Profits y Assets")
pairs(~ x1 + x3, data = companies_data, pch = 12,
main = "Diagrama de dispersión Ventas y Assets")
El diagrama de dispersión X2 (Profits) y de X3(Assets) nos muestra que
parece no haber una relación lineal evidente entre los activos y los
beneficios, lo que podría indicar que tener más activos no
necesariamente se traduce en mayores beneficio. El diagrama de
dispersión de X1 (sales) y X3 (Assets) parece haber una tendencia
positiva ligera, sugiriendo que empresas con mayores activos tienden a
tener mayores ventas, pero esta tendencia no es clara.
#Arreglo de medias
x_bar <- colMeans(companies_data)
print ("Arreglo de medias")
## [1] "Arreglo de medias"
x_bar
## x1 x2 x3
## 155.603 14.704 710.911
#Matriz de varianzas y covarianzas
S<-var(companies_data)
print ("Arreglo de varianzas")
## [1] "Arreglo de varianzas"
S
## x1 x2 x3
## x1 7476.4532 303.61862 -35575.960
## x2 303.6186 26.19032 -1053.827
## x3 -35575.9596 -1053.82739 237054.270
#Matriz de correlación
R<-cor(companies_data)
print ("Matriz de correlación")
## [1] "Matriz de correlación"
R
## x1 x2 x3
## x1 1.0000000 0.6861360 -0.8450549
## x2 0.6861360 1.0000000 -0.4229366
## x3 -0.8450549 -0.4229366 1.0000000
Considere un vector aleatorio \(\mathbf{X} \sim \mathcal{N}_2(\boldsymbol{\mu}, \boldsymbol{\Sigma})\), donde
\[ \boldsymbol{\mu} = \begin{bmatrix} 0 \\ 0 \end{bmatrix}, \quad \boldsymbol{\Sigma} = \begin{bmatrix} 2 & 1.5 \\ 1.5 & 2 \end{bmatrix}. \]
a)Grafique los contornos de densidad de f (x) usando contour() en R.
#install.packages("mvtnorm")
#install.packages("MASS")
library(MASS)
library (mvtnorm)
mu<-c(0,0)
Sigma<-matrix(c(2,1.5,1.5,2),ncol = 2, byrow = T)
#función de densidad
f <- function(x1, x2) {
dmvnorm(cbind(x, x2), mean = mu, sigma = Sigma)
}
n <- 50
x1 <- seq(from = -5, to = 5, length.out = n)
x2 <- seq(from = -5, to = 5, length.out = n)
# función de densidad
f <- outer(x1, x2, FUN = function(x1, x2) dmvnorm(cbind(x1, x2), mean = mu, sigma = Sigma))
# --- Grafico de Contornos --- #
contour(x1,
x2,
f,
draw=T,
nlevels = 20,
labcex = 0.8,
xlab=expression(x[1]),
ylab=expression(x[2])
)
# Valores y vectores propios
autov <- eigen(Sigma)
# autovalores
autov$values
## [1] 3.5 0.5
# autovectores
autov$vectors
## [,1] [,2]
## [1,] 0.7071068 -0.7071068
## [2,] 0.7071068 0.7071068
c)Encuentre la ecuación del contorno de densidad constante que contiene el 95 % de la probabilidad y represéntelo gráficamente
#install.packages("ellipse")
library(ellipse)
## Warning: package 'ellipse' was built under R version 4.2.3
##
## Attaching package: 'ellipse'
## The following object is masked from 'package:graphics':
##
## pairs
# Generar el contorno de la elipse al 95%
elipse_95 <- ellipse(Sigma, centre = mu, level = 0.95)
# Gráfico del contorno al 95%
contour(x1, x2, f, draw = T, nlevels = 20, labcex = 0.8,
xlab = expression(x[1]), ylab = expression(x[2]))
lines(elipse_95, col = "red", lwd = 2)