Cifras de km y precio en miles
Punto 1: Regresion lineal simple y multiple
Regresion lineal simple
1) Analisis Univariado.
library(summarytools)
library(dplyr)
columnas_interes <- c("precio","km","modelo")
datos_seleccionados <- base2[, columnas_interes]
nombres <- c("precio","km","modelo" )
datos_seleccionados <- setNames(datos_seleccionados, nombres)
datos_seleccionados[] <- lapply(datos_seleccionados, as.numeric)
descripcion_estadistica <- view(summarytools::descr(datos_seleccionados))
La tabla anterior entrega informacion relevante para el analisis exploratorio sobre las varibles cuantitativas que se van a trbajar. Podemos encontrar de manera inicial el promedio de cada una de las variables relevantes, su desviacion estandar, minimos, maximos y demas informacion relevante para entender el comportamiento de estas varibles de forma exploratoria.
Continuando se realizo un analisis particular para las diferentes varibles cualitativas.
tipo de vehiculo
require(plotly)
require(table1)
table1(~ precio | veh, data=base2)
Analisis univariado por tipo de vehiculo frente al precio: podemos ver que se cuenta con dos tipos de vehiculos donde el chevrolet sail es en promedio un vehiculo con un precio menor y su contra parte el kia cerato tiene en promedio precios mayores. Por ultimo el promedio general del precio en la base de datos es alrededor de 40 millones con una desviacon estandar de 12 millones.
tipo de transmision
table1(~ precio | transmision, data=base2)
Analisis univariado por tipo de trnamision frente al precio: el analisis de esta variable es muy similar a la anterior, en promedio los vehiculos de transmision automatica tienen un precio superior a los de transmision mecanica.
table1(~ precio | combustible, data=base2)
Analisis univariado por tipo de vehiculo frente al tipo de combustible: Aqui se ve que esta variable solo toma un valor siendo todos los vehiculos a gasolina, esta variables es irrelevante para el estudio por lo que no se utilizo mas adelante.
2) Analisis Bivariado
Grafico km contra precio
graf1=ggplot(data=base2,mapping = aes(x=km,y=precio))+geom_point()+theme_bw()+
geom_smooth()
ggplotly(graf1)
y=base2$precio
x1=base2$km
cor(x1,y)
Analisis bivariado km-precio: el grafico muestra que en el grueso de los datos el precio deberia disminuir a medida que los kilometros aumentan, pero en los extremos encontramos resultados variables, el coeficiente de correlacion es negativo por lo que corroboramos que la relacion si es inversa ademas el resultado es cercano a 0 por lo que nos da una idea de que la capacidad predictiva de esta variable es limitada.
Grafico modelo contra precio
graf2=ggplot(data=base2,mapping = aes(x=modelo,y=precio))+geom_point()+theme_bw()+
geom_smooth()
ggplotly(graf2)
y=base2$precio
x2=base2$modelo
cor(x2,y)
Analisis bivariado modelo-precio: En este caso el analisis es mucho mas intuitivo pues la grafica corrobora lo que la logica diria, a medida que los vehiculos son mas nuevos el precio es mayor, para esta variable el coeficiente de correlacion es positivo y unque no es una relacion directa la capacidad predictora de esta variable es superior a la anteior.
Grafico vehiculo contra precio
graf3=ggplot(data=base2,mapping = aes(x=veh,y=precio))+geom_point()+theme_bw()+
geom_smooth()
ggplotly(graf3)
Analisis bivariado vehiculo-precio: Este grafico corrobora lo visto en el analisis univariado donde encontramos que los kia cerato tienden a tomar precio superiores a el chevrolet sail pero al mismo tiempo es mas disperso en sus precios.
Grafico transmision contra precio
graf4=ggplot(data=base2,mapping = aes(x=transmision,y=precio))+geom_point()+theme_bw()+
geom_smooth()
ggplotly(graf4)
Analisis bivariado transmision-precio: este resultado igual que el anterior corrobora lo visto anteriormente, las transmisiones mecanicas suelen tener precio superiores, se analizara la importancia de estas variables mas adelante.
No se realizo analisis bivariado frente al tipo de combustible pues al ser solo un tipo de combustible no cobra relevancia.
3) Modelos propuestos
modelo simple 1 (km)
mod_simple1=lm(y~x1)
mod_simple1
summary(mod_simple1)
Interpretacion modelo simple 1 (km): de manera inicial podemos construir la ecuacion de modelo, esta quedaria de la siguiente manera:
B0 = 45774.96 B1 = -57.62
y = 45774.96 - 57.62(x1) y = 45774.96 - 57.62(km)
Donde se observa que el precio empezara aproximadamente en 45 millones y disminuira gradualmente a medida que los kilometros sean mayores.
Por ultimo si vemos el R cuadrado de este modelo vemos que lo que esta variable es capaz de explicar es basntante reducido. La capacidad predictiva de este modelo no es la deseada.
modelo simple 2 (modelo-año)
mod_simple2=lm(y~x2)
mod_simple2
summary(mod_simple2)
Interpretacion modelo simple 2 (año-modelo): de manera inicial podemos construir la ecuacion de modelo, esta quedaria de la siguiente manera:
B0 = -3574465 B1 = 1794
y = -3574465 + 1794(x2) y = -3574465 + 1794(año)
Donde se observa que el intercepto es negativo, esto se debe a que cuando se multiplique el B1 por el año esto dejara el precio en valores positivos, podemos ver que la relacion de esta variable es positiva y aumentara el precio a medida que el modelo sea mas nuevo.
Por ultimo si analisamos el R cuadrado de este modelo podremos ver que su capacidad predictiva tampco es la deseada pero la relevancia de esta variable si es alta por lo que sabemos que sera importante para las predicciones mas adelante.
modelo simple 3 (vehiculo)
x3=base2$veh
mod_simple3=lm(y~x3)
mod_simple3
summary(mod_simple3)
Interpretacion modelo simple 3 (vehiculo): de manera inicial podemos construir la ecuacion de modelo, esta quedaria de la siguiente manera:
B0 = 33423 B1 = 16177
y = 33423 + 16177(x3)
Este modelo tiene una interpretacion diferente, pues lo que nos dice la ecuacion en este caso es que el precio empezara alrededor de 33 millones pero si se trata de un kia cerato entonces x3 tomara valor de 1 y el precio aumentara en una valor cercano a 16 millones, por el contrario si se trata de un chevrolet sail x3 sera 0 y la prediccion seran los 33 millones del intercepto. Esto se debe a que se trata de una variable categorica.
4) Escoger el mejor modelo
El mejor modelo entre los realizados es el modelo 3 (modelo_simple3). Basandome en que este modelo cuenta con un R cuadrado superior a los demas modelos, esto nos dice que este modelo puede explicar los resultados de mejor manera.
5) modelo predictivo
predict(mod_simple3,list(x3="kia cerato"),interval = "confidence",level = 0.95)
Haciendo uso de este modelo predictivo encontrariamos entonces un valor pronosticado de 49.600.000 para este kia cerato pero el rango de confianza nos dice que estara entonces entre un minimo de 47 millones y un maximo de 52 millones.
validacion cruzada
id_modelar=sample(1:129,size = 90)
precio_modelar=base2[id_modelar,]
precio_validar=base2[-id_modelar,]
mod_año_modelar=lm(precio~modelo,data=base2)
precio_pred=predict(mod_año_modelar,list(modelo=precio_validar$modelo))
precio_real=precio_validar$precio
error=precio_real-precio_pred
res=data.frame(precio_real,precio_pred,error)
res
MAE=mean(abs(error))
MAE
En este modelo de validacion cruzada encontramos entonces que a partir de esta variable podemos predecir el precio de los vehiculos en la base de datos, el resultado del MAE es de 10 millones por lo tanto la prediccion esta limitada a un rango de error de 10 millones por encima o por debajo del precio. Esta no es una prediccion con la precision que seria ideal tener.
Regresion lineal multiple
1) modelos multiples
modelo multiple 1 (km,modelo)
mod_muliple1=lm(y~x1+x2)
summary(mod_muliple1)
Interpretacion modelo multiple 1 (km,modelo): de manera inicial podemos construir la ecuacion de modelo, esta quedaria de la siguiente manera:
B0 = -3.509e+06 B1 = -3.449e+00 B2 = 1.762e+03
y = -3.509e+06 - 3.449e+00(x1) + 1.762e+03(x2) y = -3.509e+0 - 3.449e+00(km) + 1.762e+03(año)
Se puede analizar a simple vista que las relaciones de estas variables no son muy efectivas al tratarse de una variable con relacion negativa y otra con relacion positiva frente a la variable de respuesta. El modelo nos muestra que la variable x1 (km) no es relevante para el modelo y x2 (año) entrega mas informacion al modelo.
Por otro lado el R cuadrado es muy bajo para conciderar la capacidad explicativa de este modelo como optima. Por lo tanto se deben agregar variables relevantes y probar otro modelo.
modelo multiple 2 (km,año,vehiculo)
mod_muliple2=lm(y~x1+x2+x3)
summary(mod_muliple2)
Interpretacion modelo multiple 2 (km,modelo,vehiculo): de manera inicial podemos construir la ecuacion de modelo, esta quedaria de la siguiente manera:
B0 = -7.395e+06 B1 = 2.595e+01 B2 = 3.684e+03 B3 = 2.250e+04
y = -7.395e+06 + 2.595e+01(x1) + 3.684e+03(x2) + 2.250e+04(x3) y = -7.395e+06 + 2.595e+01(km) + 3.684e+03(año) + 2.250e+04(vehiculo)
En este modelo podemos ver una mejoria, la variable x1 (km) sigue mostrandose como una variable de poca relevancia que puede evitar que el modelo llegue a su mejor resultado, por otro lado las otras dos variables muestran relevancia y sus valores positivos muestran que llevan el modelo en la misma direccion. La variable x1 se cambiara por una variable que muestre mejor relacion.
El R cuadrado se vio mejorado (0.82) mostrando que el modelo esta mejorando en la direccion correcta, para este modelo las variables logran explicar los resultados de manera mucho mas precisa.
modelo multiple 3 (año,vehiculo,transmision)
x4=base2$transmision
mod_muliple3=lm(y~x2+x3+x4)
summary(mod_muliple3)
Interpretacion modelo multiple 3 (modelo,vehiculo,transmision): de manera inicial podemos construir la ecuacion de modelo, esta quedaria de la siguiente manera:
B0 = -6459058.9 B1 = 3222.7 B2 = 20408.1 B3 = -4620.4
y = -6459058.9 + 3222.7(x2) + 20408.1(x3) - 4620.4(x4) y = -6459058.9 + 3222.7(año) + 20408.1(vehiculo) - 4620.4(transmision)
Este modelo fue el mejor modelo de los modelos multiple creados, podemos ver que todas las variables son relevantes y tienen una relacion mas fuerte con la variable de respuesta.
De la misma forma el R cuadrado entrego mejores resultados en este modelo. (R2 = 0.83). Por lo tanto este fue el modelo escogido para realizar los pronosticos.
A continuacion aplicaremos la prueba de AIC a este modelo.
modelo multiple 3 (AIC)
mod_multiple4=step(mod_muliple3)
interpretacion prueba AIC: estos resultados nos muestran si el modelo se puede mejorar eliminando una variable, en este caso no se recomiendan hacer cambios debido a que eliminar alguna variable resultaria en un modelo menos optimo a comparacion del modelo actual. Ademas podemos observar que la variable x3 (vehiculo) es la mas relevante, si se elimina el resultado de AIC sera el peor.
Prediccion con modelo k fold, validacion cruzada
library(caret)
ctrl <- trainControl(method = "cv", number = 20)
mod_kfold <- train(precio ~ modelo + veh + transmision, data = base2, method = "lm", trControl = ctrl)
mod_kfold
modelo predictivo
y_pred=predict(mod_muliple3,list(x2=2018, x3="kia cerato", x4="Automática"),interval = "confidence",level = 0.95)
y_pred
Se utilizo este modelo para hacer una prediccion, se plantea un kia cerato del año 2018 con transmision automatica. El modelo retorno que dicho carro deberia costar alrededor de 64 millones pero segun el rango de confianza dicho vehiculo puede estar entre 62 y 67 millones.
Analisis de residuales
par(mfrow=c(2,2))
plot(mod_muliple3)
Los residuales de este modelo (modelo multiple 3) son bastante buenos, como se observa en la imagen estos se ajustan de manera muy cercana con la linea punteada diagonal. Las excepciones se encuentran en los extremos de la liena. Se plantea entonces si este modelo puede mejorarse a traves de una transformacion en la variable y.
transformacion de variables
mod_muliple_log=lm(log(y)~x2+x3+x4)
summary(mod_muliple_log)
Interpretacion modelo multiple log (modelo,vehiculo,transmision): de manera inicial podemos construir la ecuacion de modelo, esta quedaria de la siguiente manera:
B0 = -140.22217 B1 = 0.07473 B2 = 0.52386 B3 = -0.06241
y = -140.22217 + 0.07473(x2) + 0.52386(x3) - 0.06241(x4)
Este modelo nos indica que la variable x4 (trnasmision) bajo estas circunstancias dejaria de ser relevante, un resultado bastante curioso, de resto parece mantenerse muy similar al modelo no transformado. La diferencia principal se observa en el R cuadrado el cual se disminuye bastante (R2=0.42).
A continuacion aplicaremos la prueba de AIC a este modelo.
modelo multiple log (AIC)
mod_multiple5=step(mod_muliple_log)
interpretacion prueba AIC: la prueba AIC nos dice que deberiamos eliminar la variable x4 para un mejor resultado e incluso una vez hecho eso indica que se deberian eliminar la variable x2 tambien, dejando unicamente la variable x3 creando asi un modelo simple. Aunque el AIC es mejor, este modelo no parece explicar bien los resultados a partir del R cuadrado y llevarlo a un modelo simple no aportaria nada al desarrollo.
Analisis de residuales
par(mfrow=c(2,2))
plot(mod_muliple_log)
Para este modelo los residuales se ajustan muy bien, incluso mejor que en el modelo no ajustado, lo podemos ver de manera clara en la imagen de normalidad donde los puntos se ajustan muy bien a la linea. Parece no haber claridad sobre si este modelo es recomendable o no. Por lo tanto pasaremos a evaluar su capacidad predictiva.
ctrl <- trainControl(method = "cv", number = 20)
mod_kfold2 <- train(log(precio)~ modelo + veh + transmision, data = base2, method = "lm", trControl = ctrl)
print(mod_kfold2)
y_pred2=predict(mod_muliple_log,list(x2=2018, x3="kia cerato", x4="Automática"),interval = "confidence",level = 0.95)
exp(y_pred2)
Mejor modelo
El mejor modelo realizado es el modelo multiple 3 (mod_multiple3). Esto se debe a que este modelo comprende las variables mas relevantes, a partir de las cuales obtiene un R cuadrado bastante optimo y la evaluacion de residuales tambien muestra resultados positivos. Pero la razon definitiva es que segun los modelos realizados este modelo puede realizar pronosticos mas cercanos a la realidad, como vimos anteriormente el modelo con la variable ajustada es muy bueno pero los resultados que arroja dejan un margen de precio mas amplio.
Ahora podemos volver al modelo multiple 3 y usarlo para pronosticar diferentes casos
mod_muliple3=lm(y~x2+x3+x4)
summary(mod_muliple3)
ctrl <- trainControl(method = "cv", number = 20)
mod_kfold <- train(precio ~ modelo + veh + transmision, data = base2, method = "lm", trControl = ctrl)
print(mod_kfold)
predicciones con el mejor modelo
Empezaremos repitiendo la prediccion que se realizo anteriormente.
y_pred3=predict(mod_muliple3,list(x2=2018, x3="kia cerato", x4="Automática"),interval = "confidence",level = 0.95)
y_pred
Por ultimo realizaremos una prediccion de un vehiculo con caracteristicas diferentes.
y_pred4=predict(mod_muliple_log,list(x2=2015, x3="chevrolet sail", x4="Mecánica"),interval = "confidence",level = 0.95)
y_pred4
Como se observa en los resultados se esperaria que este vehiculo costara alrededor de los 10 millones de pesos, con minimas diferencias en el precio hacia arriba o hacia abajo.