1. Datos conseguidos despues de relizar el Web - Scraping.
Cargar Datos
library(tidyverse)
library(dplyr)
library(ggplot2)
library(plotly)
library(psych)
library(GGally)
library(ggthemes)
library(ggpubr)
library(readr)
olxMazda2 <- read_delim("~/Unidad2/webScraping/olxMazda2.csv",
delim = ";", escape_double = FALSE, col_types = cols(transmision = col_character()),
trim_ws = TRUE)
olxMazda2
## # A tibble: 321 × 7
## `link-href` precio kilom…¹ modelo ano trans…² ciudad
## <chr> <dbl> <dbl> <chr> <dbl> <chr> <chr>
## 1 https://www.olx.com.co/item/hermo… 4.5 e7 83000 2 HAT… 2015 Mecáni… Piede…
## 2 https://www.olx.com.co/item/vendo… 3.98e7 92540 2 HAT… 2015 Mecáni… San J…
## 3 https://www.olx.com.co/item/mazda… 6.1 e7 61000 2 SED… 2020 Mecáni… Rione…
## 4 https://www.olx.com.co/item/se-ve… 5.65e7 53000 2 2016 Automá… Bogotá
## 5 https://www.olx.com.co/item/mazda… 4 e7 70000 2 HAT… 2015 Mecáni… Bogotá
## 6 https://www.olx.com.co/item/se-ve… 3.15e7 103000 2 2011 Mecáni… Cali
## 7 https://www.olx.com.co/item/mazda… 4.5 e7 92000 2 2015 Automá… Medel…
## 8 https://www.olx.com.co/item/mazda… 3.18e7 83000 2 2011 Mecáni… Medel…
## 9 https://www.olx.com.co/item/vendo… 5.5 e7 59000 2 HAT… 2017 Mecáni… Neiva
## 10 https://www.olx.com.co/item/mazda… 2.8 e7 138000 2 2008 Automá… Bogotá
## # … with 311 more rows, and abbreviated variable names ¹kilometraje,
## # ²transmision
2. Análisis exploratorio
#Es importante definir la variable molusco y concentración del agua como variables categoricas antes de realizar la regresion lineal.
olxMazda2$modelo=as.factor(olxMazda2$modelo)
olxMazda2$transmision=as.factor(olxMazda2$transmision)
olxMazda2$ciudad=as.factor(olxMazda2$ciudad)
Empecemos realizando un análisis de la variable precio en función
del año y del modelo para detectar posibles valores atipicos
caja<-ggplot(olxMazda2, aes(x = ano, y = precio, fill = modelo)) +
stat_boxplot(geom = "errorbar", width = 0.25) + geom_boxplot() + scale_fill_hue(labels = c("Moslusco A", "Molusco B"))+ theme (text = element_text(size=8)) + ggtitle ("Distribución de Precios - Mazda 2") + theme (plot.title = element_text(family="Comic Sans MS",
size=rel(2), vjust=2, face="bold", color="black",lineheight=1.5)) + labs(x = "Año",y = "Precio") + theme(axis.title = element_text(face="italic", colour="black", size=rel(1.5))) + theme(axis.title.x = element_text(face="bold", vjust=-0.5, colour="black", size=rel(1.5))) +
theme(axis.title.y = element_text(face="bold", vjust=1.5, colour="black", size=rel(1.5)))
caja<-ggplotly(caja)
caja
Se consiguen tres categorias para el modelo 2, 2 HATCHBANK y 2
SEDAN. No se encuentran valores atipicos. Y claramente es visible el
echo que al aumentar el año del modelo aumenta el precio.
Para las diferentes variables númericas pordemos obtener un ajuste
de correlación.
ggpairs(select_if(olxMazda2, is.numeric), lower = list(continuous = "smooth"),diag = list(continuous = "barDiag"), axisLabels = "none")+theme_economist()

Donde el precio esta fuertemente correlacionado con el año del
modelo del veiculo y con una correlación positiva, es decir a modelos
mas recientes tenemos precios mas elevados. Por otra parte se observa
que existe una correlación fuerte negativa con el kilometraje, a mayor
kilometraje es menor el precio del vehiculo.
3. Modelo de regresión lineal múltiple
Construyendo un modelo de regresión lineal múltiple
conseguimos.
Aplicando un escenario 80-20, 80% de los datos para realizar el
modelamiento y el 20% para validar dicho modelo. Iniciamos segementando
los datos:
muestra = sample(1:256)
olx_modelo = olxMazda2[muestra,]
olx_validacion = olxMazda2[-muestra, ]
Generamos el modelo
#Hacemos la regresión lineal.
modelo_vehiculo=lm(precio~kilometraje+modelo+ciudad+transmision+ano, data=olx_modelo)
summary(modelo_vehiculo)
##
## Call:
## lm(formula = precio ~ kilometraje + modelo + ciudad + transmision +
## ano, data = olx_modelo)
##
## Residuals:
## Min 1Q Median 3Q Max
## -12944822 -2846349 0 2671721 15735122
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.525e+09 2.971e+08 -25.329 < 2e-16 ***
## kilometraje -2.601e+01 1.384e+01 -1.880 0.0616 .
## modelo2 HATCHBACK -3.455e+05 8.010e+05 -0.431 0.6666
## modelo2 SEDAN 1.655e+06 1.094e+06 1.513 0.1318
## ciudadAntioquia -6.053e+05 6.593e+06 -0.092 0.9269
## ciudadArmenia 4.111e+06 5.693e+06 0.722 0.4711
## ciudadBarrancabermeja 3.534e+06 6.452e+06 0.548 0.5845
## ciudadBarranquilla 1.899e+06 5.689e+06 0.334 0.7388
## ciudadBello 4.918e+06 5.745e+06 0.856 0.3930
## ciudadBogotá 1.421e+06 5.423e+06 0.262 0.7936
## ciudadBucaramanga 2.341e+06 5.702e+06 0.411 0.6818
## ciudadCali 3.746e+06 5.464e+06 0.686 0.4937
## ciudadCartago 3.588e+06 6.549e+06 0.548 0.5844
## ciudadChapinero 7.557e+06 7.408e+06 1.020 0.3088
## ciudadChía 2.813e+06 6.223e+06 0.452 0.6517
## ciudadCúcuta 1.035e+06 5.905e+06 0.175 0.8611
## ciudadEngativá 1.750e+06 7.571e+06 0.231 0.8175
## ciudadEnvigado 3.501e+06 6.035e+06 0.580 0.5624
## ciudadFloridablanca 2.617e+06 5.711e+06 0.458 0.6472
## ciudadFunza 5.455e+06 7.451e+06 0.732 0.4650
## ciudadFusagasugá 3.796e+06 6.653e+06 0.570 0.5690
## ciudadGirardot 8.923e+06 7.488e+06 1.192 0.2348
## ciudadGirón 1.104e+06 7.414e+06 0.149 0.8817
## ciudadIbagué 9.692e+05 5.927e+06 0.164 0.8703
## ciudadItagüí 1.096e+06 6.364e+06 0.172 0.8634
## ciudadLa Ceja 9.041e+06 7.353e+06 1.230 0.2202
## ciudadManizales 3.201e+06 5.560e+06 0.576 0.5654
## ciudadMedellín 4.215e+06 5.458e+06 0.772 0.4409
## ciudadNeiva 1.363e+06 5.859e+06 0.233 0.8163
## ciudadPalestina -2.169e+06 7.559e+06 -0.287 0.7745
## ciudadPalmira 8.091e+05 7.576e+06 0.107 0.9151
## ciudadPereira 2.833e+06 5.731e+06 0.494 0.6215
## ciudadPiedecuesta 2.226e+05 7.514e+06 0.030 0.9764
## ciudadPitalito 7.672e+06 7.519e+06 1.020 0.3088
## ciudadPopayán 5.462e+06 7.410e+06 0.737 0.4619
## ciudadRionegro -1.388e+06 6.598e+06 -0.210 0.8336
## ciudadSabaneta 1.932e+06 5.984e+06 0.323 0.7472
## ciudadSan Gil 2.545e+06 6.482e+06 0.393 0.6950
## ciudadSan Juan de Pasto -3.829e+06 6.569e+06 -0.583 0.5606
## ciudadSincelejo -3.190e+06 7.449e+06 -0.428 0.6690
## ciudadSuba 5.588e+06 6.189e+06 0.903 0.3677
## ciudadTuluá 9.992e+05 6.615e+06 0.151 0.8801
## ciudadValledupar 7.285e+06 7.525e+06 0.968 0.3341
## ciudadVilla Rica 5.675e+05 7.426e+06 0.076 0.9392
## ciudadVillavicencio 2.983e+06 6.012e+06 0.496 0.6203
## ciudadYopal 5.745e+06 7.397e+06 0.777 0.4383
## ciudadYumbo 5.724e+06 6.557e+06 0.873 0.3837
## ciudadZipaquirá 5.476e+06 7.525e+06 0.728 0.4676
## transmisionAutomática Secuencial 2.610e+06 1.285e+06 2.031 0.0435 *
## transmisionMecánica -3.295e+06 7.843e+05 -4.202 3.97e-05 ***
## ano 3.760e+06 1.476e+05 25.468 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5182000 on 203 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.9308, Adjusted R-squared: 0.9137
## F-statistic: 54.59 on 50 and 203 DF, p-value: < 2.2e-16
En el modelo se encuentra que las variables predictoras con un valor
de significacncia mas alto son el kilometraje, la transmisión y el año
del modelo del vehiculo. Al parecer la ciudad no tiene una correlación
muy elevada con el precio del vehiculo.
Se obtiene un p-value: 2.2e-16 que muestra claramente una alta
significacia para el modelo desarrollado.
Validación de Supuestos
Al realizar la validación de supuestos nos encontramos con unos
buenos resultados para respaldarla inferencia que hemos construido
aquí.
ei=modelo_vehiculo$residuals
par(mfrow=c(2,2))
plot(modelo_vehiculo)

shapiro.test(ei)
##
## Shapiro-Wilk normality test
##
## data: ei
## W = 0.98581, p-value = 0.01277
4. Validar el poder predictivo del Modelo con Validación
Cruzada
datos_validados = predict(modelo_vehiculo, newdata = olx_validacion)
error = (olx_validacion$precio - datos_validados)
respuesta = data.frame('Precio Real' = olx_validacion$precio, 'Precio Calculado' = datos_validados, 'Error' = error)
head(respuesta)
## Precio.Real Precio.Calculado Error
## 1 33000000 23713276 9286724.4
## 2 64000000 59496450 4503549.7
## 3 39000000 38546935 453065.4
## 4 37500000 35759232 1740768.1
## 5 28000000 19890124 8109875.6
## 6 40500000 42152219 -1652218.6
MAE = mean(abs(respuesta$Error))
MAE
## [1] 3325422
RMSE = sqrt(sum(respuesta$Error^2)/length(respuesta$Error))
RMSE
## [1] 4173300
porc_error_mae = MAE / (mean(olx_validacion$precio))
porc_error_mae
## [1] 0.0604859
porc_error_rmse = RMSE / (mean(olx_validacion$precio))
porc_error_rmse
## [1] 0.07590792
Este modelo permite predecir el precio de un vehículo de acuerdo a
las variables predictoras encontradas con mayor valor de significacnia.
Lo que se convierte en una herramienta que ayuda a estimar si el precio
estipulado por un vendedor para el modelo se ajusta al precio del
mercado previniendo un precio sobrevalorado o alertando de un precio muy
por debajo de la tendencia.
De acuerdo con el coeficiente de ajuste conseguido es evidente que
el precio se predice con un 93%, y un error general que se encuentra
entre uns 3 y 4 millones, un porcentaje de error de entre el 6,6% y
7,7%.