Modelo de regresión Lineal y logarítmico

# ============================
# Cargar librerías
# ============================
library(dplyr)
library(knitr)

Leer y preparar datos

datos <- read.csv("D:/Data/database.csv", header = TRUE, sep = ";", dec = ".")

Modelo de Regresión Lineal

which(names(datos) == "Annual.Fuel.Cost..FT1.") 
## [1] 43
which(names(datos) == "Engine.Displacement") 
## [1] 12
x <- as.numeric(as.character(datos[, 12]))
## Warning: NAs introducidos por coerción
y <- as.numeric(as.character(datos[, 43]))

datos_filtrados <- na.omit(data.frame(x = x, y = y))
datos_filtrados <- subset(datos_filtrados, x > 0 & y > 0)

modelo <- lm(y ~ x, data = datos_filtrados)

plot(datos_filtrados$x, datos_filtrados$y,
     col = 4, pch = 7,
     main = "Regresión Lineal: Cilindrada (L) vs Costo Anual de Combustible",
     xlab = "Cilindrada del motor (Engine.Displacement)",
     ylab = "Costo anual de combustible (USD)")
abline(modelo, col = "green", lwd = 2)
legend("topright", legend = "Línea de regresión", col = "green", lwd = 2, bty = "n")

R <- cor(datos_filtrados$x, datos_filtrados$y)
R2 <- R^2 * 100
b <- modelo$coefficients[1]
m <- modelo$coefficients[2]

ecuacion <- paste("c_anual = ", round(b, 4), " + ", round(m, 4), " * Engine.Displacement")
cat("=== ECUACIÓN DEL MODELO LINEAL ===\n")
## === ECUACIÓN DEL MODELO LINEAL ===
cat(ecuacion, "\n\n")
## c_anual =  949.4405  +  306.2989  * Engine.Displacement
Tabla_resumen <- data.frame(
  Variable = c("Cilindrada del motor (L)", "Costo anual de combustible"),
  Tipo = c("Independiente", "Dependiente"),
  Correlación_Pearson = c("", round(R * 100, 2)),
  R2_Porcentaje = c("", round(R2, 2)),
  Intercepto = c("", round(b, 4)),
  Pendiente = c("", round(m, 4)),
  Ecuación = c("", ecuacion)
)

kable(Tabla_resumen, format = "markdown",
      caption = "Tabla: Modelo de regresión lineal entre la cilindrada (L) del motor y el costo anual de combustible")
Tabla: Modelo de regresión lineal entre la cilindrada (L) del motor y el costo anual de combustible
Variable Tipo Correlación_Pearson R2_Porcentaje Intercepto Pendiente Ecuación
Cilindrada del motor (L) Independiente
(Intercept) Costo anual de combustible Dependiente 78.16 61.09 949.4405 306.2989 c_anual = 949.4405 + 306.2989 * Engine.Displacement
nuevo_valor_x <- 3.5
prediccion <- 949.4405 + 306.2989 * nuevo_valor_x
cat("=== PREDICCIÓN MANUAL ===\n")
## === PREDICCIÓN MANUAL ===
cat("Para una cilindrada de", nuevo_valor_x, "L, el costo anual estimado es:",
    round(prediccion, 2), "USD\n")
## Para una cilindrada de 3.5 L, el costo anual estimado es: 2021.49 USD

Conclusión modelo lineal

Entre la cilindrada del motor (L) y el costo anual del combustible (USD) existe una relación de tipo lineal cuyo modelo matemático es:

c_anual = 949.4405 + 306.2989 * Engine.Displacement

La cilindrada explica el 61.04% del comportamiento del costo anual. El resto (38.96%) se debe a otros factores externos.
Para una cilindrada de 3.5 L, el modelo estima un costo anual de 2021.49 USD.

Modelo de Regresión Logarítmica

which(names(datos) == "Annual.Fuel.Cost..FT1.")
## [1] 43
which(names(datos) == "City.MPG..FT1.")
## [1] 18
x <- as.numeric(as.character(datos[, 18]))
## Warning: NAs introducidos por coerción
y <- as.numeric(as.character(datos[, 43]))

datos_filtrados <- na.omit(data.frame(x = x, y = y))
datos_filtrados <- subset(datos_filtrados, x > 0 & y > 0)

datos_filtrados$log_x <- log(datos_filtrados$x)

modelo_log <- lm(y ~ log_x, data = datos_filtrados)

a <- coef(modelo_log)[1]
b <- coef(modelo_log)[2]

R <- cor(datos_filtrados$log_x, datos_filtrados$y)
R2 <- summary(modelo_log)$r.squared * 100

x_seq <- seq(min(datos_filtrados$x), max(datos_filtrados$x), length.out = 200)
y_pred <- a + b * log(x_seq)

plot(datos_filtrados$x, datos_filtrados$y,
     col = "blue", pch = 16, cex = 1.3,
     main = "Regresión Logarítmica: MPG ciudad vs Costo Anual",
     xlab = "MPG ciudad",
     ylab = "Costo anual de combustible (USD)")
lines(x_seq, y_pred, col = "red", lwd = 2)
legend("topright",
       legend = c(paste0("R = ", round(R, 4)),
                  paste0("R² = ", round(R2, 2), "%")),
       col = c("red", "red"), lwd = 2, bty = "n")

ecuacion <- paste("c_anual = ", round(a, 4), " + ", round(b, 4), "* log(mpg_c)")
cat("=== ECUACIÓN DEL MODELO LOGARÍTMICO ===\n")
## === ECUACIÓN DEL MODELO LOGARÍTMICO ===
cat(ecuacion, "\n")
## c_anual =  6958.696  +  -1753.2849 * log(mpg_c)
nuevo_valor_mpg <- 24
prediccion_log <- 1948.5551 + 949.4405 * log(nuevo_valor_mpg)
cat("=== PREDICCIÓN MANUAL — MODELO LOGARÍTMICO ===\n")
## === PREDICCIÓN MANUAL — MODELO LOGARÍTMICO ===
cat("Para un rendimiento de", nuevo_valor_mpg, "MPG en ciudad, el costo anual estimado es:",
    round(prediccion_log, 2), "USD\n")
## Para un rendimiento de 24 MPG en ciudad, el costo anual estimado es: 4965.93 USD

Conclusión modelo logarítmico

Existe una relación de tipo logarítmica entre el MPG en ciudad y el costo anual del combustible, cuyo modelo es:

c_anual = 1948.5551 + 949.4405 * log(mpg_c)

El rendimiento en ciudad explica el 81.21% de la variación en el costo anual. El resto se debe a otros factores como tipo de motor, uso del vehículo, etc.
Para un rendimiento de 24 MPG, se espera un costo anual de 4965.93 USD.