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.