## [1] "web-scraper-order" "web-scraper-start-url" "links"
## [4] "links-href" "precio" "modelo"
## [7] "kilometraje" "transmision" "ciudad"
La base acontinuación trabajada contiene información de ofertas de vehiculos tipo mazda 2, halladas en el portal de OLX en Colombia, por medio de Webscrapping. Entre las variables que se resultan relevantes se encuentran el modelo (año), la transmision, la ciudad,el kilometraje y como variable respuesta el precio (dado en millon).
La base cuenta con un total de 9 columnas y 313 observaciones.
| precio | modelo | kilometraje | transmision | ciudad |
|---|---|---|---|---|
| $ 31.000.000 | 2009 | 120.470 km | Mecánica | Sector Centro, Armenia, Quindío |
| $ 39.000.000 | 2013 | 87.000 km | Automática | Los Angeles, Engativá, Bogotá |
| $ 66.000.000 | 2018 | 96.000 km | Automática | Guayacanes, Manizales, Caldas |
| $ 27.800.000 | 2008 | 130.000 km | Mecánica | El Olivo, San Juan de Pasto, Nariño |
| $ 34.000.000 | 2008 | 140.000 km | Automática | San Bernardo, Medellín, Antioquia |
| $ 56.500.000 | 2018 | 30.000 km | Mecánica | Bosques del Limonar, Cali, Valle del Cauca |
Pre-Procesamiento de Datos
mazda_col$precio=as.numeric(sub("$", "", sub(".", "", precio, fixed=TRUE), fixed=TRUE))
mazda_col$modelo=as.character(mazda_col$modelo)
mazda_col[c('ciudad_1', 'ciudad_2','ciudad_3')] <- str_split_fixed(mazda_col$ciudad, ',', 3)
mazda_col$kilometraje=as.numeric(sub("km", "", sub(".", "", mazda_col$kilometraje, fixed=TRUE), fixed=TRUE))
#### Filtrando columnas necesarias:
mazda_col= mazda_col[,c("web-scraper-order","precio","modelo","kilometraje","transmision","ciudad","ciudad_1","ciudad_2", "ciudad_3")]
Revisión de datos Faltantes
apply(is.na(mazda_col), 2, sum)
## web-scraper-order precio modelo kilometraje
## 0 0 0 0
## transmision ciudad ciudad_1 ciudad_2
## 4 0 0 0
## ciudad_3
## 0
Se observa que existen 4 valores faltantes para la variable transmision, como es dificil predecir si es automatico o manual el vehiculo, se evaluará sacar estos registros del estudio, no tiene mucho sentido crear otra categoría adicional para los faltantes, pues no representan ni el 2% de la base.
tabla_modelo = tabla_freq(mazda_col$modelo)
tabla_transmision = tabla_freq(mazda_col$transmision)
kbl(list(tabla_modelo,tabla_transmision),caption = "<center><strong>Modelo (año) y Tipo de transmision</strong></center>") %>%
kable_paper(bootstrap_options = "striped")
|
|
Como puede observarse hay un año que se puede considerar atípico que es 1995. Al ser una variable con tantos niveles, se propone convertirla en numerica, hallar los cuartiles y de acuerdo a eso recategorizarla para su posterior uso en el modelo. Respecto a la transmision cerca del 55% se trata de una version automática, por lo que tambien se reagrupara para una mejor utilización de la variable.
#### Organizando transmision
mazda_col=mazda_col %>%
mutate(transmision = ifelse(as.character(transmision) == "Automática Secuencial", "Automática", as.character(transmision)))
#### Organizando modelo de acuerdo a cuartiles
mazda_col$modelo=as.numeric(mazda_col$modelo)
mazda_col$modelo_cat <- cut(mazda_col$modelo, breaks = c(0, 2011, 2014,2018, Inf),
labels = c("menos_2011", "2011_2014", "2014_2018","2018_2022"),
right = TRUE)
tabla_modelo_new = tabla_freq(mazda_col$modelo_cat)
tabla_transmision_new = tabla_freq(mazda_col$transmision)
kbl(list(tabla_modelo_new,tabla_transmision_new),caption = "<center><strong>Modelo (año) y Tipo de transmision (Recategorizadas) </strong></center>") %>%
kable_paper(bootstrap_options = "striped")
|
|
Se observa en la siguiente tabla, que parecen existir un punto atipico pues reporta que un vehiculo tiene 280 mil kms recorridos. En cuanto al precio dado en millones,el promedio del precio del vehiculo esta alrededor de 50 millones de pesos.
tabla_km = descriptivas(mazda_col$kilometraje)
tabla_precio = descriptivas(mazda_col$precio)
kbl(list(tabla_km, tabla_precio ),
caption = "<center><strong>Distribución Kilometraje y Precio Mazda 2</strong></center>") %>%
kable_paper(bootstrap_options = "striped")
|
|
mazda_col$precio=as.numeric(mazda_col$precio)
par(mfrow = c(2,2))
boxplot(mazda_col$precio, horizontal = TRUE, main = "Boxplot Precio Vehiculo Mazda 2",col="#A6CEE3" )
hist(mazda_col$precio,main = "Histograma Precio Vehiculo Mazda 2" , ylab = "Frecuencia" , xlab = "Millones de pesos",col="#A6CEE3")
boxplot(mazda_col$kilometraje, horizontal = TRUE, main = "Boxplot Kms recorridos",col="#A6CEE3" )
hist(mazda_col$kilometraje,main = "Histograma Kms recorridos" , ylab = "Frecuencia" , xlab = "m2",col="#A6CEE3")
Análisis Bivariado
Se puede observar que a medida que va aumentando el modelo (año) del mazda 2, el precio va incrementando, apesar de que cuando esta entra 2018 y 2022 existen precios atipicos, lo que puede deberse a algun dato incorrecto dentro de la base, el precio promedio de los vehiculos con modelo menor a 2011 es de 32.5 millones.
El promedio del precio de vehiculos con transmision automática, es en promedio de 57 millones vs 38.5 millones que representa el promedio de la transmisión mecánica.
Existen ciertos puntos atipicos e influyentes al visualizar la relación del precio del vehiculo con el kilometraje, en su mayoria existe una relación negativa entre ambas variables como es de esperarse.
Análisis Correlación
## [1] -0.6529679
Se puede observar que las relaciones entre variables continuas con respecto a la variable precio del vehiculo, es apenas del 65% entre el kilomtreaje y el precio, con tendencia negativa.
options(scipen=999)
ml=lm(precio~ kilometraje+transmision+modelo_cat,data=mazda_col)
summary(ml)
##
## Call:
## lm(formula = precio ~ kilometraje + transmision + modelo_cat,
## data = mazda_col)
##
## Residuals:
## Min 1Q Median 3Q Max
## -66035 -4026 353 3956 92428
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 40607.54297 2566.41770 15.823 < 0.0000000000000002 ***
## kilometraje -0.05068 0.01944 -2.606 0.00960 **
## transmisionMecánica -5491.02629 1310.46340 -4.190 0.0000366 ***
## modelo_cat2011_2014 5968.16141 1803.02240 3.310 0.00105 **
## modelo_cat2014_2018 21079.86913 1978.18620 10.656 < 0.0000000000000002 ***
## modelo_cat2018_2022 38590.37803 2483.34056 15.540 < 0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11160 on 303 degrees of freedom
## Multiple R-squared: 0.7122, Adjusted R-squared: 0.7075
## F-statistic: 150 on 5 and 303 DF, p-value: < 0.00000000000000022
\[H_0 :\beta_1,.., \beta_5=0\] \[H_a :\beta_1,.., \beta_5\neq 0\]
Se Puede observar que \(|t_0| > t_{\alpha/2 ,n-2}\), entonces se rechaza \(H_0\), y se dice que \(\beta_1\) es diferente de 0.Lo mismo sucede para el resto de betas a un nivel de significancia del 5%.
El coeficiente de determinación representa la proporción de la variabilidad de Y que es posible explicar a travez de x. En este caso el modelo construido explica el 70.7% de las variaciones del precio de los vehiculos mazda 2 a traves del kilometraje, la transmision y el modelo.
\[ Y_{(precio)} =40,607.5-0.051*kms-5,491.03*mecanico+5,968.2*modelocat2+21,079.9*modelocat3+38,590.4*modelocat4\]
Interpretación Betas
\(\beta_0:\)Si no se tuvieran en cuenta el resto de variables, el precio de vehiculos mazda 2 en promedio seria de cerca 41 millones de pesos.
\(\beta_1:\)Por cada kilometro que aumente el vehiculo, se espera que en promedio el precio del vehicuo mazda 2 disminuya en 50 mil pesos, sin tener en cuenta el modelo y la transmisión.
\(\beta_2:\)Los vehiculos mazda 2 de transmisión mecánica se espera que en promedio el precio del vehicuo mazda 2 disminuya en 5.5 millones de pesos versus los vehiculos mazda 2 automáticos.
\(\beta_3:\)Los vehiculos mazda 2 con modelo entre 2011 y 2014 se espera que en promedio el precio del vehicuo mazda 2 aumente cerca de 6 millones de pesos versus los vehiculos mazda 2 con modelo menor a 2011.
\(\beta_4:\)Los vehiculos mazda 2 con modelo entre 2014 y 2018 se espera que en promedio el precio del vehicuo mazda 2 aumente cerca de 21 millones de pesos versus los vehiculos mazda 2 con modelo menor a 2011.
\(\beta_5:\)Los vehiculos mazda 2 con modelo entre 2018 y 2022 se espera que en promedio el precio del vehicuo mazda 2 aumente cerca de 38.5 millones de pesos versus los vehiculos mazda 2 con modelo menor a 2011.
Validación de Supuestos Modelo 1:
error_medio_m1=mean(residuals(ml))
error_medio_m1
## [1] 0.0000000000004694138
El valor esperado (promedio) de los residuales es igual a 0.
\[H_0 : X \sim N(\mu,\sigma^2)\] \[H_a : X \nsim N(\mu,\sigma^2)\]
norm_m1=shapiro.test(ml$residuals)
norm_m1
##
## Shapiro-Wilk normality test
##
## data: ml$residuals
## W = 0.69593, p-value < 0.00000000000000022
Con P-value es menor a a 0.05 (nivel de significancia escogido), se rechaza \(H_0\), entonces podría pensar que los errores no siguen una distribución normal.
\(H_0 : Los \quad residuales \quad se \quad distribuyen \quad con \quad la \quad misma \quad varianza\)
\(H_a : Los \quad residuales \quad no \quad se \quad distribuyen \quad con \quad la \quad misma \quad varianza\)
homocedasticidad_m1=bptest(ml)
homocedasticidad_m1
##
## studentized Breusch-Pagan test
##
## data: ml
## BP = 16.938, df = 5, p-value = 0.004618
Como P-value es menor a 0.05 (nivel de significancia escogido), no se rechaza \(H_0\), entonces se podría pensar que los errores cumplen con el supuesto de homocedasticidad.
\[H_0 : No \quad existe \quad correlación \quad entre \quad los \quad errores\] \[H_a : Existe \quad correlación \quad entre \quad los \quad errores\]
autocor_m1=dwt(ml, alternative = "two.sided")
autocor_m1
## lag Autocorrelation D-W Statistic p-value
## 1 0.02343263 1.952991 0.614
## Alternative hypothesis: rho != 0
Como P-value es mayor a 0.05 (nivel de significancia escogido),no se rechaza \(H_0\), entonces se podría pensar que los errores no estan autocorrelacionados.
ml_2=step(ml)
## Start: AIC=5765.64
## precio ~ kilometraje + transmision + modelo_cat
##
## Df Sum of Sq RSS AIC
## <none> 37723533543 5765.6
## - kilometraje 1 845708643 38569242186 5770.5
## - transmision 1 2185883403 39909416946 5781.0
## - modelo_cat 3 32550933940 70274467483 5951.9
ml_2
##
## Call:
## lm(formula = precio ~ kilometraje + transmision + modelo_cat,
## data = mazda_col)
##
## Coefficients:
## (Intercept) kilometraje transmisionMecánica
## 40607.54297 -0.05068 -5491.02629
## modelo_cat2011_2014 modelo_cat2014_2018 modelo_cat2018_2022
## 5968.16141 21079.86913 38590.37803
Según lo anterior el modelo sugerido es el que actualmente es esta trabajando, pues no sugiere eliminar ninguna variable.
control <- trainControl(method = "cv", number = 10)
#fit a regression model and use k-fold CV to evaluate performance
model_cv_1 <- train(precio ~ kilometraje + transmision + modelo_cat, data = mazda_col, method = "lm", trControl = control)
#view summary of k-fold CV
print(model_cv_1)
## Linear Regression
##
## 309 samples
## 3 predictor
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 279, 279, 277, 278, 277, 278, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 10129.14 0.7626013 6204.231
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
Un modelo que permita de predecir el precio del vehiculos dadas las caracteristicas expuestas anteriormente, como herramienta le sería de ayuda al consumidor para saber tanto a que precio vender su vehiculo como a que precio comprar. Saber si el posible negocio que el quiera realizar se encuentra dentro de lo que en promedio se puede observar.