Para construir modelos de regresión lineal simple y múltiple, se plantea el precio (en millones) como variable dependiente (Y). En el caso de vehículos en Cali, el análisis múltiple considera las variables independientes: Km, color, ciudad, transmisión y departamento (Dpto), basándose en datos de OLX. Para la regresión simple, se utilizará una sola variable independiente para determinar el precio de una vivienda. A continuación, se describen las variables:

y = datos$precio
x1 = datos$kilometraje
x2 = datos$transmision
x3 = datos$modelo
x4 = datos$color
x5 = datos$ciudad
x6 = datos$Dpto

Regresion Lineal Simple

Análisis Univariado

# Variables cuantitativas
y <- datos$precio
x1 <- datos$kilometraje

# Media y desviación estándar de y = datos$precio
media_y <- mean(y, na.rm = TRUE)
desviacion_y <- sd(y, na.rm = TRUE)

cat("Media de precio:", media_y, "\n")
## Media de precio: 50467516
cat("Desviación estándar de precio:", desviacion_y, "\n")
## Desviación estándar de precio: 20541624
# Media y desviación estándar de x1 = datos$kilometraje
media_x1 <- mean(x1, na.rm = TRUE)
desviacion_x1 <- sd(x1, na.rm = TRUE)

cat("Media de Kilometraje:", media_x1, "\n")
## Media de Kilometraje: 74995.76
cat("Desviación estándar de Km:", desviacion_x1, "\n")
## Desviación estándar de Km: 46232.98
# Si modelo es categórica
if (is.factor(datos$modelo) || is.character(datos$modelo)) {
  cat("Modelo es una variable categórica. Frecuencias:\n")
  print(table(datos$modelo))
} else {
  # Si modelo es numérica
  x3 <- datos$modelo
  media_x3 <- mean(x3, na.rm = TRUE)
  desviacion_x3 <- sd(x3, na.rm = TRUE)

  cat("Media de modelo:", media_x3, "\n")
  cat("Desviación estándar de modelo:", desviacion_x3, "\n")
}
## Media de modelo: 2014.869 
## Desviación estándar de modelo: 4.324552

La media del precio de los vehículos es 50,467,516 pesos, lo que indica que el costo promedio de los automóviles en el conjunto de datos se encuentra cerca de este valor. Sin embargo, la desviación estándar de 20,541,624 pesos revela una amplia dispersión en los precios, relacionada con factores como el modelo, kilometraje, marca o estado del vehículo, lo que muestra diferencias significativas en los valores.

En cuanto al kilometraje, la media es de 74,995.76 km, lo que sugiere que los vehículos tienen un uso moderado, representando un rango típico de vehículos usados. La desviación estándar de 46,232.98 km indica una notable variabilidad, con algunos vehículos que han recorrido distancias considerablemente mayores o menores.

El año del modelo tiene una media de 2014.869, lo que sugiere que la mayoría de los vehículos tienen una antigüedad promedio de alrededor de 9 años considerando el año actual (2024). La desviación estándar de 4.324552 refleja cierta variabilidad en los años de los modelos, aunque la mayoría de los vehículos se encuentran en un rango relativamente cercano, posiblemente entre 2010 y 2019. Esto sugiere que el mercado incluye tanto modelos más recientes como algunos más antiguos, pero sin extremos significativos.

Analisis Bivariado

En el siguiente analisis bivariado es posible encontrar las correlaciones de las variables cuantitativas con respecto a la variable Y, precio, y de aigual manera los graficos de dipersion.

# Calcular correlaciones
# Cálculo de las correlaciones con la variable precio
cor_precio_kilometraje <- cor(datos$precio, datos$kilometraje, use = "complete.obs")
cor_precio_modelo <- cor(datos$precio, datos$modelo, use = "complete.obs")


# Imprimir los resultados
cat("Correlaciones con precio:\n")
## Correlaciones con precio:
cat("kilometraje:", cor_precio_kilometraje, "\n")
## kilometraje: -0.6543672
cat("modelo:", cor_precio_modelo, "\n")
## modelo: 0.8295419

Kilometraje: -0.6543672 La correlación negativa de -0.6543672 entre el kilometraje y el precio sugiere una relación moderada y negativa entre ambos. Esto implica que, a medida que el kilometraje aumenta, el precio tiende a disminuir de manera más marcada. Esta relación es coherente con la expectativa de que los vehículos con mayor uso (mayor kilometraje) suelen tener un valor de mercado más bajo. En general, los compradores consideran que los vehículos más usados pueden estar más desgastados, lo que reduce su valor.

Modelo (Año de fabricación): 0.8295419 La correlación positiva de 0.8295419 entre el año del modelo y el precio indica una fuerte relación positiva. Esto significa que los vehículos más nuevos, es decir, aquellos con un modelo más reciente, tienden a tener un precio más alto. Los compradores suelen valorar los autos más nuevos debido a la menor antigüedad, lo que a menudo implica menos desgaste, mejores características tecnológicas y mayor durabilidad. Esta fuerte correlación subraya que el año del modelo es un factor clave en la determinación del precio de un vehículo.

La correlación negativa entre kilometraje y precio refuerza la idea de que los vehículos más usados tienen un precio inferior, lo que es esperado en el mercado. Por otro lado, la alta correlación positiva entre el modelo (año de fabricación) y el precio indica que los vehículos más nuevos son considerablemente más caros, lo que refleja la preferencia de los compradores por autos más recientes. En conjunto, estas correlaciones evidencian que tanto el kilometraje como el año de fabricación son factores influyentes en el precio, pero existen otros factores que también afectan el valor del vehículo, los cuales no están reflejados en este análisis.

# Gráfico de dispersión entre precio y kilometraje
ggplot(datos, aes(x = kilometraje, y = precio)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "Dispersión: Precio vs km", x = "km", y = "Precio")
## `geom_smooth()` using formula = 'y ~ x'

La tendencia general, representada por la línea azul de regresión, muestra una relación negativa entre el kilometraje y el precio, indicando que a medida que aumenta el kilometraje, el precio del vehículo tiende a disminuir. Sin embargo, la dispersión de los puntos alrededor de la línea de tendencia es relativamente estrecha, lo que sugiere que, aunque la relación entre las dos variables es negativa, esta es de naturaleza moderada, ya que los puntos siguen bastante de cerca la tendencia general. Esta observación concuerda con la correlación moderadamente negativa entre el precio y el kilometraje, lo que refuerza la idea de que, aunque el kilometraje influye en el precio, hay otros factores que también afectan el valor del vehículo.

# Gráfico de dispersión entre precio y modelo
ggplot(datos, aes(x = modelo, y = precio)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "Dispersión: Precio vs modelo", x = "modelo", y = "precio")
## `geom_smooth()` using formula = 'y ~ x'

Se observa una tendencia positiva en el gráfico, indicada por la línea azul de regresión, que muestra que a medida que aumenta el año del modelo (es decir, los vehículos más recientes), el precio tiende a incrementarse. Esto sugiere que los vehículos más nuevos generalmente tienen un mayor valor en el mercado. Sin embargo, aunque la relación es clara, hay dispersión en los puntos, lo que indica que, aunque existe una correlación positiva fuerte entre el año del modelo y el precio, no es perfecta. Es decir, el precio no depende únicamente del año de fabricación, ya que otros factores también influyen en la determinación del valor del vehículo.

Modelos de regresion lineal simple

Segmento de los datos en 70% para entrenamiento y 30% para prueba

library(caTools)

# Dividir los datos en entrenamiento (70%) y prueba (30%)
set.seed(123) # Asegura reproducibilidad
split <- sample.split(datos$precio, SplitRatio = 0.7)
train_data <- subset(datos, split == TRUE)
test_data <- subset(datos, split == FALSE)

Modelo 1 de regresion simple: Precio vs Kilómetros (X1)

# Modelo 1: Precio ~ kilometraje
modelo1_de_regresion_simple <- lm(precio ~ kilometraje, data = train_data)
summary(modelo1_de_regresion_simple)
## 
## Call:
## lm(formula = precio ~ kilometraje, data = train_data)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -61398108  -6955416   -260195   6385414 107373232 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  7.347e+07  2.029e+06   36.21   <2e-16 ***
## kilometraje -3.066e+02  2.406e+01  -12.74   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 16750000 on 236 degrees of freedom
## Multiple R-squared:  0.4075, Adjusted R-squared:  0.405 
## F-statistic: 162.3 on 1 and 236 DF,  p-value: < 2.2e-16

En el Modelo 1 de regresión lineal simple, se utiliza el kilometraje como la variable predictora para estimar el precio de los vehículos. La relación observada es negativa, lo que significa que a medida que el kilometraje aumenta, el precio del vehículo tiende a disminuir. Este comportamiento es esperado, ya que los vehículos con mayor kilometraje generalmente sufren un mayor desgaste, lo que reduce su valor en el mercado.

Los resultados del modelo muestran que el intercepto es de 73,470,000 pesos, lo que implica que el precio estimado de un vehículo con kilometraje cero sería de ese valor. El coeficiente del kilometraje es de -306.6, lo que indica que, por cada kilómetro adicional recorrido, el precio promedio del vehículo disminuye en 306.6 pesos. Esta relación es significativa, con un p-valor de < 2e-16 tanto para el intercepto como para el coeficiente de kilometraje, lo que respalda la validez estadística de los resultados.

En cuanto a la capacidad explicativa del modelo, el R² es de 0.4075, lo que significa que aproximadamente el 40.75% de la variabilidad en el precio del vehículo puede ser explicada por el kilometraje. Aunque esto muestra que hay una relación moderada entre las dos variables, también sugiere que otros factores importantes, como el modelo, la marca y el estado del vehículo, influyen en el precio y no están siendo considerados en este análisis. El R² ajustado de 0.405 refuerza esta idea, al ajustar el valor de R² considerando el número de variables.

El modelo también presenta una desviación estándar de los residuos de 16,750,000 pesos, lo que indica una gran dispersión en las predicciones del modelo en comparación con los precios reales de los vehículos. Esto resalta la limitada capacidad predictiva del modelo y sugiere que hay otros factores no incluidos que podrían mejorar la predicción del precio. Los residuos del modelo muestran una variabilidad considerable, con valores que oscilan entre -61,398,108 y 107,373,232 pesos, lo que también refleja la falta de ajuste perfecto del modelo.

Modelo 2 de regresion simple: Precio vs Color (X3)

# Crear el modelo de regresión lineal con la variable categórica 'color'
modelo2_de_regresion_simple <- lm(precio ~ color, data = train_data)

# Resumen del modelo
summary(modelo2_de_regresion_simple)
## 
## Call:
## lm(formula = precio ~ color, data = train_data)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -44720000 -16040268  -1045536  10480000 115308928 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     57481818    6399831   8.982  < 2e-16 ***
## colorBeige     -17531818   16316431  -1.074  0.28375    
## colorBlanco     -4425152    6990134  -0.633  0.52734    
## colorCrema     -23981818   22169664  -1.082  0.28053    
## colorDorado    -22981818   22169664  -1.037  0.30102    
## colorGris       -2990747    6805980  -0.439  0.66077    
## colorMarrón      4968182   16316431   0.304  0.76104    
## colorNegro     -22789510    8695658  -2.621  0.00937 ** 
## colorOtro      -22781818   11448365  -1.990  0.04781 *  
## colorPlateado   -5961818    7967725  -0.748  0.45509    
## colorRojo       -3123818    7336913  -0.426  0.67068    
## colorVerde     -28381818   13825214  -2.053  0.04124 *  
## colorVinotinto -22856818   12393219  -1.844  0.06645 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21230000 on 225 degrees of freedom
## Multiple R-squared:  0.09315,    Adjusted R-squared:  0.04478 
## F-statistic: 1.926 on 12 and 225 DF,  p-value: 0.03246
# Interpretación gráfica del modelo 2 de regresión simple entre Precio y Color
ggplot(datos, aes(x = color, y = precio)) +
  geom_point(color = "blue") +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(title = "Modelo 2 de Regresión Lineal Simple: Precio vs. Color",
       x = "color", y = "precio")
## `geom_smooth()` using formula = 'y ~ x'

En este análisis, se evaluó la relación entre el color de los vehículos y su precio mediante un modelo de regresión lineal. El modelo incluye diferentes categorías de color, y se observa que algunos colores afectan significativamente el precio, mientras que otros no. El intercepto del modelo es de 57,481,818 pesos, lo que representa el precio estimado de un vehículo con el color base (referencia). En cuanto a los coeficientes de color, se destaca que el color Beige tiene un coeficiente de -17,531,818 pesos, sugiriendo que los vehículos de este color podrían ser más baratos que los de referencia, aunque este efecto no es estadísticamente significativo (p-valor = 0.28375). Por otro lado, el color Negro muestra un coeficiente de -22,789,510 pesos, indicando que los vehículos negros tienen un precio más bajo, y este efecto sí es significativo (p-valor = 0.00937). Otros colores como Blanco, Dorado y Gris también presentan coeficientes negativos, pero sus p-valores son mayores a 0.05, lo que indica que no tienen una relación significativa con el precio.

El p-valor global del modelo es de 0.03246, lo que implica que el modelo en su conjunto es estadísticamente significativo. Sin embargo, el R² de 0.09315 indica que solo el 9.31% de la variabilidad en el precio puede ser explicada por el color del vehículo, lo que señala una capacidad explicativa limitada del modelo. El R² ajustado de 0.04478 confirma que el color no es un buen predictor del precio por sí solo. Además, la desviación estándar de los residuos es de 21,230,000 pesos, lo que refleja una alta dispersión en las predicciones, reforzando la conclusión de que el modelo tiene una capacidad predictiva débil en relación con el precio.

En resumen, aunque el color de los vehículos tiene alguna influencia sobre su precio, la relación es débil y está limitada a algunos colores como el Negro, Otro y Verde, que muestran significancia estadística. Sin embargo, el bajo R² y la alta dispersión de los residuos sugieren que el color no es un predictor fuerte del precio, y otros factores no incluidos en este modelo, como el kilometraje, el año de fabricación o la marca, probablemente tengan un impacto mucho mayor en la variabilidad del precio.

Eleccion del mejor modelo de regresion simple

Entre los dos modelos de regresión simple, el Modelo 1 (que utiliza los kilómetros recorridos como predictor) y el Modelo 2 (que usa el color del vehículo como predictor), el Modelo 1 resulta ser más adecuado a pesar de ciertas limitaciones en los dos modelos.

En primer lugar, el Modelo 1 muestra una relación significativa entre los kilómetros recorridos y el precio, con un p-valor de < 2e-16 y un coeficiente de -306.6, lo que sugiere que por cada kilómetro adicional, el precio del vehículo disminuye en promedio en 306.6 pesos. Aunque el R² del Modelo 1 es relativamente bajo (4.2%), esto indica que, si bien los kilómetros recorridos explican solo una pequeña parte de la variabilidad en el precio, la relación entre ambas variables es estadísticamente significativa. Este modelo es útil en contextos donde el kilometraje influye de manera considerable en el precio de los vehículos. Además, el error estándar de los residuos en este modelo es 12,280,000 pesos, lo que indica una dispersión considerable de los puntos en torno a la línea de regresión.

Por otro lado, el Modelo 2, que utiliza el color del vehículo como predictor, muestra un R² de solo 9.3%, lo que también es relativamente bajo, aunque ligeramente superior al del Modelo 1. En este modelo, los colores tienen un impacto variado en el precio, con algunos colores mostrando significancia estadística, como el color Negro y el color Verde, con p-valores de 0.00937 y 0.04124, respectivamente. Sin embargo, la variabilidad explicada por el color es aún limitada, como lo indica el bajo R². Este modelo también presenta un error estándar de los residuos de 21,230,000 pesos, lo que refleja una gran dispersión en torno a la línea de ajuste.

Aunque el Modelo 2 tiene algunas variables significativas, su capacidad para explicar la variabilidad del precio sigue siendo débil en comparación con el Modelo 1, que muestra una relación más clara y directa entre el kilometraje y el precio.

En conclusión, el Modelo 1 es el más adecuado para predecir el precio de los vehículos, ya que, aunque tiene un R² más bajo, tiene una relación más significativa y robusta entre las variables, y una mayor consistencia en sus resultados. Sin embargo, ambos modelos tienen un R² bajo, lo que sugiere que hay muchos otros factores no considerados que influyen en el precio de los vehículos.

Regresion Lineal Multiple

Propuesta de dos modelos de regresion lineal Multiple

# Cargar librerías necesarias
library(caret)  # Para validación cruzada
library(MASS)   # Para selección de variables paso a paso
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
library(car)    # Para validación de supuestos
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:purrr':
## 
##     some
library(ggplot2)  # Para visualización de supuestos

# Dividir los datos en entrenamiento (70%) y prueba (30%)
set.seed(123)
indices <- createDataPartition(datos$precio, p = 0.7, list = FALSE)
train_data <- datos[indices, ]
test_data <- datos[-indices, ]
# Modelo 1: km, modelo y color
modelo1_de_regresion_multiple <- lm(precio ~ kilometraje + modelo + color, data = train_data)
summary(modelo1_de_regresion_multiple)
## 
## Call:
## lm(formula = precio ~ kilometraje + modelo + color, data = train_data)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -74323936  -4519132  -1404542   2947407  99445221 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -7.735e+09  6.063e+08 -12.757   <2e-16 ***
## kilometraje    -4.769e+01  2.676e+01  -1.782   0.0762 .  
## modelo          3.866e+06  3.001e+05  12.884   <2e-16 ***
## colorBeige     -1.429e+06  7.934e+06  -0.180   0.8573    
## colorBlanco    -1.700e+06  3.858e+06  -0.441   0.6599    
## colorCrema     -8.572e+05  1.282e+07  -0.067   0.9468    
## colorDorado     3.627e+06  1.285e+07   0.282   0.7780    
## colorGris       1.542e+06  3.715e+06   0.415   0.6785    
## colorMarrón    -2.528e+06  9.354e+06  -0.270   0.7872    
## colorMorado    -7.911e+05  1.282e+07  -0.062   0.9509    
## colorNegro     -1.530e+06  4.758e+06  -0.321   0.7482    
## colorOtro       8.492e+05  6.622e+06   0.128   0.8981    
## colorPlateado  -1.846e+05  4.446e+06  -0.042   0.9669    
## colorRojo      -1.131e+06  4.077e+06  -0.277   0.7818    
## colorVerde      8.938e+06  1.303e+07   0.686   0.4935    
## colorVinotinto -3.395e+06  6.131e+06  -0.554   0.5804    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 12300000 on 205 degrees of freedom
## Multiple R-squared:  0.7038, Adjusted R-squared:  0.6821 
## F-statistic: 32.47 on 15 and 205 DF,  p-value: < 2.2e-16
# Modelo 2: km, modelo, veh, transmision, 
modelo2_de_regresion_multiple <- lm(precio ~ kilometraje + modelo + color + transmision, data = train_data)
summary(modelo2_de_regresion_multiple)
## 
## Call:
## lm(formula = precio ~ kilometraje + modelo + color + transmision, 
##     data = train_data)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -70728643  -4395974   -713694   2323254  97773471 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         -7.648e+09  5.889e+08 -12.986  < 2e-16 ***
## kilometraje         -3.624e+01  2.616e+01  -1.386 0.167398    
## modelo               3.823e+06  2.915e+05  13.117  < 2e-16 ***
## colorBeige          -1.393e+06  7.700e+06  -0.181 0.856582    
## colorBlanco          1.785e+05  3.778e+06   0.047 0.962363    
## colorCrema           3.191e+06  1.249e+07   0.255 0.798675    
## colorDorado          1.374e+06  1.248e+07   0.110 0.912495    
## colorGris            2.099e+06  3.609e+06   0.582 0.561448    
## colorMarrón         -5.027e+05  9.095e+06  -0.055 0.955974    
## colorMorado         -3.013e+06  1.246e+07  -0.242 0.809142    
## colorNegro          -1.234e+06  4.619e+06  -0.267 0.789672    
## colorOtro            3.860e+06  6.479e+06   0.596 0.551972    
## colorPlateado        1.800e+06  4.348e+06   0.414 0.679389    
## colorRojo           -1.775e+05  3.966e+06  -0.045 0.964341    
## colorVerde           5.500e+06  1.268e+07   0.434 0.664918    
## colorVinotinto      -2.116e+06  5.961e+06  -0.355 0.723029    
## transmisionMecánica -6.351e+06  1.721e+06  -3.690 0.000288 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 11940000 on 204 degrees of freedom
## Multiple R-squared:  0.7223, Adjusted R-squared:  0.7006 
## F-statistic: 33.17 on 16 and 204 DF,  p-value: < 2.2e-16

Eleccion del mejor modelo

# Calcular el AIC para ambos modelos
aic_modelo1_de_regresion_multiple <- AIC(modelo1_de_regresion_multiple)
aic_modelo2_de_regresion_multiple <- AIC(modelo2_de_regresion_multiple)

# Mostrar los valores de AIC para ambos modelos
cat("AIC para el Modelo 1: ", aic_modelo1_de_regresion_multiple, "\n")
## AIC para el Modelo 1:  7860.323
cat("AIC para el Modelo 2: ", aic_modelo2_de_regresion_multiple, "\n")
## AIC para el Modelo 2:  7848.043