require(ggplot2)
## Loading required package: ggplot2
require(plotly)
## Loading required package: plotly
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
require(datarium)
## Loading required package: datarium
library(readxl)
base2_carros_cali <- read_excel("~/Downloads/base2_carros_cali.xlsx")
View(base2_carros_cali)
datos_vehiculos=base2_carros_cali
datos_vehiculos
## # A tibble: 129 × 6
## precio km modelo veh transmision combustible
## <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 38000000 111000 2011 kia cerato Mecánica Gasolina
## 2 46500000 65000 2014 kia cerato Mecánica Gasolina
## 3 43000000 86500 2013 kia cerato Mecánica Gasolina
## 4 35000000 134000 2011 kia cerato Mecánica Gasolina
## 5 48500000 112000 2015 kia cerato Mecánica Gasolina
## 6 43000000 105000 2012 kia cerato Automática Gasolina
## 7 52000000 88000 2015 kia cerato Mecánica Gasolina
## 8 56000000 78000 2016 kia cerato Automática Gasolina
## 9 74000000 50000 2019 kia cerato Automática Gasolina
## 10 40000000 140000 2013 kia cerato Mecánica Gasolina
## # ℹ 119 more rows
#regresion lineal simple
##planteamiento de las variables
se desea evaluar la relacion en las siguientes variables tomando como variable respuesta el precio del vehiculo:
kilometraje: ya que entre mayor uso se le de al vehiculo se esperaria una relacion inversa con el precio.
km=datos_vehiculos$km
summary(km)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0 68000 91000 92492 115000 228000
podemos observar que hay un rango amplio entre los valores de los datos, asi mismo una desviacion estandar de un valor alto siendo 42.745, equivalente al 18,74%. esto nos permite concluir que hay una gran variabilidad en el conjunto de datos.
sd(datos_vehiculos$km)
## [1] 42745.35
el modelo: el año del carro es una variable influyente de manera positiva al precio, pues el lanzamiento de nuevas tecnologias hara que se vuelva mas obsoleto.
mdl=datos_vehiculos$modelo
summary(mdl)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2010 2014 2015 2015 2017 2022
analizando los rangos de los valores y su desviacion estandar vemos que es un conjunto de valores pequeño el cual tiene una desviacion estandar de aproximadamente 2 años, en puntos porcentuales un 20,47%. lo cual respresenta una gran variabilidad en el conjunto de datos.
sd(datos_vehiculos$modelo)
## [1] 2.456625
el tipo de vehiculo: factores como la marca y el vehiculo pueden influir de manera significtiva en el precio y la vejez de los vehiculos.
veh=datos_vehiculos$veh
require(DescTools)
## Loading required package: DescTools
Mode(veh)
## [1] "chevrolet sail"
## attr(,"freq")
## [1] 73
teniendo en cuenta que la moda es el chevrolte sail, es posible asumir que el chevrolet sail sea mas barato, y que el kia cerato sea un carro más lujoso. lo cual es informacion valiosa para el modelo, pero si o si necesita de otras variables que la complementen.
##analisis exploratorio
y=datos_vehiculos$precio
km=datos_vehiculos$km
mdl=datos_vehiculos$modelo
veh=datos_vehiculos$veh
hacemos los graficos
plot(km,y)
la dispersion de los datos no muestra una tendencia visible, como si los datos no estuviesen relacionados.
cor(km,y)
## [1] -0.1984356
el coeficiente muestra tal como esperabamos una relacion inversa, pero esta es muy debil, practicamente nula.
plot(mdl,y)
por otro lado la dispersion del modelo muestra una tendencia al alza, segmentada en dos pendientes, las cuales intuyo que sean los chevrolet sail y kia cerato.
cor(mdl,y)
## [1] 0.3550418
el coeficiente de correlación es positivo como esperabamos, pero muestra una fuerza muy debíl, asi que por si solo no sera un buen predictor.
boxplot(y~veh,col="grey")
los cuartiles de ambas marcas de carro muestran que el valor del chevrolet sail varia muy poco, pues el 75% de sus datos esta en un rango muy pequeño; mientras el kia cerato tiene un rango para el 75% de sus datos un poco mas grande por lo que es probable que sea mas suceptible a otras variables.
require(DescTools)
Mode(veh)
## [1] "chevrolet sail"
## attr(,"freq")
## [1] 73
##estimacion de modelos simples
vamos a estimar un modelo simple con cada variable analizada anteriormente:
mds1=lm(y~km)
summary(mds1)
##
## Call:
## lm(formula = y ~ km)
##
## Residuals:
## Min 1Q Median 3Q Max
## -40856877 -7854938 -4054037 5068628 39933128
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.577e+07 2.571e+06 17.802 <2e-16 ***
## km -5.762e+01 2.525e+01 -2.282 0.0242 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 12210000 on 127 degrees of freedom
## Multiple R-squared: 0.03938, Adjusted R-squared: 0.03181
## F-statistic: 5.206 on 1 and 127 DF, p-value: 0.02418
los betas de este modelo nos dicen que tiene un intercepto de 45.770.000, el cual es bastante malo porque el beta1 es de -57,62 pesos por km del carro, es decir que todos los datos por encima del intercepto no podran ser explicados. además de esto al promediar asi un intercepto de valores tan dispersos, este es muy desacertado. tiene un nivel de significancia del 3.9% lo cual significa que el kilometraje no es capaz de explicar las variaciones de el precio. aun asi las variables elegidas son significativas por lo que el efecto de esta variable no fue al azar.
mds2=lm(y~mdl)
summary(mds2)
##
## Call:
## lm(formula = y ~ mdl)
##
## Residuals:
## Min 1Q Median 3Q Max
## -39042401 -8630002 -5042401 8251399 33988597
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.574e+09 8.446e+08 -4.232 4.40e-05 ***
## mdl 1.794e+06 4.191e+05 4.280 3.65e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11650000 on 127 degrees of freedom
## Multiple R-squared: 0.1261, Adjusted R-squared: 0.1192
## F-statistic: 18.32 on 1 and 127 DF, p-value: 3.65e-05
tiene un beta0 de -3.574.000.000 el cual se logra compensar con un beta1 de 1.794.000 mostrando que por cada año más que tenga un carro, aumentará este valor; este modelo podria servir ya que el minimo de años de un modelo es el 2010, por lo que este podria ir compensando el intercepto. aunque lo anterior sea una buena idea el “modelo” del vehiculo solo es capaz de explicar el 12.61% de las variaciones en y. las variables son significativas por lo aue podemos concluir que el efecto de estas variables no fue al azar.
mds3=lm(y~veh)
summary(mds3)
##
## Call:
## lm(formula = y ~ veh)
##
## Residuals:
## Min 1Q Median 3Q Max
## -32423151 -5423151 -100000 3576849 33400000
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 33423151 1110140 30.107 <2e-16 ***
## vehkia cerato 16176849 1684917 9.601 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9485000 on 127 degrees of freedom
## Multiple R-squared: 0.4206, Adjusted R-squared: 0.416
## F-statistic: 92.18 on 1 and 127 DF, p-value: < 2.2e-16
el beta0 del modelo es un valor estandar de lo que deberia costar un chevrolet sail (33.423.151), y abajo en el beta1, esta lo que se le suma a este valor si el vehiculo fuese un kia cerato que son 16.176.849. aunque es una varable categorica, logra explicar el 42.06% de las variaciones, que es poco, pero seria la mejor variable testeada hasta ahorita; deduzco que es porque la mayoria de datos de chevrolet sail estan en un intervalo pequeño de precio. ambas variables son significativas por lo que los efectos causados en el modelo son probablemente reales.
##modelo elegido
el modelo que escogi para predecir es el modelo simple 3, pues tiene un intercepto que refleja en promedio la mayoria de valores de chevrolet sail, y la variacion que puede tener al ser un kia cerato dejando las demas condiciones iguales. Tambien es el modelo que logra explicar mayor proporcion de cambios en la variable precio.
##validacion cruzada
entrenamos este modelo con el 70% de los datos que tenemos y usaremos el 30% restante para validar su poder de predicción.
datos_modelar=sample(1:129,size = 90 )
carros_modelar=datos_vehiculos[datos_modelar,]
carros_modelar
## # A tibble: 90 × 6
## precio km modelo veh transmision combustible
## <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 24800000 100 2013 chevrolet sail Mecánica Gasolina
## 2 30000000 172258 2014 chevrolet sail Mecánica Gasolina
## 3 39900000 101000 2012 kia cerato Mecánica Gasolina
## 4 30500000 120000 2013 chevrolet sail Mecánica Gasolina
## 5 30000000 69000 2015 chevrolet sail Mecánica Gasolina
## 6 28500000 95000 2014 chevrolet sail Mecánica Gasolina
## 7 49800000 84500 2015 kia cerato Automática Gasolina
## 8 39500000 49500 2018 chevrolet sail Mecánica Gasolina
## 9 41500000 63000 2018 chevrolet sail Mecánica Gasolina
## 10 36500000 100500 2017 chevrolet sail Mecánica Gasolina
## # ℹ 80 more rows
carros_validar=datos_vehiculos[-datos_modelar,]
md_pred=lm(precio~veh,data = carros_modelar)
precio_pred=predict(md_pred,list(veh=carros_validar$veh))
precio_real=carros_validar$precio
error=precio_real-precio_pred
res=data.frame(precio_real,precio_pred,error)
res
## precio_real precio_pred error
## 1 38000000 51323684 -13323684.2
## 2 52000000 51323684 676315.8
## 3 56000000 51323684 4676315.8
## 4 74000000 51323684 22676315.8
## 5 40000000 51323684 -11323684.2
## 6 36900000 51323684 -14423684.2
## 7 52999999 51323684 1676314.8
## 8 34000000 51323684 -17323684.2
## 9 35500000 51323684 -15823684.2
## 10 39000000 51323684 -12323684.2
## 11 37500000 51323684 -13823684.2
## 12 57900000 51323684 6576315.8
## 13 46500000 51323684 -4823684.2
## 14 39500000 51323684 -11823684.2
## 15 54500000 51323684 3176315.8
## 16 33000000 51323684 -18323684.2
## 17 56000000 51323684 4676315.8
## 18 44000000 51323684 -7323684.2
## 19 31000000 33651731 -2651730.8
## 20 29000000 33651731 -4651730.8
## 21 32500000 33651731 -1151730.8
## 22 33500000 33651731 -151730.8
## 23 34000000 33651731 348269.2
## 24 37500000 33651731 3848269.2
## 25 32000000 33651731 -1651730.8
## 26 1000000 33651731 -32651730.8
## 27 34000000 33651731 348269.2
## 28 33000000 33651731 -651730.8
## 29 37500000 33651731 3848269.2
## 30 50000000 33651731 16348269.2
## 31 35000000 33651731 1348269.2
## 32 31500000 33651731 -2151730.8
## 33 37000000 33651731 3348269.2
## 34 40800000 33651731 7148269.2
## 35 38500000 33651731 4848269.2
## 36 27000000 33651731 -6651730.8
## 37 28700000 33651731 -4951730.8
## 38 32000000 33651731 -1651730.8
## 39 34500000 33651731 848269.2
como el modelo es de variables categoricas solo puede dar dos valores lo cual limita mucho su alcance.
MAE=mean(abs(error))
MAE
## [1] 7334525
obtenemos un valor de MAE el cual es bastante bueno para un modelo tan simple, 5.682.467, dentro del valor de ese error podria estar metido el valor de la negociacion, ya que no son bienes de precio fijo. tambien es un indicador bueno de que en el modelo multiple esto va a mejorar.
no voy a realizar predicciones escogiendo los valores ya que solo hay dos resultados posibles chevrolet sail (32.905.800) y kia cerato (50.445.000)
#regresion lineal multiple
##estimación modelos multivariables
anteriormente pude concluir que los modelos univariables todos tenian variables significativas, pero estas por separado no lograban explicar bien los cambios en el precio, por lo que ahora juntas veremos si son mas completas.
analisis previo
options(repos = "https://cloud.r-project.org")
install.packages("psych")
##
## The downloaded binary packages are in
## /var/folders/my/ptff2dh15q3418hppk9h93tw0000gn/T//RtmpjVz3wg/downloaded_packages
require(psych)
## Loading required package: psych
##
## Attaching package: 'psych'
## The following objects are masked from 'package:DescTools':
##
## AUC, ICC, SD
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
library(psych)
pairs.panels(datos_vehiculos)
## Warning in cor(x, y, use = "pairwise", method = method): the standard deviation
## is zero
## Warning in cor(x, y, use = "pairwise", method = method): the standard deviation
## is zero
## Warning in cor(x, y, use = "pairwise", method = method): the standard deviation
## is zero
## Warning in cor(x, y, use = "pairwise", method = method): the standard deviation
## is zero
## Warning in cor(x, y, use = "pairwise", method = method): the standard deviation
## is zero
## Warning in cor(x, y, use = "pairwise", method = method): the standard deviation
## is zero
## Warning in cor(x, y, use = "pairwise", method = method): the standard deviation
## is zero
## Warning in cor(x, y, use = "pairwise", method = method): the standard deviation
## is zero
## Warning in cor(x, y, use = "pairwise", method = method): the standard deviation
## is zero
## Warning in cor(x, y, use = "pairwise", method = method): the standard deviation
## is zero
## Warning in min(diff(breaks)): no non-missing arguments to min; returning Inf
las variables no presentan multicolinealidad.
mdm1=lm(y~km+veh)
summary(mdm1)
##
## Call:
## lm(formula = y ~ km + veh)
##
## Residuals:
## Min 1Q Median 3Q Max
## -34044252 -5577301 -240583 2975680 37036303
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.048e+07 1.935e+06 20.918 < 2e-16 ***
## km -8.000e+01 1.849e+01 -4.326 3.06e-05 ***
## vehkia cerato 1.696e+07 1.589e+06 10.673 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8886000 on 126 degrees of freedom
## Multiple R-squared: 0.4955, Adjusted R-squared: 0.4875
## F-statistic: 61.88 on 2 and 126 DF, p-value: < 2.2e-16
tenemos un beta0 de 40.480.000 para el chevrolet sail, el cual por cada kilometro recorrido se le restaran 80,00, además de esto, si el vehiculo es un kia cerato se le sumaran (16.960.000). su R2 ajustado es del 48.75% el cual sigue siendo bajo, no permitiendo explicar las variaciones en el precio como nos gustaria. aun asi todas las variables son significativas lo cual es un buen indicativo para buscar otro modelo.
mdm2=lm(y~km+mdl+veh)
summary(mdm2)
##
## Call:
## lm(formula = y ~ km + mdl + veh)
##
## Residuals:
## Min 1Q Median 3Q Max
## -28213580 -2731610 -474787 2437139 19500723
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.395e+09 4.823e+08 -15.335 <2e-16 ***
## km 2.595e+01 1.288e+01 2.014 0.0462 *
## mdl 3.684e+06 2.389e+05 15.419 <2e-16 ***
## vehkia cerato 2.250e+07 1.003e+06 22.434 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5237000 on 125 degrees of freedom
## Multiple R-squared: 0.8261, Adjusted R-squared: 0.822
## F-statistic: 198 on 3 and 125 DF, p-value: < 2.2e-16
este modelo comienza con un beta0 de -7.395.000.000 para el chevrolet sail, y nos dice que por cada km andado el valor aumentara 25,95 pesos, por cada año del modelo aumentará 3.684.000, y si es un kia cerato aumentara 22.500.000. la razón de por que el kilometraje ha pasado a ser positivo en presencia del modelo y la marca, interpreto que se debe a que en el mercado, un carro que sea de un año viejo y no tenga tanto kilometraje puede causar un efecto positivo en el precio indicando que esta bien cuidado, otra razón podría ser que un vehiculo de cierto año con un alto kilometraje, el cual este en buen estado podria gregar valor al vehiculo indicando que es una marca duradera y de calidad. tiene un R2 ajustado del 82.2% logrando explicar la mayoria de variaciones en el precio, y, todos sus componentes son significativos, por lo que los valores del modelo podrian ser reales.
mdm3=lm(y~mdl+veh)
summary(mdm3)
##
## Call:
## lm(formula = y ~ mdl + veh)
##
## Residuals:
## Min 1Q Median 3Q Max
## -28995966 -3204706 -495966 2131220 23149664
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.876e+09 4.124e+08 -16.68 <2e-16 ***
## mdl 3.427e+06 2.045e+05 16.76 <2e-16 ***
## vehkia cerato 2.230e+07 1.010e+06 22.08 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5300000 on 126 degrees of freedom
## Multiple R-squared: 0.8205, Adjusted R-squared: 0.8177
## F-statistic: 288 on 2 and 126 DF, p-value: < 2.2e-16
por ultimo, este modelo con solo el modelo y la marca del carro, tiene un intercepto negativo de -6.876.000.000 para el chevrolet sail, el cual aumenta 3.427.000 por cada año del modelo del carro, y, si es un kia cerato aumenta 22.300.000. tiene un R2 ajustado de 81.77% y todas sus vaiables son significativas. es bastante parecido al anterior y tambien considerado un buen modelo.
##modelo elegido
step(mdm1)
## Start: AIC=4130.95
## y ~ km + veh
##
## Df Sum of Sq RSS AIC
## <none> 9.9480e+15 4130.9
## - km 1 1.4777e+15 1.1426e+16 4146.8
## - veh 1 8.9942e+15 1.8942e+16 4212.0
##
## Call:
## lm(formula = y ~ km + veh)
##
## Coefficients:
## (Intercept) km vehkia cerato
## 40484502 -80 16956320
step(mdm2)
## Start: AIC=3995.52
## y ~ km + mdl + veh
##
## Df Sum of Sq RSS AIC
## <none> 3.4281e+15 3995.5
## - km 1 1.1123e+14 3.5393e+15 3997.6
## - mdl 1 6.5199e+15 9.9480e+15 4130.9
## - veh 1 1.3803e+16 1.7231e+16 4201.8
##
## Call:
## lm(formula = y ~ km + mdl + veh)
##
## Coefficients:
## (Intercept) km mdl vehkia cerato
## -7.395e+09 2.595e+01 3.684e+06 2.250e+07
step(mdm3)
## Start: AIC=3997.63
## y ~ mdl + veh
##
## Df Sum of Sq RSS AIC
## <none> 3.5393e+15 3997.6
## - mdl 1 7.8863e+15 1.1426e+16 4146.8
## - veh 1 1.3694e+16 1.7233e+16 4199.8
##
## Call:
## lm(formula = y ~ mdl + veh)
##
## Coefficients:
## (Intercept) mdl vehkia cerato
## -6.876e+09 3.427e+06 2.230e+07
despues del paso a paso y evaluar en los tres modelos propuesto criterios como el AIC, betas, R2 ajustado y significancia; concluimos que el modelo más apto para predicciones es el modelo multiple 2. por medio de un menor AIC vemos que este esta mejor ajustado a los datos que tenemos. tambien es el modelo que más porcentaje de variaciones en el precio logra explicar y en terminos de betas es el que desarrolla interacciones más coherentes entre las variables.
#validamos su poder predictivo
entrenamos este modelo con el 70% de los datos que tenemos y usaremos el 20% restante para validar su poder de predicción.
mdm_pred=lm(precio~km+modelo+veh, data = carros_modelar)
presio_pred=predict(mdm_pred,list(km=carros_validar$km, modelo=carros_validar$modelo, veh=carros_validar$veh))
presio_real=carros_validar$precio
errror=presio_real-presio_pred
res2=data.frame(presio_real,presio_pred,errror)
res2
## presio_real presio_pred errror
## 1 38000000 38874361 -874360.68
## 2 52000000 52551234 -551233.98
## 3 56000000 55906961 93038.73
## 4 74000000 66004021 7995978.73
## 5 40000000 46317830 -6317829.59
## 6 36900000 35727975 1172025.44
## 7 52999999 52431721 568277.56
## 8 34000000 39232898 -5232898.32
## 9 35500000 35204913 295087.04
## 10 39000000 39232898 -232898.32
## 11 37500000 42842590 -5342589.76
## 12 57900000 58919090 -1019089.99
## 13 46500000 48702517 -2202517.45
## 14 39500000 46093744 -6593743.57
## 15 54500000 52088123 2411877.13
## 16 33000000 40622232 -7622231.66
## 17 56000000 52954589 3045411.17
## 18 44000000 43006920 993080.49
## 19 31000000 27227500 3772499.75
## 20 29000000 30686307 -1686307.10
## 21 32500000 33698436 -1198435.82
## 22 33500000 36964529 -3464528.70
## 23 34000000 41321174 -7321173.55
## 24 37500000 33982278 3517721.88
## 25 32000000 33997217 -1997217.19
## 26 1000000 29954293 -28954292.76
## 27 34000000 39455657 -5455657.41
## 28 33000000 26777834 6222165.71
## 29 37500000 42958908 -5458908.00
## 30 50000000 39160572 10839428.28
## 31 35000000 29954293 5045707.24
## 32 31500000 30447282 1052717.99
## 33 37000000 40126048 -3126048.10
## 34 40800000 39976657 823342.58
## 35 38500000 37207707 1292293.15
## 36 27000000 23840401 3159599.08
## 37 28700000 27046738 1653262.48
## 38 32000000 30507038 1492961.71
## 39 34500000 39453790 -4953790.03
MAE2=mean(abs(errror))
MAE2
## [1] 3975698
este MAE es más acertado, con una magnitud promedio de error de aproximadamente 2.9 millones. y este si es un rango más real de lo que se negocia entre compradores y vendedores.
##pronosticos hipoteticos
para las predicciones tome 3 escenarios que tuvieran en cuenta diferentes condiciones para las variables. en el primer escenario trate de tomar un kilometrahe moderadamente alto y un año promedio, para un kia cerato. en el segundo caso un kilometraje muy alto, con un año mas viejo, para un chevrolet sail. por ultimo el tercer caso examina un kia cerato que es muy nuevo y tiene un kilometraje mas un poco alto.
escenario 1
predict(mdm2,list(km=102600,mdl=2014,veh="kia cerato"))
## 1
## 48929825
escenario 2
predict(mdm2,list(km=170000,mdl=2013,veh="chevrolet sail"))
## 1
## 24492654
escenario 3
predict(mdm2,list(km=91000,mdl=2020,veh="kia cerato"))
## 1
## 70731610
en base a los resultados puedo concluir que este conjunto de datos depende mucho de el modelo/año del vehiculo para hacer la predicción. y como la otra variable predictora numerica casi no tiene relacion con el precio se dan estos errores. ademas todas las variables incluidas en el modelo tienen una correlacion baja al precio por lo que es dificil que se genere un buen ajuste a la base de datos.
igualmente los escenarios tuvieron valores parecidos a los reales:
escenario 1
vr pred: 48.929.825
vr real: 48.000.000
escenario 2
vr pred: 24.492.654
vr real: 28.000.000
escenario 3
vr pred: 70.731.610
vr real: 68.000.000
##validacion de supuestos
par(mfrow=c(2,2))
plot(mdm2)
en el primer grafico vemos que el supuesto de la varianza constante se cumple graficamente, pues se muestra un comportamiento sin tendencias y a lo largo de las observaciones.
el supuesto de la normalidad se cumple muy bien con excepcion de los extremos.
igualmente vamos a probar una transformacion en logaritmo para ver si se ajusta mejor.
mdm_trans=lm(log(y)~km+mdl+veh)
summary(mdm_trans)
##
## Call:
## lm(formula = log(y) ~ km + mdl + veh)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.3554 -0.0219 0.0173 0.0713 0.4080
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.596e+02 2.925e+01 -5.456 2.51e-07 ***
## km 1.030e-06 7.814e-07 1.318 0.19
## mdl 8.768e-02 1.449e-02 6.051 1.55e-08 ***
## vehkia cerato 5.575e-01 6.083e-02 9.165 1.24e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3176 on 125 degrees of freedom
## Multiple R-squared: 0.4312, Adjusted R-squared: 0.4176
## F-statistic: 31.59 on 3 and 125 DF, p-value: 2.872e-15
con esta nueva transformación el modelo dice que la variable kilometraje ya no es significativa, ademas de esto. su capacidad para explicar las variaciones bajó al 41,76% casi la mitad de lo que era anteriormente.
revisemos el criterio de Akaike
AIC(mdm_trans)
## [1] 76.10836
y por ultimo el MAE
mdm_pred2=lm(log(precio)~km+modelo+veh, data = carros_modelar)
prezio_pred=exp(predict(mdm_pred2,list(km=carros_validar$km, modelo=carros_validar$modelo, veh=carros_validar$veh)))
prezio_real=carros_validar$precio
eror=prezio_real-prezio_pred
res3=data.frame(presio_real,presio_pred,errror)
res3
## presio_real presio_pred errror
## 1 38000000 38874361 -874360.68
## 2 52000000 52551234 -551233.98
## 3 56000000 55906961 93038.73
## 4 74000000 66004021 7995978.73
## 5 40000000 46317830 -6317829.59
## 6 36900000 35727975 1172025.44
## 7 52999999 52431721 568277.56
## 8 34000000 39232898 -5232898.32
## 9 35500000 35204913 295087.04
## 10 39000000 39232898 -232898.32
## 11 37500000 42842590 -5342589.76
## 12 57900000 58919090 -1019089.99
## 13 46500000 48702517 -2202517.45
## 14 39500000 46093744 -6593743.57
## 15 54500000 52088123 2411877.13
## 16 33000000 40622232 -7622231.66
## 17 56000000 52954589 3045411.17
## 18 44000000 43006920 993080.49
## 19 31000000 27227500 3772499.75
## 20 29000000 30686307 -1686307.10
## 21 32500000 33698436 -1198435.82
## 22 33500000 36964529 -3464528.70
## 23 34000000 41321174 -7321173.55
## 24 37500000 33982278 3517721.88
## 25 32000000 33997217 -1997217.19
## 26 1000000 29954293 -28954292.76
## 27 34000000 39455657 -5455657.41
## 28 33000000 26777834 6222165.71
## 29 37500000 42958908 -5458908.00
## 30 50000000 39160572 10839428.28
## 31 35000000 29954293 5045707.24
## 32 31500000 30447282 1052717.99
## 33 37000000 40126048 -3126048.10
## 34 40800000 39976657 823342.58
## 35 38500000 37207707 1292293.15
## 36 27000000 23840401 3159599.08
## 37 28700000 27046738 1653262.48
## 38 32000000 30507038 1492961.71
## 39 34500000 39453790 -4953790.03
MAE3=mean(abs(eror))
MAE3
## [1] 3477774
esta transformación a logaritmo solo nos mostró un mejor AIC 76.10836, en relacion a uno de 3995.52, es decir hay un mejor ajuste de los datos. la magnitud del error es peor en comparacion a los 2.9 millones que teniamos. por otra parte la variable kilometraje dejo de ser sifgnificativa, pero vamos a ver si podemos arreglar esta falla y algo mejora.
step(mdm_trans)
## Start: AIC=-291.98
## log(y) ~ km + mdl + veh
##
## Df Sum of Sq RSS AIC
## - km 1 0.1753 12.784 -292.20
## <none> 12.609 -291.98
## - mdl 1 3.6935 16.302 -260.84
## - veh 1 8.4731 21.082 -227.67
##
## Step: AIC=-292.2
## log(y) ~ mdl + veh
##
## Df Sum of Sq RSS AIC
## <none> 12.784 -292.20
## - mdl 1 4.0319 16.816 -258.83
## - veh 1 8.3130 21.097 -229.58
##
## Call:
## lm(formula = log(y) ~ mdl + veh)
##
## Coefficients:
## (Intercept) mdl vehkia cerato
## -138.94283 0.07749 0.54937
mdm_trans3=lm(log(y) ~ mdl + veh)
summary(mdm_trans3)
##
## Call:
## lm(formula = log(y) ~ mdl + veh)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.3864 -0.0299 0.0139 0.0644 0.5529
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -138.94283 24.78238 -5.607 1.24e-07 ***
## mdl 0.07749 0.01229 6.304 4.47e-09 ***
## vehkia cerato 0.54937 0.06069 9.052 2.20e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3185 on 126 degrees of freedom
## Multiple R-squared: 0.4233, Adjusted R-squared: 0.4142
## F-statistic: 46.25 on 2 and 126 DF, p-value: 8.683e-16
AIC(mdm_trans3)
## [1] 75.88971
summary(mdm_trans3)
##
## Call:
## lm(formula = log(y) ~ mdl + veh)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.3864 -0.0299 0.0139 0.0644 0.5529
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -138.94283 24.78238 -5.607 1.24e-07 ***
## mdl 0.07749 0.01229 6.304 4.47e-09 ***
## vehkia cerato 0.54937 0.06069 9.052 2.20e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3185 on 126 degrees of freedom
## Multiple R-squared: 0.4233, Adjusted R-squared: 0.4142
## F-statistic: 46.25 on 2 and 126 DF, p-value: 8.683e-16
mdm_pred3=lm(log(precio)~modelo+veh, data = carros_modelar)
pre2io_pred=exp(predict(mdm_pred3,list(modelo=carros_validar$modelo, veh=carros_validar$veh)))
pre2io_real=carros_validar$precio
erorr=pre2io_real-pre2io_pred
res4=data.frame(presio_real,presio_pred,errror)
res4
## presio_real presio_pred errror
## 1 38000000 38874361 -874360.68
## 2 52000000 52551234 -551233.98
## 3 56000000 55906961 93038.73
## 4 74000000 66004021 7995978.73
## 5 40000000 46317830 -6317829.59
## 6 36900000 35727975 1172025.44
## 7 52999999 52431721 568277.56
## 8 34000000 39232898 -5232898.32
## 9 35500000 35204913 295087.04
## 10 39000000 39232898 -232898.32
## 11 37500000 42842590 -5342589.76
## 12 57900000 58919090 -1019089.99
## 13 46500000 48702517 -2202517.45
## 14 39500000 46093744 -6593743.57
## 15 54500000 52088123 2411877.13
## 16 33000000 40622232 -7622231.66
## 17 56000000 52954589 3045411.17
## 18 44000000 43006920 993080.49
## 19 31000000 27227500 3772499.75
## 20 29000000 30686307 -1686307.10
## 21 32500000 33698436 -1198435.82
## 22 33500000 36964529 -3464528.70
## 23 34000000 41321174 -7321173.55
## 24 37500000 33982278 3517721.88
## 25 32000000 33997217 -1997217.19
## 26 1000000 29954293 -28954292.76
## 27 34000000 39455657 -5455657.41
## 28 33000000 26777834 6222165.71
## 29 37500000 42958908 -5458908.00
## 30 50000000 39160572 10839428.28
## 31 35000000 29954293 5045707.24
## 32 31500000 30447282 1052717.99
## 33 37000000 40126048 -3126048.10
## 34 40800000 39976657 823342.58
## 35 38500000 37207707 1292293.15
## 36 27000000 23840401 3159599.08
## 37 28700000 27046738 1653262.48
## 38 32000000 30507038 1492961.71
## 39 34500000 39453790 -4953790.03
MAE4=mean(abs(erorr))
MAE4
## [1] 3539380
obtuvimos un nuevo modelo el cual resolvio su problema de no tener un coeficiente significativo, pero con esta transformacion el R2 es mucho peor que en el modelo original, ademas el MAE es peor. Realmente no veo esta transformacion como algo necesario.
##predicciones con el nuevo modelo
decidi compararlo con los ecenarios anteriores para ver como se desempeña en las mismas situaciones.
escenario 1
exp(predict(mdm_trans3,list(km=102600,mdl=2014,veh="kia cerato")))
## 1
## 47385630
escenario 2
exp(predict(mdm_trans3,list(km=170000,mdl=2013,veh="chevrolet sail")))
## 1
## 25316653
escenario 3
exp(predict(mdm_trans3,list(km=91000,mdl=2020,veh="kia cerato")))
## 1
## 75434617
escenario 1
vr pred: 48.929.825
vr trans:47.385.630
vr real: 48.000.000
escenario 2
vr pred: 24.492.654
vr trans:25.316.653
vr real: 28.000.000
escenario 3
vr pred: 70.731.610
vr trans: 75.434.617
vr real: 68.000.000
como consluision final sobre el nuevo modelo transformado diria que realmente no cambio mucho. no esperaba que le fuera mejor, pero realmente es casi lo mismo que el otro modelo. por ende, no considero necesario trabajar con este modelo, y mucho más por el concepto de la variable, pues son bienes que estan sujetos a negociación.