- ¿Qué es la regresión lineal?
- Supuestos del modelo
- Regresión lineal simple
- Regresión lineal múltiple
- Interpretación de resultados
- Diagnóstico del modelo
- Ejemplo práctico
2025-10-16
La regresión lineal es una técnica estadística para:
Ecuación general:
\[Y = \beta_0 + \beta_1X_1 + \beta_2X_2 + ... + \beta_pX_p + \epsilon\]
Donde:
Para que la regresión lineal sea válida:
Una variable independiente:
\[Y = \beta_0 + \beta_1X + \epsilon\]
Interpretación:
# Usaremos el dataset mtcars data(mtcars) head(mtcars[, c("mpg", "wt", "hp", "disp")], 5)
## mpg wt hp disp ## Mazda RX4 21.0 2.620 110 160 ## Mazda RX4 Wag 21.0 2.875 110 160 ## Datsun 710 22.8 2.320 93 108 ## Hornet 4 Drive 21.4 3.215 110 258 ## Hornet Sportabout 18.7 3.440 175 360
Relación entre peso del auto (wt) y consumo (mpg)
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point(size = 3, color = "steelblue") + geom_smooth(method = "lm", se = TRUE, color = "red") + labs(title = "Relación entre Peso y Consumo", x = "Peso (1000 lbs)", y = "Millas por Galón") + theme_minimal(base_size = 14)
# Ajustar modelo modelo_simple <- lm(mpg ~ wt, data = mtcars) # Resumen del modelo summary(modelo_simple)
## ## Call: ## lm(formula = mpg ~ wt, data = mtcars) ## ## Residuals: ## Min 1Q Median 3Q Max ## -4.5432 -2.3647 -0.1252 1.4096 6.8727 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 37.2851 1.8776 19.858 < 2e-16 *** ## wt -5.3445 0.5591 -9.559 1.29e-10 *** ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 3.046 on 30 degrees of freedom ## Multiple R-squared: 0.7528, Adjusted R-squared: 0.7446 ## F-statistic: 91.38 on 1 and 30 DF, p-value: 1.294e-10
Del modelo anterior:
Múltiples variables independientes:
\[mpg = \beta_0 + \beta_1 \cdot wt + \beta_2 \cdot hp + \beta_3 \cdot disp + \epsilon\]
Permite controlar por múltiples factores simultáneamente
# Modelo con múltiples predictores modelo_multiple <- lm(mpg ~ wt + hp + disp, data = mtcars) summary(modelo_multiple)
## ## Call: ## lm(formula = mpg ~ wt + hp + disp, data = mtcars) ## ## Residuals: ## Min 1Q Median 3Q Max ## -3.891 -1.640 -0.172 1.061 5.861 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 37.105505 2.110815 17.579 < 2e-16 *** ## wt -3.800891 1.066191 -3.565 0.00133 ** ## hp -0.031157 0.011436 -2.724 0.01097 * ## disp -0.000937 0.010350 -0.091 0.92851 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 2.639 on 28 degrees of freedom ## Multiple R-squared: 0.8268, Adjusted R-squared: 0.8083 ## F-statistic: 44.57 on 3 and 28 DF, p-value: 8.65e-11
# R² ajustado cat("R² Modelo Simple:", round(summary(modelo_simple)$adj.r.squared, 3), "\n")
## R² Modelo Simple: 0.745
cat("R² Modelo Múltiple:", round(summary(modelo_multiple)$adj.r.squared, 3), "\n")
## R² Modelo Múltiple: 0.808
# AIC (menor es mejor) cat("\nAIC Modelo Simple:", round(AIC(modelo_simple), 2), "\n")
## ## AIC Modelo Simple: 166.03
cat("AIC Modelo Múltiple:", round(AIC(modelo_multiple), 2))
## AIC Modelo Múltiple: 158.64
El modelo múltiple mejora el ajuste
par(mfrow = c(2, 2)) plot(modelo_multiple)
# Crear datos nuevos para predicción nuevos_datos <- data.frame( wt = c(2.5, 3.0, 3.5), hp = c(100, 120, 150), disp = c(150, 200, 250) ) # Realizar predicciones predicciones <- predict(modelo_multiple, newdata = nuevos_datos, interval = "confidence") # Mostrar resultados cbind(nuevos_datos, predicciones)
## wt hp disp fit lwr upr ## 1 2.5 100 150 24.34707 23.11400 25.58014 ## 2 3.0 120 200 21.77665 20.74333 22.80996 ## 3 3.5 150 250 18.89465 17.87373 19.91557
# Predicciones vs valores reales mtcars$predicho <- predict(modelo_multiple) ggplot(mtcars, aes(x = mpg, y = predicho)) + geom_point(size = 3, color = "steelblue") + geom_abline(intercept = 0, slope = 1, color = "red", linetype = "dashed") + labs(title = "Valores Reales vs Predichos", x = "MPG Real", y = "MPG Predicho") + theme_minimal(base_size = 14)
?lm
car
, lmtest
, olsrr
¡Gracias!
# Para más información ?lm help(package = "stats")