library(readxl)
library(ggplot2)
library(plotly)
mazda2_colombia <- read_excel("D:/01_PUJ/02_02_Met_Est_Toma_decis/Scripts/mazda2_colombia.xlsx")
head(mazda2_colombia)
summary(mazda2_colombia)
## precio modelo kilometraje transmision
## Min. : 6000000 Min. :2008 Min. : 0 Length:94
## 1st Qu.:32600000 1st Qu.:2010 1st Qu.: 50250 Class :character
## Median :39500000 Median :2013 Median : 88725 Mode :character
## Mean :45382979 Mean :2014 Mean : 79084
## 3rd Qu.:55000000 3rd Qu.:2017 3rd Qu.:109750
## Max. :98000000 Max. :2022 Max. :198000
## ciudad
## Length:94
## Class :character
## Mode :character
##
##
##
Análisis: Con la información anterior se puede observar que existe un valor para precio mínimo de un vehículo Mazda 2 modelo 2022 es de “6000000”, valor que está alejado de la media y mediana de los datos además puede ser un dato falso que puede afectar el modelo de regresión. Por lo que se decide eliminar ese dato.
mazda2_colombia = mazda2_colombia[!(mazda2_colombia$precio == 6000000),]
summary(mazda2_colombia)
## precio modelo kilometraje transmision
## Min. :22000000 Min. :2008 Min. : 0 Length:93
## 1st Qu.:32900000 1st Qu.:2010 1st Qu.: 51000 Class :character
## Median :39500000 Median :2013 Median : 89450 Mode :character
## Mean :45806452 Mean :2014 Mean : 79932
## 3rd Qu.:55000000 3rd Qu.:2016 3rd Qu.:110000
## Max. :98000000 Max. :2022 Max. :198000
## ciudad
## Length:93
## Class :character
## Mode :character
##
##
##
library(ggplot2)
library(plotly)
library(ggpubr)
graf_preciovsmodelo=ggplot(mazda2_colombia,aes(y=modelo,x=precio)) + geom_point(colour = "green", size = 2) + geom_smooth()
A<- ggplotly(graf_preciovsmodelo)
A
graf_preciovskilom=ggplot(mazda2_colombia,aes(y=kilometraje,x=precio)) + geom_point(colour = "red", size = 2) + geom_smooth()
B<- ggplotly(graf_preciovskilom)
B
#ggarrange(graf_preciovsmodelo, graf_preciovskilom, labels = c("A", "B" ), ncol = 2, nrow = 1)
Análisis: realizando el paso anterior se pudo observar que ahora si el precio menor para un vehículo seria de 22000000 millones, y su mayor de 98000000 millones y que los gráficos nos muestran que a mayor modelo mayor precio y a mayor kilometraje del vehículo su precio suele ser menor.
cor(mazda2_colombia$modelo,mazda2_colombia$precio)
## [1] 0.9518097
cor(mazda2_colombia$kilometraje,mazda2_colombia$precio)
## [1] -0.5811003
library(GGally)
library(dplyr)
ggpairs(select_if(mazda2_colombia, is.numeric), lower = list(continuous = "smooth"),
diag = list(continuous = "barDiag"), axisLabels = "none")
Análisis: Como podemos observar el modelo de correlación entre las variables precio y modelo es alto (0.95) mientras que el coeficiente de correlación entre las variables kilometraje y precio y modelo y kilometraje es bajo.
#realiamos un conteo para cada tipo de transmision
tab_trans = table(mazda2_colombia$transmision)
tab_trans = (prop.table(tab_trans))
tab_trans= data.frame(tab_trans)
head(tab_trans[order(tab_trans$Freq, decreasing = TRUE),])
require(ggplot2)
graf0 <-ggplot(mazda2_colombia,aes(x= transmision, y=precio, fill=transmision))+
geom_boxplot()+
theme_bw()
ggplotly(graf0)
#Realiamos un conteo por ciudades
tab_ciudad = table(mazda2_colombia$ciudad)
tab_ciudad = (prop.table(tab_ciudad))
tab_ciudad= data.frame(tab_ciudad)
head(tab_ciudad[order(tab_ciudad$Freq, decreasing = TRUE),])
Análisis: En cuanto a las variables cualitativas como lo son el tipo de transmision y la ciudad, se observa que el tipo de trasmisión Automática presenta un 46% seguida de la mecanica con un 43%. Por otro lado la ciudad en donde existen más vehículos a la venta es en Medellin con un 25% de los datos seguido por la ciudad de cali.
3.Proponer un modelo de regresión lineal múltiple e interpretar los resultados (betas)
#se ingresa una semilla para replicar el ejercicio
set.seed(123)
mod_autos=lm(precio~modelo+kilometraje+ciudad+transmision,data=mazda2_colombia)
summary(mod_autos)
##
## Call:
## lm(formula = precio ~ modelo + kilometraje + ciudad + transmision,
## data = mazda2_colombia)
##
## Residuals:
## Min 1Q Median 3Q Max
## -12015137 -2078731 0 2318771 15985390
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.575e+09 4.122e+08 -18.377 < 2e-16 ***
## modelo 3.790e+06 2.046e+05 18.519 < 2e-16 ***
## kilometraje -3.925e+01 1.719e+01 -2.284 0.02593 *
## ciudadBarranquilla -6.786e+06 4.539e+06 -1.495 0.14017
## ciudadBello -2.671e+05 4.355e+06 -0.061 0.95130
## ciudadBogotá -9.646e+06 4.140e+06 -2.330 0.02320 *
## ciudadBucaramanga -6.517e+06 6.428e+06 -1.014 0.31471
## ciudadCali -6.259e+06 4.015e+06 -1.559 0.12425
## ciudadCartago -6.485e+06 6.737e+06 -0.963 0.33963
## ciudadCúcuta -1.401e+07 6.477e+06 -2.162 0.03459 *
## ciudadEnvigado -7.083e+06 5.528e+06 -1.281 0.20503
## ciudadFloridablanca -7.534e+06 4.703e+06 -1.602 0.11442
## ciudadFusagasugá -7.933e+06 6.410e+06 -1.238 0.22071
## ciudadGirón -7.835e+06 6.282e+06 -1.247 0.21713
## ciudadHuila -1.001e+07 6.537e+06 -1.531 0.13091
## ciudadItagüí -7.289e+06 6.432e+06 -1.133 0.26161
## ciudadLa Ceja -8.482e+05 6.647e+06 -0.128 0.89888
## ciudadManizales -5.750e+06 4.531e+06 -1.269 0.20936
## ciudadMedellín -5.896e+06 3.949e+06 -1.493 0.14072
## ciudadNeiva -4.960e+06 6.542e+06 -0.758 0.45139
## ciudadPereira -5.651e+06 4.777e+06 -1.183 0.24149
## ciudadPopayán -3.245e+06 6.267e+06 -0.518 0.60653
## ciudadRionegro -9.445e+06 5.286e+06 -1.787 0.07901 .
## ciudadSabaneta -8.782e+06 5.330e+06 -1.648 0.10464
## ciudadSan Gil -5.937e+06 6.372e+06 -0.932 0.35525
## ciudadTuluá -6.797e+06 6.413e+06 -1.060 0.29346
## ciudadValledupar -1.657e+06 6.407e+06 -0.259 0.79680
## ciudadVillavicencio -5.611e+06 4.494e+06 -1.249 0.21668
## ciudadZipaquirá -4.892e+06 6.645e+06 -0.736 0.46449
## transmisionAutomática Secuencial 3.545e+06 2.583e+06 1.373 0.17497
## transmisionMecánica -3.997e+06 1.390e+06 -2.875 0.00558 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5105000 on 60 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.9456, Adjusted R-squared: 0.9184
## F-statistic: 34.77 on 30 and 60 DF, p-value: < 2.2e-16
vamos a mejorar el modelo
mod_autos_mejorado = step(mod_autos)
## Start: AIC=2835.22
## precio ~ modelo + kilometraje + ciudad + transmision
##
## Df Sum of Sq RSS AIC
## - ciudad 26 5.1547e+14 2.0791e+15 2809.2
## <none> 1.5636e+15 2835.2
## - kilometraje 1 1.3594e+14 1.6996e+15 2840.8
## - transmision 2 3.5618e+14 1.9198e+15 2849.9
## - modelo 1 8.9376e+15 1.0501e+16 3006.5
##
## Step: AIC=2809.15
## precio ~ modelo + kilometraje + transmision
##
## Df Sum of Sq RSS AIC
## <none> 2.0791e+15 2809.2
## - kilometraje 1 1.1905e+14 2.1981e+15 2812.2
## - transmision 2 4.4535e+14 2.5244e+15 2822.8
## - modelo 1 1.2134e+16 1.4213e+16 2982.1
summary(mod_autos_mejorado)
##
## Call:
## lm(formula = precio ~ modelo + kilometraje + transmision, data = mazda2_colombia)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11014491 -3530955 -584412 3003133 18577384
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.301e+09 3.285e+08 -22.224 < 2e-16 ***
## modelo 3.650e+06 1.629e+05 22.403 < 2e-16 ***
## kilometraje -3.114e+01 1.403e+01 -2.219 0.02911 *
## transmisionAutomática Secuencial 4.708e+06 2.116e+06 2.225 0.02871 *
## transmisionMecánica -3.249e+06 1.087e+06 -2.989 0.00364 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4917000 on 86 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.9277, Adjusted R-squared: 0.9243
## F-statistic: 275.8 on 4 and 86 DF, p-value: < 2.2e-16
Análisis: Con el modelo inicial podemos observar que este toma en cuenta todas las variables tanto cualitativas como cuantitativas que se tienen disponibles, mostrándonos un r2 de 0.91. Cuando aplicamos el modelo mejorado se excluyen variables cualitativas lo que genera un modelo con un r2 más alto (0.92) por lo que las variables en uso pueden llegar a representar el 92% de la variable precio.
Para la validación cruzada vamos tomar el 80% de los datos para modelar y el 20% para predecir:
Modelar
# para un total de 94 datos (80% para modelar y 20% para validar):
modelar= sample(1:94, size=76)
modelar
## [1] 31 79 51 14 67 42 50 43 91 25 69 57 9 72 26 7 89 82 36 87 15 32 93 77 41
## [26] 23 27 60 53 81 66 68 73 38 85 34 29 5 8 12 13 18 33 63 90 61 21 74 70 80
## [51] 94 16 30 6 56 22 39 44 17 59 4 54 83 49 19 88 20 37 58 86 84 3 40 75 55
## [76] 45
#sacamos los datos en base a los 76 para modelar
autos_modelar= mazda2_colombia[modelar,]
head(autos_modelar)
# data set con 18 datos para validar:
autos_validar= mazda2_colombia[-modelar,]
head(autos_validar)
#predecir set de validacion
pre_autos_modelar = lm(formula = precio ~ modelo + transmision, data = mazda2_colombia)
summary(pre_autos_modelar)
##
## Call:
## lm(formula = precio ~ modelo + transmision, data = mazda2_colombia)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11015256 -3252930 -584117 3157402 19812086
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.626e+09 3.006e+08 -25.368 < 2e-16 ***
## modelo 3.810e+06 1.493e+05 25.515 < 2e-16 ***
## transmisionAutomática Secuencial 5.228e+06 2.150e+06 2.432 0.01706 *
## transmisionMecánica -3.168e+06 1.111e+06 -2.852 0.00542 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5027000 on 87 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.9235, Adjusted R-squared: 0.9209
## F-statistic: 350.2 on 3 and 87 DF, p-value: < 2.2e-16
Validar:
#predecir set de validacion
precio_pred = predict(pre_autos_modelar, list(modelo=autos_validar$modelo, transmision=autos_validar$transmision))
precio_pred
## 1 2 3 4 5 6 7 8
## 55325636 44537361 33106222 28652978 29295842 59778880 24842598 24842598
## 9 10 11 12 13 14 15 16
## 63589259 48347740 32463357 52158120 74377535 36916601 40084117 NA
## 17 18
## 62946395 40726981
#comparar precio real
precio_real = autos_validar$precio
error_precio = precio_real-precio_pred
resultado_precio = data.frame(precio_real, precio_pred, error_precio)
head(resultado_precio, 5)
#calcular el Indicador de evaluacion de prediccion
MAE=mean(abs(error_precio))
MAE
## [1] NA
(MAE/mean(precio_real))*100
## [1] NA
## RMSE
RMSE = sqrt(mean((error_precio)^2))
RMSE
## [1] NA
Realizando el análisis de validación cruzada se puede observar que el modelo puede llegar errar en un 9% del precio promedio de acuerdo al MAE y a la vez nos muestra que la diferencia entre el precio real vs precio predictor puede llegar a ser de 4040249 y la desviación estándar de la varianza es de 4702245 de acuerdo al RMSE.
Con este tipo de modelo de regresión múltiple, se puede evidenciar que toma bastante importancia ya que a través de él y de un correcto modelado de los datos, va permitir predecir ciertos parámetros que son de suma importancia para la toma de decisiones de cualquier persona u organización, en este caso para la compra o venta de un vehículo, consiguiendo con esto que se pueda maximizar la ganancia si es que estoy como vendedor o minimizar la inversión si es que actuó como comprador de un vehículo.