Documento 17 Regresion - Fuel Efficiency

Usaremos el dataset FuelEfficiency.csv del CV. El objetivo es ajustar la efciencia de consumo de gasoil (fuel).

Los principales atributos son: GPM (gallons per 100 miles), MPG (miles per gallon), WT (weigth), DIS (distance), HP (horsepower), NC (number of cylinders).

library(readr)
library(dplyr)
library(ggplot2)
library(magrittr)
library(GGally)

Importar el dataset y gráficamente encontrar relaciones entre las variables.

FuelEfficiency <- read_csv("datasets/FuelEfficiency.csv")
## Parsed with column specification:
## cols(
##   MPG = col_double(),
##   GPM = col_double(),
##   WT = col_double(),
##   DIS = col_double(),
##   NC = col_double(),
##   HP = col_double(),
##   ACC = col_double(),
##   ET = col_double()
## )
FuelEfficiency$ACC <- NULL
FuelEfficiency$ET <- NULL

names(FuelEfficiency)
## [1] "MPG" "GPM" "WT"  "DIS" "NC"  "HP"
attach(FuelEfficiency)

#plot(FuelEfficiency)
ggpairs(FuelEfficiency)

Podemos ver una relación muy clara entre GPM y MPG, siendo una relación lineal negativa, ya que para valores altos de GPM la variable MPG toma valores bajos. Su correlación es de -0.98, esta correlación negativa indica que están asociadas de forma inversa, esto es, valores altos de una de las variables se corresponden con valores bajos de la otra.

cor(GPM, MPG)
## [1] -0.9807972

Intentar un modelo de regresión lineal entre GPM y el resto de variables.

m1 <- lm(data = FuelEfficiency, formula = GPM ~ .)
m1
## 
## Call:
## lm(formula = GPM ~ ., data = FuelEfficiency)
## 
## Coefficients:
## (Intercept)          MPG           WT          DIS           NC           HP  
##    6.219794    -0.131807     0.397032    -0.001392     0.070298     0.001035

Evaluar el modelo.

Tenemos un F-estadístico grande y un p-value muy pequeño (cercano a 0) por lo que aceptamos H1 y rechazamos H0, declarando que existe un modelo.

Con la función summary() obtenemos los errores estándar de los coeficientes, los p-values así como el estadístico F y R2.

summary(m1)
## 
## Call:
## lm(formula = GPM ~ ., data = FuelEfficiency)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.32836 -0.15706 -0.01305  0.12006  0.44487 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6.219794   0.962248   6.464 2.85e-07 ***
## MPG         -0.131807   0.015531  -8.487 1.07e-09 ***
## WT           0.397032   0.273554   1.451    0.156    
## DIS         -0.001392   0.001826  -0.762    0.451    
## NC           0.070298   0.066613   1.055    0.299    
## HP           0.001035   0.003420   0.303    0.764    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2079 on 32 degrees of freedom
## Multiple R-squared:  0.972,  Adjusted R-squared:  0.9676 
## F-statistic: 222.3 on 5 and 32 DF,  p-value: < 2.2e-16
  • ¿Con qué variables hay mayor relación?.

Tenemos una mayor relación con la variable MPG, debido a que su p-value es muy cercano a 0 por lo que es muy significativo (***).

Por detrás, tenemos también dos variables algo significativas, que son….

plot(m1)

Explicando las gráficas resultantes para decir cuánto de bueno es el modelo:

  1. Residuals vs Fitted values: Los residuos están linealmente distribuidos, debido a que la línea de la gráfica se aproxima a y=0 (teniendo en cuenta además la escala del eje y, que va de -0.4 a 0.4).

  2. Los residuos están prácticamente distribuidos siguiendo una normal, debido a que los punto representativos de la gráfica se acercan (o simulan) la recta y=x. También detecta outliers y valores importantes.

  3. Los puntos se encuentran muy dispersos dentro de la gráfica (sin patrones identificables), por lo que nos sigue garantizando que el modelo es bastante bueno.

  4. Con la distancia de Cook, detectamos outliers y valores importantes. Si en ambas gráficas (3 y 4) se marca el mismo punto podemos decir que tiene todas las papeletas para ser un outlier y poder así eliminarlo del conjunto de muestras.

Hacer gráficos de dataset junto con los modelos.

attach(FuelEfficiency) 
## The following objects are masked from FuelEfficiency (pos = 3):
## 
##     DIS, GPM, HP, MPG, NC, WT
FuelEfficiency %>%
  ggplot(aes(x=MPG, y=GPM)) +
  geom_point() +
  stat_smooth(method = lm)
## `geom_smooth()` using formula 'y ~ x'

FuelEfficiency %>%
  ggplot(aes(x=HP, y=GPM)) +
  geom_point() +
  stat_smooth(method = lm)
## `geom_smooth()` using formula 'y ~ x'

FuelEfficiency %>%
  ggplot(aes(x=WT, y=GPM)) +
  geom_point() +
  stat_smooth(method = lm)
## `geom_smooth()` using formula 'y ~ x'

Como hemos visto, GPM es la inversa de MPG, por lo que no es muy representativo comparar la una con la otra, por lo que la quitamos y hacemos otro modelo:

m1 <- lm(data = FuelEfficiency, formula = GPM ~ WT+DIS+NC+HP)
m1
## 
## Call:
## lm(formula = GPM ~ WT + DIS + NC + HP, data = FuelEfficiency)
## 
## Coefficients:
## (Intercept)           WT          DIS           NC           HP  
##   -1.620785     2.046783    -0.010236     0.187667     0.008787
summary(m1)
## 
## Call:
## lm(formula = GPM ~ WT + DIS + NC + HP, data = FuelEfficiency)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.66694 -0.20075  0.01016  0.23997  0.62668 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.620785   0.477872  -3.392 0.001818 ** 
## WT           2.046783   0.341733   5.989 9.95e-07 ***
## DIS         -0.010236   0.002662  -3.845 0.000522 ***
## NC           0.187667   0.115695   1.622 0.114301    
## HP           0.008787   0.005852   1.502 0.142716    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3692 on 33 degrees of freedom
## Multiple R-squared:  0.909,  Adjusted R-squared:  0.898 
## F-statistic: 82.43 on 4 and 33 DF,  p-value: < 2.2e-16

En este nuevo caso, vemos que las más signficativas son DIS y WT (***), encontrándose por detrás el término ind (Intercept).

Intentar modelos de regresión de GPM con varias variables o incluso usando modelos no lineales. Evaluar los modelos. Hacer gráficos de dataset junto con los modelos.

m2 <- lm(data = FuelEfficiency, GPM ~ poly(MPG, 2))
m2
## 
## Call:
## lm(formula = GPM ~ poly(MPG, 2), data = FuelEfficiency)
## 
## Coefficients:
##   (Intercept)  poly(MPG, 2)1  poly(MPG, 2)2  
##         4.331         -6.897          1.329
summary(m2)
## 
## Call:
## lm(formula = GPM ~ poly(MPG, 2), data = FuelEfficiency)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.13914 -0.04538  0.01597  0.03840  0.15278 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    4.330605   0.009294   466.0   <2e-16 ***
## poly(MPG, 2)1 -6.896655   0.057289  -120.4   <2e-16 ***
## poly(MPG, 2)2  1.328849   0.057289    23.2   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.05729 on 35 degrees of freedom
## Multiple R-squared:  0.9977, Adjusted R-squared:  0.9975 
## F-statistic:  7515 on 2 and 35 DF,  p-value: < 2.2e-16
m3 <- lm(data = FuelEfficiency, GPM ~ poly(MPG + WT, 2))
m3
## 
## Call:
## lm(formula = GPM ~ poly(MPG + WT, 2), data = FuelEfficiency)
## 
## Coefficients:
##        (Intercept)  poly(MPG + WT, 2)1  poly(MPG + WT, 2)2  
##              4.331              -6.854               1.448
summary(m3)
## 
## Call:
## lm(formula = GPM ~ poly(MPG + WT, 2), data = FuelEfficiency)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.20782 -0.04188  0.02535  0.05236  0.24150 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         4.33061    0.01683  257.33  < 2e-16 ***
## poly(MPG + WT, 2)1 -6.85352    0.10374  -66.06  < 2e-16 ***
## poly(MPG + WT, 2)2  1.44817    0.10374   13.96 7.17e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1037 on 35 degrees of freedom
## Multiple R-squared:  0.9924, Adjusted R-squared:  0.9919 
## F-statistic:  2280 on 2 and 35 DF,  p-value: < 2.2e-16
m4 <- lm(data = FuelEfficiency, GPM ~ MPG + WT)
m4
## 
## Call:
## lm(formula = GPM ~ MPG + WT, data = FuelEfficiency)
## 
## Coefficients:
## (Intercept)          MPG           WT  
##      6.7219      -0.1381       0.3594
summary(m4)
## 
## Call:
## lm(formula = GPM ~ MPG + WT, data = FuelEfficiency)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.25935 -0.15547 -0.02623  0.11816  0.46330 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6.72191    0.59414  11.314 3.05e-13 ***
## MPG         -0.13813    0.01186 -11.647 1.36e-13 ***
## WT           0.35939    0.10985   3.272  0.00241 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2029 on 35 degrees of freedom
## Multiple R-squared:  0.9709, Adjusted R-squared:  0.9692 
## F-statistic: 583.3 on 2 and 35 DF,  p-value: < 2.2e-16