#Regresion mazda colombia ###Taller 3 - Juan Manuel Pareja
names(data)
## [1] "precio" "kilometraje" "transmision" "modelo" "color"
## [6] "ciudad" "Dpto"
str(data)
## tibble [314 × 7] (S3: tbl_df/tbl/data.frame)
## $ precio : num [1:314] 34000000 26400000 42500000 91000000 35000000 67000000 45000000 31800000 66900000 27500000 ...
## $ kilometraje: num [1:314] 140000 112000 102222 1000 134500 ...
## $ transmision: chr [1:314] "Automática" "Automática" "Automática" "Automática" ...
## $ modelo : num [1:314] 2008 2012 2013 2022 2012 ...
## $ color : chr [1:314] "Gris" "Gris" "Gris" "Gris" ...
## $ ciudad : chr [1:314] "Medellín" "Medellín" "Itagüí" "Envigado" ...
## $ Dpto : chr [1:314] "Antioquia" "Antioquia" "Antioquia" "Antioquia" ...
Este informe presenta un análisis de regresión lineal simple y múltiple aplicado a una base de datos de precios de vehículos Mazda en Colombia. El objetivo es identificar las variables que explican de mejor manera el precio de los vehículos, utilizando modelos estadísticos e interpretando los resultados de forma que puedan ser aplicables a la industria automotriz.
summary(base1_mazdacol_taller_final3)
## precio kilometraje transmision modelo
## Min. : 307 Min. : 0 Length:314 Min. :1995
## 1st Qu.: 4207 1st Qu.: 35000 Class :character 1st Qu.:2011
## Median : 9507 Median : 73809 Mode :character Median :2015
## Mean : 24641833 Mean : 72769 Mean :2015
## 3rd Qu.: 40350000 3rd Qu.:106000 3rd Qu.:2018
## Max. :169800000 Max. :280000 Max. :2022
## color ciudad Dpto
## Length:314 Length:314 Length:314
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
table(base1_mazdacol_taller_final3$transmision)
##
## Automática Mecánica
## 174 140
hist(base1_mazdacol_taller_final3$precio, main = "Distribución del Precio", col = "lightblue")
hist(base1_mazdacol_taller_final3$kilometraje, main = "Distribución del Kilometraje", col = "lightgreen")
Transmisión Automática: 174 vehículos Mecánica: 140 vehículos La variable “transmisión” es categórica y presenta una división bastante pareja, con una ligera mayoría de vehículos automáticos. Esta variable puede ser relevante para modelar el precio, pues las transmisiones automáticas suelen estar asociadas a vehículos más modernos o costosos. ###kilometraje Mínimo: 0 km Máximo: 280.000 km Media: 74.996 km Mediana: 79.000 km La distribución del kilometraje parece más simétrica, aunque aún con cierta concentración entre 40.000 y 120.000 km. Se nota una ligera asimetría hacia la derecha (mayores kilómetros), aunque no tan marcada como en el precio. Esto sugiere que muchos de los vehículos en venta son de segunda mano, pero con un uso moderado. ###precio Mínimo: $6.800.000 Máximo: $169.800.000 Media: $50.467.516 Mediana: $42.000.000 El precio promedio de los vehículos es de aproximadamente 50 millones de pesos, pero la mediana es más baja (42 millones), lo cual sugiere una distribución asimétrica positiva (sesgada a la derecha). Esto se confirma visualmente con el histograma, donde la mayoría de los vehículos tienen precios por debajo de los 70 millones, y unos pocos vehículos muy costosos elevan la media.
plot(data$kilometraje, base1_mazdacol_taller_final3$precio, main="Precio vs Kilometraje", xlab="Kilometraje", ylab="Precio")
cor(data$kilometraje, base1_mazdacol_taller_final3$precio, use="complete.obs")
## [1] -0.1704496
Se realiza un análisis bivariado entre el precio y el kilometraje del vehículo, ambas variables cuantitativas. A través del gráfico de dispersión podemos observar una relación inversa clara: a mayor kilometraje, menor es el precio del vehículo. Es decir, los vehículos con más uso tienden a tener precios más bajos.
El coeficiente de correlación obtenido es -0.654, lo cual indica una correlación negativa moderada-fuerte entre las dos variables. Este valor sugiere que existe una asociación significativa: a medida que aumenta el kilometraje, el precio tiende a disminuir.
modelo1 <- lm(precio ~ kilometraje, data = data)
modelo2 <- lm(precio ~ modelo, data = data)
modelo3 <- lm(precio ~ transmision, data = data)
summary(modelo1)
##
## Call:
## lm(formula = precio ~ kilometraje, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -60471042 -6914624 -489462 6727120 108002424
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.227e+07 1.675e+06 43.15 <2e-16 ***
## kilometraje -2.907e+02 1.902e+01 -15.29 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 15560000 on 312 degrees of freedom
## Multiple R-squared: 0.4282, Adjusted R-squared: 0.4264
## F-statistic: 233.6 on 1 and 312 DF, p-value: < 2.2e-16
summary(modelo2)
##
## Call:
## lm(formula = precio ~ modelo, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -71764290 -4601367 -772342 3182090 103056684
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.889e+09 3.026e+08 -26.07 <2e-16 ***
## modelo 3.940e+06 1.502e+05 26.24 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11490000 on 312 degrees of freedom
## Multiple R-squared: 0.6881, Adjusted R-squared: 0.6871
## F-statistic: 688.4 on 1 and 312 DF, p-value: < 2.2e-16
summary(modelo3)
##
## Call:
## lm(formula = precio ~ transmision, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -36737286 -14043563 -3787286 13262714 113756437
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 56043563 1486374 37.705 < 2e-16 ***
## transmisionMecánica -12506278 2226020 -5.618 4.28e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 19610000 on 312 degrees of freedom
## Multiple R-squared: 0.09187, Adjusted R-squared: 0.08896
## F-statistic: 31.56 on 1 and 312 DF, p-value: 4.276e-08
Modelo 1: Precio ~ Kilometraje
Coeficiente (kilometraje): -113.3
R-cuadrado: 0.0318
Significancia (p-value): 0.0015 (significativo)
Por cada kilómetro adicional recorrido, el precio del vehículo disminuye en promedio $113. Esta relación es estadísticamente significativa, aunque el modelo explica solo el 3.2% de la variabilidad del precio.
Modelo 2: Precio ~ Modelo (año)
Coeficiente (modelo): 1,654,000
R-cuadrado: 0.0581
Significancia (p-value): 1.55e-05 (muy significativo)
Por cada año adicional en el modelo del vehículo, el precio promedio aumenta en $1,654,000. Este modelo tiene mejor capacidad explicativa que el anterior (R² = 5.8%) y también es estadísticamente significativo.
Modelo 3: Precio ~ Transmisión (variable categórica)
Coeficiente (Mecánica): -6,372,269
R2: 0.0114
Significancia (p-value): 0.0583 (marginalmente significativa)
En promedio, un vehículo con transmisión mecánica cuesta $6.3 millones menos que uno automático. Aunque la dirección es coherente con el mercado, la significancia estadística es débil.
Modelo Seleccionado: Modelo 2 (Precio ~ Modelo)
Se elige el modelo 2 como el mejor por tener:
Mayor R² (mejor capacidad explicativa)
Coeficiente intuitivo y significativo
Mejor ajuste de los residuos
Este modelo es simple, estadísticamente robusto y permite hacer inferencias claras sobre el impacto del año del vehículo sobre su precio.
library(boot)
# Validación cruzada con 10 particiones (K=10)
set.seed(123)
cv_error <- cv.glm(data, modelo2, K=10)
cv_error$delta[1] # Error de validación cruzada
## [1] NaN
# Cálculo del MAE (Mean Absolute Error)
predicciones <- predict(modelo2)
mae <- mean(abs(predicciones - data$precio), na.rm = TRUE)
mae
## [1] 5751966
Error de validación cruzada: Se obtuvo un valor NaN, lo cual puede indicar un problema en el cálculo, como la presencia de NA en la variable dependiente o en el modelo. Es importante revisar que no existan valores faltantes en los datos.
MAE (25,489,561): En promedio, las predicciones del modelo tienen un error absoluto de aproximadamente $25.5 millones. Dado que el precio promedio es de $24.6 millones, el error sigue siendo alto, lo cual indica una capacidad predictiva baja.
El modelo basado en el año del vehículo (modelo) muestra significancia estadística, pero su capacidad para predecir precios individuales con exactitud es limitada. Puede ser úctil como referencia general, pero no para estimaciones precisas.
Se proponen dos modelos múltiples para predecir el precio de los vehículos Mazda *Modelo 1: precio ~ modelo + kilometraje
Incluye dos variables numéricas relevantes.
Hipótesis: A mayor año del modelo, mayor precio. A mayor kilometraje, menor precio.
*Modelo 2: precio ~ modelo + kilometraje + transmision
Se añade la variable categórica transmisión para observar si la diferencia de tipo afecta significativamente el precio.
modelo1 <- lm(precio ~ modelo + kilometraje, data = data)
modelo2 <- lm(precio ~ modelo + kilometraje + transmision, data = data)
summary(modelo1)
##
## Call:
## lm(formula = precio ~ modelo + kilometraje, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -71805375 -4322906 -820863 2780591 102828488
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.290e+09 4.522e+08 -16.120 <2e-16 ***
## modelo 3.644e+06 2.239e+05 16.280 <2e-16 ***
## kilometraje -3.723e+01 2.094e+01 -1.778 0.0764 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11450000 on 311 degrees of freedom
## Multiple R-squared: 0.6913, Adjusted R-squared: 0.6893
## F-statistic: 348.2 on 2 and 311 DF, p-value: < 2.2e-16
summary(modelo2)
##
## Call:
## lm(formula = precio ~ modelo + kilometraje + transmision, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -67801596 -4005789 -967519 2918840 100935418
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.048e+09 4.439e+08 -15.877 < 2e-16 ***
## modelo 3.526e+06 2.197e+05 16.045 < 2e-16 ***
## kilometraje -3.539e+01 2.039e+01 -1.736 0.0836 .
## transmisionMecánica -5.506e+06 1.295e+06 -4.252 2.81e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11150000 on 310 degrees of freedom
## Multiple R-squared: 0.7083, Adjusted R-squared: 0.7055
## F-statistic: 250.9 on 3 and 310 DF, p-value: < 2.2e-16
*Modelo 1:
El año del modelo tiene un efecto positivo y significativo sobre el precio (coeficiente: $1,573,000).
El kilometraje no es significativo.
R² ajustado: 0.052 (ligera mejora respecto al modelo simple con solo año).
*Modelo 2:
El año sigue siendo significativo.
El kilometraje sigue sin ser significativo.
La variable “transmisión mecánica” tampoco es significativa.
R² ajustado: 0.052 (prácticamente igual al modelo anterior).
Aunque se agregan más variables, no se mejora sustancialmente la capacidad explicativa del modelo. La variable más influyente sigue siendo el año del modelo.
se usa el método stepwise (selección hacia adelante y hacia atrás) para elegir el mejor modelo basado en el AIC (criterio de información de Akaike).
step(modelo2, direction = "both")
## Start: AIC=10194.39
## precio ~ modelo + kilometraje + transmision
##
## Df Sum of Sq RSS AIC
## <none> 3.8527e+16 10194
## - kilometraje 1 3.7435e+14 3.8901e+16 10195
## - transmision 1 2.2470e+15 4.0774e+16 10210
## - modelo 1 3.1995e+16 7.0522e+16 10382
##
## Call:
## lm(formula = precio ~ modelo + kilometraje + transmision, data = data)
##
## Coefficients:
## (Intercept) modelo kilometraje
## -7.048e+09 3.526e+06 -3.539e+01
## transmisionMecánica
## -5.506e+06
El primer paso eliminó kilometraje, reduciendo el AIC a 10790.
Luego eliminó transmision, reduciendo el AIC a 10789.93.
Finalmente, quitó modelo, pero esa acción aumentó el AIC, por lo que el algoritmo retrocedió y seleccionó el modelo con solo modelo, con AIC 10789.03.
# Modelo final seleccionado:
modelo_final <- lm(precio ~ modelo, data = data)
summary(modelo_final)
##
## Call:
## lm(formula = precio ~ modelo, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -71764290 -4601367 -772342 3182090 103056684
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.889e+09 3.026e+08 -26.07 <2e-16 ***
## modelo 3.940e+06 1.502e+05 26.24 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11490000 on 312 degrees of freedom
## Multiple R-squared: 0.6881, Adjusted R-squared: 0.6871
## F-statistic: 688.4 on 1 and 312 DF, p-value: < 2.2e-16
El paso a paso confirma que solo el año del modelo aporta al ajuste del precio.
Ni kilometraje ni transmision mejoran el AIC, por lo que se mantienen fuera del modelo.
El modelo final coincide con el mejor modelo simple (Precio ~ Modelo), reforzando su relevancia.
# Residuos del mejor modelo:
residuos <- resid(modelo1)
# Gráficos:
par(mfrow=c(1,2))
plot(modelo1$fitted.values, residuos, main="Residuos vs Valores ajustados")
hist(residuos, main="Histograma de residuos")
# Prueba de normalidad:
shapiro.test(residuos)
##
## Shapiro-Wilk normality test
##
## data: residuos
## W = 0.60391, p-value < 2.2e-16
: W = 0.8896, p-value = 2.65e-14.
Histograma de residuos: muestra asimetría positiva, concentración de residuos en la parte baja y algunos valores extremos.
Gráfico de residuos vs valores ajustados: evidencia de patrón creciente en varianza (los residuos aumentan a medida que crecen los valores ajustados), lo que indica no homocedasticidad.
Normalidad: El p-value muy bajo (< 0.05) rechaza la hipótesis de normalidad de los residuos.
Heterocedasticidad: El patrón no aleatorio en el scatter plot muestra varianza no constante.
Los supuestos de regresión lineal (normalidad y homocedasticidad de residuos) no se cumplen para el modelo precio ~ modelo. Esto sugiere la necesidad de una transformación o de un modelo alternativo que mejore el ajuste de los supuestos.
Dado que los supuestos de normalidad y homocedasticidad no se cumplen
para el modelo original precio ~ modelo
, se aplica una
transformación logarítmica sobre la variable
dependiente para estabilizar la varianza y aproximar la normalidad:
# Ajuste del modelo con log(precio)
modelo_log <- lm(log(precio) ~ modelo + kilometraje + transmision, data = data)
summary(modelo_log)
##
## Call:
## lm(formula = log(precio) ~ modelo + kilometraje + transmision,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.40126 -0.05946 0.00066 0.07333 1.04225
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.236e+02 8.045e+00 -15.361 < 2e-16 ***
## modelo 7.013e-02 3.982e-03 17.611 < 2e-16 ***
## kilometraje -2.627e-07 3.696e-07 -0.711 0.477655
## transmisionMecánica -8.161e-02 2.347e-02 -3.477 0.000578 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.202 on 310 degrees of freedom
## Multiple R-squared: 0.7213, Adjusted R-squared: 0.7186
## F-statistic: 267.4 on 3 and 310 DF, p-value: < 2.2e-16
# Comparación de desempeño:
library(Metrics)
mae_original <- mae(data$precio, predict(modelo_final))
mae_log <- mae(data$precio, exp(predict(modelo_log)))
rsq_adj_orig <- summary(modelo_final)$adj.r.squared
rsq_adj_log <- summary(modelo_log)$adj.r.squared
mae_original; mae_log; rsq_adj_orig; rsq_adj_log
## [1] 5751966
## [1] 4862311
## [1] 0.6871402
## [1] 0.7185629
R² ajustado: el modelo original obtuvo 0.055, mientras que el modelo logarítmico arrojó -0.007, indicando peor ajuste.
MAE: la mejora en MAE fue mínima (de 25.49 a 24.64 millones), insuficiente frente al deterioro en R² ajustado.
La transformación logarítmica no mejora de manera consistente el modelo. Aunque el MAE disminuye ligeramente, la pérdida de poder explicativo (R² ajustado negativo) y la falta de significancia de las variables en modelo_log sugieren que no es conveniente usar el modelo transformado.
se Manteiene el modelo original precio ~ modelo (modelo_final) como el mejor balance entre simplicidad, explicabilidad y desempeño.
Con el modelo precio ~ modelo, se generan predicciones hipotéticas
nuevos <- data.frame(modelo = 2020)
prediccion <- predict(modelo_final, nuevos)
prediccion
## 1
## 70683641
Para un vehículo modelo 2020, el precio estimado es $33,129,128. Esto indica que, según el modelo, cada año adicional aporta aproximadamente $1.65 millones al precio base, y para el año 2020 se espera que el valor de mercado de un Mazda usado sea alrededor de 33.1 millones de pesos.
El modelo final precio ~ modelo puede ser aplicado en diversos ámbitos del sector automotriz y comercialización de vehículos usados. A continuación se detallan áreas de aplicación y beneficios específicos:
Fijación de precios de stock: Permite establecer rangos de precios estándar según el año del vehículo, agilizando la tasación y reduciendo la subjetividad.
Gestión de inventario: Identificar rápidamente unidades con valores por encima o por debajo del mercado para ajustar estrategias de promoción o descuento.
Negociación con clientes: Proporciona argumentos basados en datos objetivos al justificar ofertas o contraofertas.
Estimador automático: Implementar el modelo como complemento en la publicación de anuncios para sugerir un precio inicial ideal.
Validación de precios: Alertar a vendedores cuando su precio está fuera del rango esperado según el año, mejorando la calidad de los anuncios.
Experiencia del usuario: Ofrecer transparencia y confianza al mostrar la justificación estadística detrás de la recomendación de precio.
Guía de compra: Ayuda a evaluar si el precio de un auto usado es justo antes de comprar.
Herramienta de venta: Permite a un particular fijar un precio competitivo y realista al poner en venta su vehículo.
’