Data

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.

Variables mtcars

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

EDA

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’s

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.

Ajuste

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.

Análisis de Supuestos del Modelo

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

Puntos influyentes

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.