Descripción Inicial de los Datos.

Planteamiento de las variables:

Para el modelo de regresion simple voy a utilizar KM ya que se esperaria una disminucion en el precio de acuerdo a un aumento en este mismo.

km <- datos_vehiculos$km
summary(km)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       0   68000   91000   92492  115000  228000
sd(km)
## [1] 42745.35

-Promedio: 92,492 km . -Mediana: 91,000 km.

-Rango: Entre 0 km (mínimo) y 228,000 km (máximo).

-Desviación Estándar: 42,745 km.

Estos resultados indican una alta dispersión en el kilometraje de los vehículos, lo cual puede influir significativamente en el precio de venta.

modelo <- datos_vehiculos$modelo
summary(modelo)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2010    2014    2015    2015    2017    2022

El análisis estadístico del año del modelo (modelo) arroja los siguientes resultados:

Mínimo: 2010

1er Cuartil: 2014

Mediana: 2015

Promedio: 2015

3er Cuartil: 2017

Máximo: 2022

La mayoría de los vehículos en la base de datos corresponden a modelos entre 2014 y 2017, con una mediana y promedio en 2015. Esto indica que los datos están concentrados en vehículos relativamente recientes, lo cual es relevante para determinar tendencias de precios en el mercado de autos usados. Además, el rango desde 2010 hasta 2022 permite analizar vehículos tanto antiguos como modernos, proporcionando un espectro amplio para las predicciones.

sd(datos_vehiculos$modelo)
## [1] 2.456625

La desviación estándar del año del modelo es de 2.46 años.

Esto indica una variabilidad moderada en los datos. La mayoría de los vehículos están cerca del promedio del año 2015, pero hay cierta dispersión hacia modelos más antiguos y más recientes. Esta variabilidad es lo suficientemente baja como para que el modelo del vehículo sea un buen predictor del precio, dado que no se observan diferencias extremas en los años.

Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]}
veh <- datos_vehiculos$veh
table(veh)
## veh
## chevrolet sail     kia cerato 
##             73             56
Mode(veh)
## [1] "chevrolet sail"

El análisis de la variable veh(tipo de vehículo) muestra lo siguiente:

Frecuencia de Chevrolet Sail: 73 vehículos.

Frecuencia de Kia Cerato: 56 vehículos.

Moda: Chevrolet Sail.

La moda indica que el Chevrolet Sail es el tipo de vehículo más común en la base de datos, con una frecuencia superior al Kia Cerato. Esto refleja una concentración de datos en un modelo específico, lo que puede influir en el análisis y debe considerarse para evitar sesgos al interpretar los resultados.

Análisis Exploratorio

plot(km, datos_vehiculos$precio, 
     main = "Relación entre Kilometraje y Precio", 
     xlab = "Kilometraje", 
     ylab = "Precio")

cor(km, datos_vehiculos$precio)
## [1] -0.1984356

El gráfico de dispersión muestra una relación negativa débil. A mayor kilometraje, el precio tiende a disminuir, pero la relación no es fuerte.

El coeficiente de correlación es -0.1984, confirmando una relación inversa débil entre el kilometraje y el precio.

plot(modelo, datos_vehiculos$precio, 
     main = "Relación entre Modelo y Precio", 
     xlab = "Año del Modelo", 
     ylab = "Precio")

cor(modelo, datos_vehiculos$precio)
## [1] 0.3550418

Se observa una tendencia ascendente en el gráfico, lo que indica que los vehículos más nuevos tienen precios más altos. Correlación: El coeficiente de correlación es 0.3550, lo que sugiere una relación positiva moderada entre el año del modelo y el precio.

boxplot(datos_vehiculos$precio ~ veh, 
        main = "Distribución de Precios por Tipo de Vehículo", 
        xlab = "Tipo de Vehículo", 
        ylab = "Precio")

El Chevrolet Sail muestra precios más bajos y una variabilidad menor en comparación con el Kia Cerato, que tiene precios más altos y una mayor dispersión.

Esto indica que el tipo de vehículo influye significativamente en el precio y debe considerarse como un predictor importante en los modelos.

Modelo de regresion simple

modelo1 <- lm(precio ~ km, data = datos_vehiculos)
summary(modelo1)
## 
## Call:
## lm(formula = precio ~ km, data = datos_vehiculos)
## 
## 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

El modelo muestra un intercepto de $45.770.000, poco representativo, ya que el beta1 es de -$57,62 por kilómetro, lo que dificulta explicar los datos por encima del intercepto. Con un nivel de significancia del 3,9 %, el kilometraje no explica bien las variaciones del precio, aunque las variables son significativas y su efecto no es aleatorio.

Aunque el modelo tambien nos indica que por cada kilómetro adicional, el precio disminuye en promedio 57.62 pesos. Sin embargo, como mencione anteriormente este modelo explica solo el 3.94% de la variación en el precio.

modelo2 <- lm(precio ~ modelo, data = datos_vehiculos)
summary(modelo2)
## 
## Call:
## lm(formula = precio ~ modelo, data = datos_vehiculos)
## 
## 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 ***
## modelo       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

El modelo tiene un beta 0 de -$3.574.000.000, compensado por un beta 1 de $1.794.000, indicando que por cada año más reciente del vehículo, el precio aumenta en promedio $1.794.000. Aunque esto ayuda a corregir el intercepto, el modelo solo explica el 12,61 % de las variaciones en Y. Las variables son significativas, por lo que su efecto no es aleatorio, pero sigue siendo un modelo limitado.

modelo3 <- lm(precio ~ veh, data = datos_vehiculos)
summary(modelo3)
## 
## Call:
## lm(formula = precio ~ veh, data = datos_vehiculos)
## 
## 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 beta 0 del modelo indica que un Chevrolet Sail tiene un precio base de $33.423.151, mientras que el beta1 muestra que un Kia Cerato cuesta en promedio $16.176.849 más. Aunque la variable es categórica, explica el 42,06 % de las variaciones, siendo la más representativa hasta ahora, posiblemente porque los precios del Chevrolet Sail están en un rango estrecho. Ambas variables son significativas, sugiriendo que los efectos observados son reales.

Eleccion de modelo

Luego de comparar cada modelo vemos que el tercer modelo es el mas completo ya que explicar el mayor porcentaje de las variaciones.

Validacion Cruzada

set.seed(123)
indices <- sample(1:nrow(datos_vehiculos), 0.7 * nrow(datos_vehiculos))
train <- datos_vehiculos[indices, ]
test <- datos_vehiculos[-indices, ]
modelo_valid <- lm(precio ~ veh, data = train)
pred <- predict(modelo_valid, test)
MAE <- mean(abs(test$precio - pred))
MAE
## [1] 7025744

El error absoluto promedio es de aproximadamente 7025744 pesos. Este es un resultado razonable considerando que el modelo solo utiliza una variable categórica.

Modelo múltiple 1

modelo_m1 <- lm(precio ~ km + veh, data = datos_vehiculos)
summary(modelo_m1)
## 
## Call:
## lm(formula = precio ~ km + veh, data = datos_vehiculos)
## 
## 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
step(modelo_m1)
## Start:  AIC=4130.95
## precio ~ 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 = precio ~ km + veh, data = datos_vehiculos)
## 
## Coefficients:
##   (Intercept)             km  vehkia cerato  
##      40484502            -80       16956320

Modelo múltiple 2

modelo_m2 <- lm(precio ~ km + modelo + veh, data = datos_vehiculos)
summary(modelo_m2)
## 
## Call:
## lm(formula = precio ~ km + modelo + veh, data = datos_vehiculos)
## 
## 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 *  
## modelo         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
step(modelo_m2)
## Start:  AIC=3995.52
## precio ~ km + modelo + veh
## 
##          Df  Sum of Sq        RSS    AIC
## <none>                 3.4281e+15 3995.5
## - km      1 1.1123e+14 3.5393e+15 3997.6
## - modelo  1 6.5199e+15 9.9480e+15 4130.9
## - veh     1 1.3803e+16 1.7231e+16 4201.8
## 
## Call:
## lm(formula = precio ~ km + modelo + veh, data = datos_vehiculos)
## 
## Coefficients:
##   (Intercept)             km         modelo  vehkia cerato  
##    -7.395e+09      2.595e+01      3.684e+06      2.250e+07

Intercepto: -7,395,000,000

Efecto del kilometraje: +25.95

Efecto del año del modelo: +3,684,000

Efecto del tipo de vehículo (Kia Cerato): +22,500,000

R² ajustado: 0.822

Conclusión: Este modelo es altamente explicativo. Integra adecuadamente las tres variables, mostrando que el tipo de vehículo y el año del modelo son los principales predictores, mientras que el kilometraje tiene un efecto secundario.

Eleccion del modelo

El segundo modelo tiene un R cuadrado ajustado de 82.2%, mientras que el primero tiene un 48.75%. Esto indica que el segundo modelo explica mejor la variabilidad del precio de los vehículos.

Error estándar residual: El segundo modelo tiene un error estándar residual de 5,237,000, menor que el del primero (8,886,000), lo que significa que sus predicciones están más cerca de los valores reales

El estadístico F del segundo modelo es 198, mayor que el 61.88 del primero, lo que indica un mejor ajuste.

El modelo dos presenta el menor AIC

Conclusion: Modelo 2 es superior.

Validación cruzada

modelo_m2_validado <- lm(precio ~ km + modelo + veh, data = train) 
predicciones_m2 <- predict(modelo_m2_validado, newdata = test)    
mae_m2 <- mean(abs(test$precio - predicciones_m2))                
mae_m2
## [1] 3896787

R² ajustado: 0.4176

MAE: ~3,477,774

Conclusión: Aunque el modelo logarítmico mejora ligeramente la interpretación, su capacidad explicativa es menor que la del modelo lineal múltiple original.

Supuestos del modelo

par(mfrow = c(2, 2))
plot(modelo_m2)

En los graficos vemos que los valores se ajustan y no se presenta una tendencia clara pero voy a graficar el modelo ajustado con Log para ver si se ajusta mejor.

Transformación logarítmica

modelo_m2_log <- lm(log(precio) ~ km + modelo + veh, data = datos_vehiculos)
summary(modelo_m2_log)
## 
## Call:
## lm(formula = log(precio) ~ km + modelo + veh, data = datos_vehiculos)
## 
## 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    
## modelo         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

El modelo logarítmico muestra que el precio de los vehículos aumenta significativamente con el año del modelo y es mayor para los Kia Cerato en comparación con los Chevrolet Sail, mientras que el kilometraje no tiene un impacto relevante. El ajuste del modelo es moderado (R^2=43.12%), lo que sugiere que otras variables podrían mejorar su capacidad predictiva. Además, el comportamiento de los residuales indica un ajuste razonable, aunque hay casos atípicos que podrían estar influyendo en los resultados. Este modelo es útil para identificar tendencias generales en el precio de los vehículos con base en las variables disponibles.

Supuestos del modelo

par(mfrow = c(2, 2))
plot(modelo_m2_log)

Graficamente podemos ver que este modelo se ajusto mucho mejor sin tendencias ni datos desajustados.

Predicciónes con el modelo

escenarios <- data.frame(
  km = c(100000, 60000, 150000, 80000), 
  modelo = c(2017, 2020, 2014, 2019),  
  veh = c("chevrolet sail", "kia cerato", "kia cerato", "chevrolet sail"))
escenarios$precio_predicho <- exp(predict(modelo_m2_log, newdata = escenarios))
print(escenarios)
##       km modelo            veh precio_predicho
## 1 100000   2017 chevrolet sail        35293776
## 2  60000   2020     kia cerato        76942506
## 3 150000   2014     kia cerato        49883948
## 4  80000   2019 chevrolet sail        41200957

Escenario 1 (Chevrolet Sail, 100,000 km, 2017): 35,293,776

Escenario 2 (Kia Cerato, 60,000 km, 2020): 76,942,506

Escenario 3 (Kia Cerato, 150,000 km, 2014): 49,883,948

Escenario 4 (Chevrolet Sail, 80,000 km, 2019): 41,200,957

Conclusión: Los precios predichos reflejan tendencias razonables: los Kia Cerato son más caros y los modelos más nuevos tienen precios más altos. El kilometraje tiene un impacto menor en comparación con el tipo de vehículo y el año del modelo.

Definir cuál sería la utilidad del mejor modelo elegido en la práctica

El modelo múltiple 2 permite calcular un precio estimado basado en variables clave como el kilometraje, el año del modelo y el tipo de vehículo. Esta capacidad es especialmente útil en el mercado de vehículos usados, donde los precios tienden a ser altamente variables y dependen de múltiples factores.

Aplicación para Concesionarios

Los concesionarios pueden emplear este modelo para determinar precios de venta que sean atractivos para los compradores y competitivos en el mercado, evitando tanto el sobreprecio como la subvaloración de los vehículos. Esto es particularmente relevante para gestionar inventarios, ya que permite identificar el rango de precios óptimos para cada tipo de vehículo. Además, el modelo ayuda a prever las tendencias de precios para diferentes tipos de vehículos, lo que les permite ajustar su estrategia de compra y reventa.

Utilidad para Vendedores Particulares

Para los vendedores individuales, el modelo ofrece una guía objetiva para establecer precios de venta justos, tomando en cuenta las características específicas del vehículo. Esto es valioso en un mercado donde los precios son negociados y puede ser difícil para los particulares justificar el valor de su vehículo. Por ejemplo: Un Chevrolet Sail con 80,000 km y modelo 2019 tiene un precio predicho de $41,200,957 según el modelo. El vendedor puede usar esta estimación como punto de partida para negociar con potenciales compradores.