La Base de datos seleccionada corresponde al conjunto de datos ‘mtcars’, con un grupo de 32 observaciones, 11 variables de un conjunto de datos incorporado en R, el cual trata de una revista sobre la industria del automóvil, “Motor Trend”. Al observar el conjunto de datos de la presente colección de automóviles, se plantea un problema a explorar que es averiguar cuál de los vehículos es más eficiente en función de las millas por galón.
https://stat.ethz.ch/R-manual/R-devel/library/datasets/html/mtcars.html.
nombre: Modelo de vehículo mpg : Millas por galon cyl : Número de cilindros disp : Desplazamiento hp : Caballos de fuerza drat : Relación del eje trasero wt : Peso del vehículo (1000 libras) qsec : 1/4 milla de tiempo (aceleración) vs : Motor (0 = en forma de V, 1 = recto) am : Tipo de Transmisión (automática = 0 / manual = 1) gear : Número de engranajes delanteros carb : Número de carburadores
El objetivo de este EDA es verificar algunas correlaciones y covarianzas, analizar cuales pueden ser los mejores predictores para el modelo, identificando relaciones lineales y/o no lineales con las diferentes variables entre predictores del conjunto de datos ‘mtcars’.
str(mtcars)
## spc_tbl_ [32 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num [1:32] 160 160 108 258 360 ...
## $ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
## $ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...
## - attr(*, "spec")=
## .. cols(
## .. mpg = col_double(),
## .. cyl = col_double(),
## .. disp = col_double(),
## .. hp = col_double(),
## .. drat = col_double(),
## .. wt = col_double(),
## .. qsec = col_double(),
## .. vs = col_double(),
## .. am = col_double(),
## .. gear = col_double(),
## .. carb = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
names(mtcars)
## [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear"
## [11] "carb"
head(mtcars)
attach(mtcars)
## The following object is masked from package:ggplot2:
##
## mpg
summary(mtcars)
## mpg cyl disp hp
## Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0
## 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5
## Median :19.20 Median :6.000 Median :196.3 Median :123.0
## Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7
## 3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0
## Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0
## drat wt qsec vs
## Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000
## 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000
## Median :3.695 Median :3.325 Median :17.71 Median :0.0000
## Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375
## 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000
## Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000
## am gear carb
## Min. :0.0000 Min. :3.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
## Median :0.0000 Median :4.000 Median :2.000
## Mean :0.4062 Mean :3.688 Mean :2.812
## 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :1.0000 Max. :5.000 Max. :8.000
#Es posible observar que el rendimiento promedio es de 20.09 mpg, aún cuando
#existen observación con datos tan bajos como 10.04mpg y tan altos como 33.09.
#Seleccionamos solo las columnas numéricas
mtcars_numeric <- mtcars %>%
select_if(is.numeric)
head(mtcars_numeric)
plot(mpg ~ hp, data=mtcars, xlab="hp", ylab="mpg")
#Se muestra la relación entre el rendimiento del automóvil (mpg) y los caballos
#de fuerza del motor(hp). Asumimos que el eje x(mpg) es la variable predictora.
# Histograma del rendimiento con eje x invertido
hist(mtcars_numeric$mpg, main = "Histograma del Rendimiento", ylab = "Rendimiento (millas por galón)", xlab = "Frecuencia", col = "light grey", border = "black", xlim = c(rev(range(mtcars_numeric$mpg))))
#El gráfico nos señala el comportamiento de la variable en cuestión mpg,
#el cual evidenciamos un comportamiento simetrico con un sesgo a la derecha.
#Lo anterior se comprobará con pruebas estadísticas.
library(moments)
skewness(mpg)
## [1] 0.6404399
kurtosis(mpg)
## [1] 2.799467
#La asimetría cuantifica la falta de simetría en la distribución de datos.
#Un valor positivo indica asimetría hacia la derecha, lo que sugiere que hay
#una cola positiva en la distribución. En este caso, el valor positivo (0.6404399)
#indica una ligera asimetría hacia la derecha en la distribución mpg.
#La curtosis sugiere que la distribución tiene colas más pesadas que una
#distribución normal estándar. Un valor mayor que 3 indica una distribución más
#puntiaguda en comparación con la distribución normal. Hay una cierta
#concentración en las colas de la distribución, pero no es muy pronunciada.
#Para seleccionar posibles covariables
#Calcular la matriz de correlación
correlacion_matriz <- cor(mtcars_numeric)
correlacion_matriz
## 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
pairs(mtcars_numeric)
#En el caso de las millas por galón:
#Identificamos una fuerte correlación negativa con cyl (-0.8521620) y disp (-0.8475514)
#Nos indica que a medida que las millas por galón aumentan,
#el número de cilindros y la cilindrada tienden a disminuir.
#Identificamos una fuerte correlación positiva con vs (0.6640389) y am (0.5998324)
#Nos indica que hay una asociación positiva entre millas por galón y variables
#como "vs" (motor en forma de V) y "am" (transmisión automática).
#En el caso de los caballos de fuerza (hp):
#La correlación es negativa con mpg (-0.7761684)
#Nos indica que a medida que los caballos de fuerza aumentan,
#las millas por galón tienden a disminuir.
#En el caso de relación de ejes traseros (drat):
#La correlación es positiva con mpg (0.6811719)
#Se sugiere una relación positiva entre la relación de ejes traseros y mpg.
#En el caso del peso del automóvil:
#Existe una fuerte correlación negativa con mpg (-0.8676594)
#Esto nos indica que a medida que el peso del automóvil aumenta,
#las millas por galón tienden a disminuir.
#En el caso del tiempo de cuarto de milla
#La correlación es positiva con mpg (0.4186840)
#Se muestra una relación positiva entre el tiempo de cuarto de milla y mpg.
boxplot(mtcars$mpg ~ mtcars$am, data = mtcars,
col = c("dark grey", "light grey"),
xlab = "Transmision",
ylab = "mpg",
main = "Rendimiento por tipo de transmisión")
#El boxplot muestra claramente la diferencia en el rendimiento de mpg
#entre los dos tipos de transmisión (automática y manual).
#Hay una diferencia significativa en el rendimiento de mpg entre los autos.
#Identificando con mayor rendimiento los vehículos con transmisión automática
#versus los vehículos de transmisión manual.
modelo_completo <- lm(mpg ~ ., data = mtcars)
modelo_completo
##
## Call:
## lm(formula = mpg ~ ., data = mtcars)
##
## Coefficients:
## (Intercept) cyl disp hp drat wt
## 12.30337 -0.11144 0.01334 -0.02148 0.78711 -3.71530
## qsec vs am gear carb
## 0.82104 0.31776 2.52023 0.65541 -0.19942
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
stepAIC(modelo_completo)
## Start: AIC=70.9
## mpg ~ cyl + disp + hp + drat + wt + qsec + vs + am + gear + carb
##
## Df Sum of Sq RSS AIC
## - cyl 1 0.0799 147.57 68.915
## - vs 1 0.1601 147.66 68.932
## - carb 1 0.4067 147.90 68.986
## - gear 1 1.3531 148.85 69.190
## - drat 1 1.6270 149.12 69.249
## - disp 1 3.9167 151.41 69.736
## - hp 1 6.8399 154.33 70.348
## - qsec 1 8.8641 156.36 70.765
## <none> 147.49 70.898
## - am 1 10.5467 158.04 71.108
## - wt 1 27.0144 174.51 74.280
##
## Step: AIC=68.92
## mpg ~ disp + hp + drat + wt + qsec + vs + am + gear + carb
##
## Df Sum of Sq RSS AIC
## - vs 1 0.2685 147.84 66.973
## - carb 1 0.5201 148.09 67.028
## - gear 1 1.8211 149.40 67.308
## - drat 1 1.9826 149.56 67.342
## - disp 1 3.9009 151.47 67.750
## - hp 1 7.3632 154.94 68.473
## <none> 147.57 68.915
## - qsec 1 10.0933 157.67 69.032
## - am 1 11.8359 159.41 69.384
## - wt 1 27.0280 174.60 72.297
##
## Step: AIC=66.97
## mpg ~ disp + hp + drat + wt + qsec + am + gear + carb
##
## Df Sum of Sq RSS AIC
## - carb 1 0.6855 148.53 65.121
## - gear 1 2.1437 149.99 65.434
## - drat 1 2.2139 150.06 65.449
## - disp 1 3.6467 151.49 65.753
## - hp 1 7.1060 154.95 66.475
## <none> 147.84 66.973
## - am 1 11.5694 159.41 67.384
## - qsec 1 15.6830 163.53 68.200
## - wt 1 27.3799 175.22 70.410
##
## Step: AIC=65.12
## mpg ~ disp + hp + drat + wt + qsec + am + gear
##
## Df Sum of Sq RSS AIC
## - gear 1 1.565 150.09 63.457
## - drat 1 1.932 150.46 63.535
## <none> 148.53 65.121
## - disp 1 10.110 158.64 65.229
## - am 1 12.323 160.85 65.672
## - hp 1 14.826 163.35 66.166
## - qsec 1 26.408 174.94 68.358
## - wt 1 69.127 217.66 75.350
##
## Step: AIC=63.46
## mpg ~ disp + hp + drat + wt + qsec + am
##
## Df Sum of Sq RSS AIC
## - drat 1 3.345 153.44 62.162
## - disp 1 8.545 158.64 63.229
## <none> 150.09 63.457
## - hp 1 13.285 163.38 64.171
## - am 1 20.036 170.13 65.466
## - qsec 1 25.574 175.67 66.491
## - wt 1 67.572 217.66 73.351
##
## Step: AIC=62.16
## mpg ~ disp + hp + wt + qsec + am
##
## Df Sum of Sq RSS AIC
## - disp 1 6.629 160.07 61.515
## <none> 153.44 62.162
## - hp 1 12.572 166.01 62.682
## - qsec 1 26.470 179.91 65.255
## - am 1 32.198 185.63 66.258
## - wt 1 69.043 222.48 72.051
##
## Step: AIC=61.52
## mpg ~ hp + wt + qsec + am
##
## Df Sum of Sq RSS AIC
## - hp 1 9.219 169.29 61.307
## <none> 160.07 61.515
## - qsec 1 20.225 180.29 63.323
## - am 1 25.993 186.06 64.331
## - wt 1 78.494 238.56 72.284
##
## Step: AIC=61.31
## mpg ~ wt + qsec + am
##
## Df Sum of Sq RSS AIC
## <none> 169.29 61.307
## - am 1 26.178 195.46 63.908
## - qsec 1 109.034 278.32 75.217
## - wt 1 183.347 352.63 82.790
##
## Call:
## lm(formula = mpg ~ wt + qsec + am, data = mtcars)
##
## Coefficients:
## (Intercept) wt qsec am
## 9.618 -3.917 1.226 2.936
ajuste <- lm(mpg ~ wt + qsec + am)
summary(ajuste)
##
## Call:
## lm(formula = mpg ~ wt + qsec + am)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.4811 -1.5555 -0.7257 1.4110 4.6610
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 9.6178 6.9596 1.382 0.177915
## wt -3.9165 0.7112 -5.507 6.95e-06 ***
## qsec 1.2259 0.2887 4.247 0.000216 ***
## am 2.9358 1.4109 2.081 0.046716 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.459 on 28 degrees of freedom
## Multiple R-squared: 0.8497, Adjusted R-squared: 0.8336
## F-statistic: 52.75 on 3 and 28 DF, p-value: 1.21e-11
#Interpretación coeficientes:
#El coeficiente para el peso del auto (wt) es -3.917.
#Indica que, manteniendo constante el tiempo de cuarto de milla y el tipo de
#transmisión, por cada unidad adicional de peso en libras, se espera que el
#rendimiento de millas por galón disminuya en aproximadamente 3.917 unidades.
#El coeficiente para el tiempo de cuarto de milla (qsec) es 1.226.
#Indica que, manteniendo constante el peso y el tipo de transmisión,
#por cada unidad adicional en el tiempo de cuarto de milla, se espera que el
#rendimiento de millas por galón aumente aproximadamente 1.226 unidades.
#El coeficiente para el tipo de transmisión (am) es 2.936.
#Indica la diferencia esperada en el rendimiento de millas por galón entre los
#dos tipos de transmisión. Se espera que, en promedio, los autos con transmisión
#manual tengan un rendimiento aproximadamente de 2.936 unidades mayor que los
#autos con transmisión automática, manteniendo constantes el peso y qsec.
#Linealidad y Homocedasticidad
plot(ajuste)
#Al observar el gráfico, se busca un patrón general que sugiera linealidad.
# "Residuals vs Fitted". En este gráfico, se observa una dispersión uniforme de los
#residuos a lo largo de los valores ajustados.
#En la homocedasticidad se refiere a la igualdad de varianza de los residuos en
#todos los niveles de las variables predictoras.
# "Residuals vs Fitted". Existe una dispersión uniforme alrededor de la línea horizontal.
#Normalidad en residuos
residuos <- resid(ajuste)
qqnorm(ajuste$residuals)
qqline(ajuste$residuals)
#Los puntos en el gráfico Q-Q siguen aproximadamente alrededor de la línea recta.
#Se desvían algunos puntos de la línea, lo que evidencia desviaciones de la normalidad.
#Independencia
acf(ajuste$residuals)
#La mayoría de las autocorrelaciones están dentro de las bandas de confianza,
#se sugiere que no hay patrones evidentes de autocorrelación en los residuos.
#Verificar puntos atípicos
plot(ajuste, which = 1)
#Los puntos que están significativamente lejos de la línea pueden ser considerados
#como posibles valores atípicos, tal como los valores 17 y 18.
plot(ajuste, which = 5)
#Este gráfico muestra el índice de influencia (Distancia de Cook).
#Cada punto representa una observación, y su posición en el eje y indica el
#grado de influencia que tiene esa observación en el modelo.
#Los puntos que están significativamente por encima del umbral pueden considerarse
#como observaciones influyentes, como es el caso de los datos 17 y 18.
attach(mtcars)
## The following objects are masked from mtcars (pos = 5):
##
## am, carb, cyl, disp, drat, gear, hp, mpg, qsec, vs, wt
## The following object is masked from package:ggplot2:
##
## mpg
#Seleccionamos observaciones para hacer el ajuste sin ellas
obs<-17
ajuste.cars = lm(mpg[-obs] ~ wt[-obs] + qsec[-obs] + am[-obs])
ajuste.cars
##
## Call:
## lm(formula = mpg[-obs] ~ wt[-obs] + qsec[-obs] + am[-obs])
##
## Coefficients:
## (Intercept) wt[-obs] qsec[-obs] am[-obs]
## 13.668 -4.640 1.136 2.198
cbind(coef(ajuste),coef(ajuste.cars))
## [,1] [,2]
## (Intercept) 9.617781 13.668013
## wt -3.916504 -4.639731
## qsec 1.225886 1.135533
## am 2.935837 2.197836
# Cuantificar el impacto de la observación:
#Para el coeficiente wt corresponde a 18.45%
#Para el coeficiente qsec corresponde a −7.38%
#Para el coeficiente am corresponde a −25%
attach(mtcars)
## The following objects are masked from mtcars (pos = 3):
##
## am, carb, cyl, disp, drat, gear, hp, mpg, qsec, vs, wt
## The following objects are masked from mtcars (pos = 6):
##
## am, carb, cyl, disp, drat, gear, hp, mpg, qsec, vs, wt
## The following object is masked from package:ggplot2:
##
## mpg
#Seleccionamos observaciones para hacer el ajuste sin ellas
obs<-18
ajuste.cars = lm(mpg[-obs] ~ wt[-obs] + qsec[-obs] + am[-obs])
ajuste.cars
##
## Call:
## lm(formula = mpg[-obs] ~ wt[-obs] + qsec[-obs] + am[-obs])
##
## Coefficients:
## (Intercept) wt[-obs] qsec[-obs] am[-obs]
## 12.403 -4.003 1.091 2.302
cbind(coef(ajuste),coef(ajuste.cars))
## [,1] [,2]
## (Intercept) 9.617781 12.402569
## wt -3.916504 -4.002993
## qsec 1.225886 1.090661
## am 2.935837 2.301935
# Cuantificar el impacto de la observación:
#Para el coeficiente wt corresponde a −2.20%
#Para el coeficiente qsec corresponde a −11.03%
#Para el coeficiente am corresponde a −21.61%
#En términos generales, las observaciones excluidas no influyen significativamente
#en el ajuste del modelo por ello se sugiere elegir el modelo completo,
#incluyendo las observaciones.