Punto 1.

Por medio de web scraping descargar la base de datos de precios de vehiculos mazda 2 para Colombia del portal olx https://www.olx.com.co/, con las variables: precio, kilometraje, modelo, transmición y ciudad.

library(readxl)
data_mazda2 <- read_excel("D:\\ESTUDIO\\MASTER IN DATA SCIENCE\\Semester 2\\Metodos estadisticos para la toma de decisiones\\MOD2\\Regresion Lineal Multiple\\data_mazda2.xlsx")

head(data_mazda2)
precio modelo kilometros transmicion ciudad
45000000 2015 70000 Automática Universidad Pontificia Bolivariana, Medellín, Antioquia
86000000 2022 5000 Automática Villa Julia, Villavicencio, Meta
66000000 2020 62585 Automática San José V Sector, Suba, Bogotá
123456789 2019 49000 Automática Secuencial Avenida Centenario, Armenia, Quindío
84050000 2022 0 Automática Prados del Norte, Cali, Valle del Cauca
44000000 2015 36800 Mecánica Villa Firenze, Floridablanca, Santander

Nota: Se observa que la columna ciudad en verdad tiene tres ubicaciones (barrio, cuidad, departamento), por lo que se procede a dividir esta columna por el delimitador “,” para obtener únicamente el campo de ciudad:

library(dplyr)
library(tidyr)
library(stringr)
data_ciudad = data.frame(str_split_fixed(data_mazda2$ciudad, ", ", 3))
data_mazda2$ciudad = data_ciudad$X2

head(data_mazda2)
precio modelo kilometros transmicion ciudad
45000000 2015 70000 Automática Medellín
86000000 2022 5000 Automática Villavicencio
66000000 2020 62585 Automática Suba
123456789 2019 49000 Automática Secuencial Armenia
84050000 2022 0 Automática Cali
44000000 2015 36800 Mecánica Floridablanca

Punto 2.

Realizar una exploración de datos para evaluar la posible relación entre precio con las demás variables.

summary(data_mazda2)
##      precio              modelo       kilometros     transmicion       
##  Min.   :  6000000   Min.   :2008   Min.   :     0   Length:103        
##  1st Qu.: 33200000   1st Qu.:2011   1st Qu.: 40250   Class :character  
##  Median : 40500000   Median :2013   Median : 88000   Mode  :character  
##  Mean   : 47019969   Mean   :2014   Mean   : 77252                     
##  3rd Qu.: 56725000   3rd Qu.:2018   3rd Qu.:110000                     
##  Max.   :123456789   Max.   :2022   Max.   :198000                     
##     ciudad         
##  Length:103        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
require(ggplot2)
require(plotly)
graph1= ggplot(data_mazda2,aes( y=precio))+
  geom_boxplot()+
  theme_bw()
graph2= ggplot(data_mazda2,aes( y=modelo))+
  geom_boxplot()+
  theme_bw()
graph3= ggplot(data_mazda2,aes( y=kilometros))+
  geom_boxplot()+
  theme_bw()

library(patchwork)
graph1 + graph2 + graph3

Análisis: En el resumen anterior se nota de manera general que el máximo valor para precio de un vehículo mazda 2 es de “123456789”, valor que está alejado de la media y mediana de los datos ademas puede ser un dato falso que puede afectar el modelo de regresión. Por lo que se decide eliminar ese dato:

data_mazda2 = data_mazda2[!(data_mazda2$precio == 123456789),]
summary(data_mazda2)
##      precio             modelo       kilometros     transmicion       
##  Min.   : 6000000   Min.   :2008   Min.   :     0   Length:102        
##  1st Qu.:33050000   1st Qu.:2011   1st Qu.: 39875   Class :character  
##  Median :40200000   Median :2013   Median : 88725   Mode  :character  
##  Mean   :46270588   Mean   :2014   Mean   : 77529                     
##  3rd Qu.:56375000   3rd Qu.:2017   3rd Qu.:110000                     
##  Max.   :98000000   Max.   :2022   Max.   :198000                     
##     ciudad         
##  Length:102        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
library(GGally)
library(dplyr)
ggpairs(select_if(data_mazda2, is.numeric), lower = list(continuous = "smooth"),
        diag = list(continuous = "barDiag"), axisLabels = "none")

Análisis: El coeficiente de correlación entre las variables precio y modelo es alto (0.87). El coef de correlación entre las variables modelo y kilometros es bajo (0.58) por lo que el modelo de regresón no tiene mayor riesgo de presentar multicolinealidad.

require(ggplot2)
ggplot(data_mazda2,aes(x= transmicion, y=precio, fill=transmicion))+
  geom_boxplot()+
  theme_bw()

tabla1 = table(data_mazda2$ciudad)
tabla1 = (prop.table(tabla1))
tabla1= data.frame(tabla1)
head(tabla1[order(tabla1$Freq, decreasing = TRUE),])
Var1 Freq
18 Medellín 0.2352941
7 Cali 0.1568627
17 Manizales 0.0686275
4 Bello 0.0490196
20 Pereira 0.0490196
3 Barranquilla 0.0392157

Análisis: En cuanto a las variables cualitativas, se observa que el tipo de trasmisión (Automática Secuencial) presenta valores por encima de las otras categorías en cuanto al precio del vehículo. Por otro lado la ciudad en donde existen más vehículos a la venta es en Medellin con un 23% de los datos.

Punto 3.

Proponer un modelo de regresión lineal múltiple e interpretar los resultados (betas)

Modelo de Regresión Lineal Multiple

mod_mazda = lm(formula= precio ~ modelo + kilometros + ciudad + transmicion, data=data_mazda2)
summary(mod_mazda)
## 
## Call:
## lm(formula = precio ~ modelo + kilometros + ciudad + transmicion, 
##     data = data_mazda2)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -64813422  -2100906         0   2613456  21519964 
## 
## Coefficients:
##                                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      -6.497e+09  7.748e+08  -8.386 4.84e-12 ***
## modelo                            3.250e+06  3.844e+05   8.454 3.65e-12 ***
## kilometros                       -3.032e+01  3.014e+01  -1.006   0.3180    
## ciudadArmenia                     4.780e+06  9.140e+06   0.523   0.6027    
## ciudadBarranquilla                9.629e+05  7.734e+06   0.124   0.9013    
## ciudadBello                       4.612e+06  7.552e+06   0.611   0.5435    
## ciudadBucaramanga                -2.736e+05  1.158e+07  -0.024   0.9812    
## ciudadCaldas                     -3.325e+06  1.164e+07  -0.286   0.7760    
## ciudadCali                       -3.594e+06  6.314e+06  -0.569   0.5711    
## ciudadChapinero                  -3.930e+06  9.311e+06  -0.422   0.6743    
## ciudadCúcuta                     -4.694e+06  1.016e+07  -0.462   0.6456    
## ciudadCundinamarca                2.574e+06  9.326e+06   0.276   0.7834    
## ciudadEnvigado                    3.204e+06  9.239e+06   0.347   0.7298    
## ciudadFloridablanca              -1.593e+06  7.699e+06  -0.207   0.8367    
## ciudadGirón                      -1.633e+06  1.135e+07  -0.144   0.8860    
## ciudadHuila                      -3.086e+06  1.146e+07  -0.269   0.7885    
## ciudadItagüí                      4.374e+05  1.161e+07   0.038   0.9701    
## ciudadKennedy                    -5.034e+06  8.587e+06  -0.586   0.5597    
## ciudadManizales                   1.601e+06  7.037e+06   0.228   0.8207    
## ciudadMedellín                    2.066e+06  6.246e+06   0.331   0.7418    
## ciudadNeiva                       5.971e+06  1.166e+07   0.512   0.6102    
## ciudadPereira                     1.424e+06  7.252e+06   0.196   0.8449    
## ciudadPopayán                     1.761e+06  1.137e+07   0.155   0.8774    
## ciudadSabaneta                   -2.393e+06  9.105e+06  -0.263   0.7935    
## ciudadSan Juan de Pasto           5.653e+06  1.150e+07   0.492   0.6247    
## ciudadSanta Fé                    4.180e+06  1.173e+07   0.356   0.7227    
## ciudadSanta Marta                 6.491e+06  1.179e+07   0.551   0.5837    
## ciudadSantander                   2.639e+06  1.143e+07   0.231   0.8181    
## ciudadSuba                       -1.555e+04  1.184e+07  -0.001   0.9990    
## ciudadValle del Cauca             2.493e+06  9.185e+06   0.271   0.7869    
## ciudadValledupar                  3.689e+06  1.169e+07   0.316   0.7534    
## ciudadVillavicencio               1.988e+06  7.501e+06   0.265   0.7918    
## transmicionAutomática Secuencial  8.402e+06  4.121e+06   2.039   0.0454 *  
## transmicionMecánica              -2.823e+06  2.625e+06  -1.075   0.2860    
## transmicionnull                  -1.025e+06  8.195e+06  -0.125   0.9008    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9750000 on 67 degrees of freedom
## Multiple R-squared:  0.8187, Adjusted R-squared:  0.7268 
## F-statistic: 8.901 on 34 and 67 DF,  p-value: 2.627e-14

Modelo de Regresión Lineal Multiple - Mejorado

mod_mazda_mejorado = step(mod_mazda)
## Start:  AIC=3310.05
## precio ~ modelo + kilometros + ciudad + transmicion
## 
##               Df  Sum of Sq        RSS    AIC
## - ciudad      29 8.0644e+14 7.1754e+15 3264.2
## - kilometros   1 9.6238e+13 6.4652e+15 3309.6
## <none>                      6.3690e+15 3310.1
## - transmicion  3 6.2698e+14 6.9960e+15 3313.6
## - modelo       1 6.7946e+15 1.3164e+16 3382.1
## 
## Step:  AIC=3264.22
## precio ~ modelo + kilometros + transmicion
## 
##               Df  Sum of Sq        RSS    AIC
## - kilometros   1 1.5871e+13 7.1913e+15 3262.4
## <none>                      7.1754e+15 3264.2
## - transmicion  3 8.8950e+14 8.0649e+15 3270.1
## - modelo       1 1.1634e+16 1.8809e+16 3360.5
## 
## Step:  AIC=3262.44
## precio ~ modelo + transmicion
## 
##               Df  Sum of Sq        RSS    AIC
## <none>                      7.1913e+15 3262.4
## - transmicion  3 9.1464e+14 8.1059e+15 3268.7
## - modelo       1 1.5986e+16 2.3177e+16 3379.8
summary(mod_mazda_mejorado)
## 
## Call:
## lm(formula = precio ~ modelo + transmicion, data = data_mazda2)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -67311899  -2975989   -343145   2880851  24688101 
## 
## Coefficients:
##                                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      -6.734e+09  4.616e+08 -14.587  < 2e-16 ***
## modelo                            3.367e+06  2.293e+05  14.684  < 2e-16 ***
## transmicionAutomática Secuencial  9.267e+06  3.267e+06   2.837  0.00555 ** 
## transmicionMecánica              -2.469e+06  1.839e+06  -1.343  0.18251    
## transmicionnull                  -3.694e+06  6.221e+06  -0.594  0.55397    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8610000 on 97 degrees of freedom
## Multiple R-squared:  0.7953, Adjusted R-squared:  0.7869 
## F-statistic: 94.23 on 4 and 97 DF,  p-value: < 2.2e-16

Análisis: El modelo inicial toma en cuenta todas las variables tanto cualitativas como cuantitativas que se tienen disponibles, arrojando un r2 de 0.71. En el modelo mejorado se excluyen variables y se dejan únicamente (modelo y transmicion) lo que genera un modelo con un r2 más alto (0.75) por lo que las variables en uso representan el 75% de la variable precio.

Punto 4.

Validad el poder predictivo del Modelo con Validación Cruzada.

Validación Cruzada

Para la validación cruzada se toma el 80% de los datos para modelar y el 20% para predecir:

Modelar

#
# Conjunto de 102 datos (80% para modelar y 20% para validar):

id_modelar= sample(1:102, size=82)
id_modelar
##  [1]  17  82  64  20  15  18  32   3 100  77  43  69  70  59  63  25  11   5  10
## [20]  95  80  26  92  84  99  72  39  93  55  86  56  29   4  22  76  50  65   8
## [39]  52  38  78  49  74  48  31  97  67  19   6  75  58  79   2  54  28  61  73
## [58]  91  14  68  88  90  46   9  85 101  44  89  51  87  37  71  83  27  96  34
## [77]  47  24  42  12  30  53
# data set con 72 datos para modelar:
mazda_modelar= data_mazda2[id_modelar,]
head(mazda_modelar)
precio modelo kilometros transmicion ciudad
67000000 2017 61997 Automática Medellín
35500000 2011 125000 Mecánica Pereira
31500000 2008 110000 Mecánica Bello
31800000 2011 83000 Mecánica Medellín
56000000 2016 102000 Automática Santa Fé
58500000 2017 100000 Automática Cali
# data set con 18 datos para validar:
mazda_validar= data_mazda2[-id_modelar,]
head(mazda_validar)
precio modelo kilometros transmicion ciudad
45000000 2015 70000 Automática Medellín
56500000 2018 30000 Mecánica Cali
42500000 2013 102222 Automática Itagüí
69000000 2018 35200 Automática Secuencial Pereira
32000000 2009 127000 Automática Valledupar
30000000 2008 174 Mecánica Antioquia
mod_mazda_modelar = lm(formula = precio ~ modelo + transmicion, data = data_mazda2)
summary(mod_mazda_modelar)
## 
## Call:
## lm(formula = precio ~ modelo + transmicion, data = data_mazda2)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -67311899  -2975989   -343145   2880851  24688101 
## 
## Coefficients:
##                                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      -6.734e+09  4.616e+08 -14.587  < 2e-16 ***
## modelo                            3.367e+06  2.293e+05  14.684  < 2e-16 ***
## transmicionAutomática Secuencial  9.267e+06  3.267e+06   2.837  0.00555 ** 
## transmicionMecánica              -2.469e+06  1.839e+06  -1.343  0.18251    
## transmicionnull                  -3.694e+06  6.221e+06  -0.594  0.55397    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8610000 on 97 degrees of freedom
## Multiple R-squared:  0.7953, Adjusted R-squared:  0.7869 
## F-statistic: 94.23 on 4 and 97 DF,  p-value: < 2.2e-16

Validar:

Precio modelo:
predict_precio = predict(mod_mazda_modelar, list(modelo=mazda_validar$modelo, transmicion=mazda_validar$transmicion))
predict_precio
##        1        2        3        4        5        6        7        8 
## 49744677 57375817 43011186 69111941 29544202 23708358 72478687 30441850 
##        9       10       11       12       13       14       15       16 
## 26177456 37175341 43011186 26177456 47275579 60742563 33808595 46377932 
##       17       18       19       20 
## 37175341 25849762 64109309 50642325
Precio real:
precio_real = mazda_validar$precio

error = precio_real-predict_precio

resultado = data.frame(precio_real, predict_precio, error)
head(resultado, 5)
precio_real predict_precio error
45000000 49744677 -4744677.5
56500000 57375817 -875816.8
42500000 43011186 -511185.7
69000000 69111941 -111941.1
32000000 29544202 2455797.9
#Mean Absolut Error

MAE = mean(abs(error))
MAE
## [1] 3127118

MAE indica que la diferencia entre el peso real vs el peso predicho en promedio es de 3664746 de pesos.

Punto 5.

Discutir potenciales usos del modelo como herramienta practica (como monetizar los resultados de este modelo)

El uso de modelos de regresión lineal es bastante amplio, para este caso de ejemplo, el modelo permite predecir o tomar decisiones relacionadas con la compra-venta de automóviles maximizando las ganancias y minimizando riesgo al momento de comprar un auto.