En este informe construiremos un modelo de regresión múltiple para predecir el consumo de gasolina (litros) en diferentes tipos de vehículos, considerando variables como distancia recorrida, velocidad promedio, tipo de vehículo, uso de aire acondicionado y peso de la carga. Este análisis busca identificar los factores que más influyen en el consumo de combustible, con aplicaciones potenciales en logística, gestión de flotas y sostenibilidad ambiental.
El modelo se desarrollará siguiendo estos pasos:
Análisis exploratorio de datos
Selección y transformación de variables
Construcción y validación del modelo
Interpretación de resultados y recomendaciones
datos <- read_excel("consumo_gasolina.xlsx")
datos <- datos %>%
filter(CONSUMO_LITROS >= 0) %>%
mutate(
TIPO_VEHICULO = as.factor(TIPO_VEHICULO),
AIRE_ACONDICIONADO = as.factor(AIRE_ACONDICIONADO)
)
str(datos)
## tibble [98 × 6] (S3: tbl_df/tbl/data.frame)
## $ DISTANCIA_KM : num [1:98] 193.5 475.9 368.7 303.3 86.4 ...
## $ VELOCIDAD_PROMEDIO: num [1:98] 32.8 87.3 58.3 75.8 111.7 ...
## $ TIPO_VEHICULO : Factor w/ 4 levels "Camión","Camioneta",..: 1 1 2 4 1 1 3 1 1 3 ...
## $ AIRE_ACONDICIONADO: Factor w/ 2 levels "No","Sí": 2 2 2 1 2 2 1 2 1 1 ...
## $ PESO_CARGA_KG : num [1:98] 103 1063 1081 1275 1452 ...
## $ CONSUMO_LITROS : num [1:98] 28.5 42 31 14.1 23.9 ...
head(datos) %>% kableExtra::kable() %>% kableExtra::kable_styling()
| DISTANCIA_KM | VELOCIDAD_PROMEDIO | TIPO_VEHICULO | AIRE_ACONDICIONADO | PESO_CARGA_KG | CONSUMO_LITROS |
|---|---|---|---|---|---|
| 193.5 | 32.8 | Camión | Sí | 103.4 | 28.49 |
| 475.9 | 87.3 | Camión | Sí | 1062.7 | 41.96 |
| 368.7 | 58.3 | Camioneta | Sí | 1081.3 | 30.96 |
| 303.3 | 75.8 | Moto | No | 1274.9 | 14.10 |
| 86.4 | 111.7 | Camión | Sí | 1452.2 | 23.88 |
| 86.4 | 52.4 | Camión | Sí | 1951.7 | 23.96 |
ggplot(datos, aes(x = CONSUMO_LITROS)) +
geom_histogram(bins = 30, fill = "steelblue", color = "white") +
labs(title = "Distribución del Consumo de Gasolina",
x = "Consumo (litros)",
y = "Frecuencia") +
theme_minimal()
numeric_vars <- datos %>% select(DISTANCIA_KM, VELOCIDAD_PROMEDIO, PESO_CARGA_KG, CONSUMO_LITROS)
pairs(numeric_vars, pch = 19, col = "blue", main = "Matriz de Correlación")
## Modelado de Regresión Múltiple
modelo_completo <- lm(CONSUMO_LITROS ~ DISTANCIA_KM + VELOCIDAD_PROMEDIO +
TIPO_VEHICULO + AIRE_ACONDICIONADO + PESO_CARGA_KG,
data = datos)
summary(modelo_completo)$coefficients %>%
kableExtra::kable(digits = 3, caption = "Resumen del Modelo de Regresión Completo") %>%
kableExtra::kable_styling()
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| (Intercept) | 12.338 | 0.758 | 16.286 | 0.000 |
| DISTANCIA_KM | 0.048 | 0.001 | 39.201 | 0.000 |
| VELOCIDAD_PROMEDIO | 0.001 | 0.007 | 0.170 | 0.865 |
| TIPO_VEHICULOCamioneta | -7.079 | 0.502 | -14.090 | 0.000 |
| TIPO_VEHICULOCarro | -11.416 | 0.473 | -24.129 | 0.000 |
| TIPO_VEHICULOMoto | -15.969 | 0.468 | -34.102 | 0.000 |
| AIRE_ACONDICIONADOSí | 3.939 | 0.354 | 11.118 | 0.000 |
| PESO_CARGA_KG | 0.002 | 0.000 | 7.381 | 0.000 |
par(mfrow = c(2,2))
plot(modelo_completo)
# Usando stepwise para selección automática
modelo_final <- step(modelo_completo, direction = "both", trace = 0)
summary(modelo_final)$coefficients %>%
kableExtra::kable(digits = 3, caption = "Resumen del Modelo Final (Stepwise)") %>%
kableExtra::kable_styling()
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| (Intercept) | 12.423 | 0.570 | 21.775 | 0 |
| DISTANCIA_KM | 0.048 | 0.001 | 39.451 | 0 |
| TIPO_VEHICULOCamioneta | -7.076 | 0.499 | -14.170 | 0 |
| TIPO_VEHICULOCarro | -11.409 | 0.469 | -24.328 | 0 |
| TIPO_VEHICULOMoto | -15.952 | 0.455 | -35.030 | 0 |
| AIRE_ACONDICIONADOSí | 3.946 | 0.350 | 11.262 | 0 |
| PESO_CARGA_KG | 0.002 | 0.000 | 7.425 | 0 |
summary(modelo_final)$coefficients %>%
kableExtra::kable(digits = 3, caption = "Resumen del Modelo Final (Stepwise)") %>%
kableExtra::kable_styling()
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| (Intercept) | 12.423 | 0.570 | 21.775 | 0 |
| DISTANCIA_KM | 0.048 | 0.001 | 39.451 | 0 |
| TIPO_VEHICULOCamioneta | -7.076 | 0.499 | -14.170 | 0 |
| TIPO_VEHICULOCarro | -11.409 | 0.469 | -24.328 | 0 |
| TIPO_VEHICULOMoto | -15.952 | 0.455 | -35.030 | 0 |
| AIRE_ACONDICIONADOSí | 3.946 | 0.350 | 11.262 | 0 |
| PESO_CARGA_KG | 0.002 | 0.000 | 7.425 | 0 |
##Caso de Estudio 1: Camión con Aire Acondicionado
nuevo_dato1 <- data.frame(
DISTANCIA_KM = 300,
VELOCIDAD_PROMEDIO = 65,
TIPO_VEHICULO = factor("Camión", levels = levels(datos$TIPO_VEHICULO)),
AIRE_ACONDICIONADO = factor("Sí", levels = levels(datos$AIRE_ACONDICIONADO)),
PESO_CARGA_KG = 1500
)
prediccion1 <- predict(modelo_final, nuevo_dato1, interval = "confidence")
prediccion1 %>% kableExtra::kable(digits = 2, caption = "Predicción: Camión con Aire Acondicionado") %>%
kableExtra::kable_styling()
| fit | lwr | upr |
|---|---|---|
| 34.3 | 33.46 | 35.14 |
#Caso de Estudio 2: Carro sin Aire Acondicionado
nuevo_dato2 <- data.frame(
DISTANCIA_KM = 150,
VELOCIDAD_PROMEDIO = 80,
TIPO_VEHICULO = factor("Carro", levels = levels(datos$TIPO_VEHICULO)),
AIRE_ACONDICIONADO = factor("No", levels = levels(datos$AIRE_ACONDICIONADO)),
PESO_CARGA_KG = 500
)
prediccion2 <- predict(modelo_final, nuevo_dato2, interval = "confidence")
prediccion2 %>% kableExtra::kable(digits = 2, caption = "Predicción: Carro sin Aire Acondicionado") %>%
kableExtra::kable_styling()
| fit | lwr | upr |
|---|---|---|
| 9.41 | 8.53 | 10.29 |
1.Variables Significativas: El análisis reveló que [explicar qué variables fueron más significativas según los resultados de tu modelo].
2.Efecto del Tipo de Vehículo: Los camiones presentan un consumo significativamente mayor que los carros (X litros adicionales en promedio), mientras que las motos muestran el menor consumo.
3.Impacto del Aire Acondicionado: El uso de aire acondicionado incrementa el consumo en aproximadamente X litros en promedio.
4.Relación Distancia-Consumo: Cada 100 km adicionales recorridos aumentan el consumo en aproximadamente X litros, manteniendo constantes las demás variables.