Este informe tiene como objetivo aplicar un modelo de regresión lineal múltiple para predecir el ingreso mensual de individuos a partir de variables cuantitativas como la escolaridad, la edad y las horas trabajadas. Para esto, se ha simulado una base de datos representativa con 30 observaciones.
# Cargar datos simulados
datos <- data.frame(
ingreso_mensual = c(1200, 1500, 1300, 1700, 1600, 1800, 2000, 2100, 1900, 2200),
horas_trabajo = c(40, 45, 38, 50, 48, 55, 60, 62, 58, 65),
escolaridad = c(12, 14, 13, 16, 15, 18, 20, 21, 19, 22),
experiencia = c(5, 7, 6, 8, 9, 10, 12, 13, 11, 14)
)
# Mostrar tabla de datos
knitr::kable(datos)
| ingreso_mensual | horas_trabajo | escolaridad | experiencia |
|---|---|---|---|
| 1200 | 40 | 12 | 5 |
| 1500 | 45 | 14 | 7 |
| 1300 | 38 | 13 | 6 |
| 1700 | 50 | 16 | 8 |
| 1600 | 48 | 15 | 9 |
| 1800 | 55 | 18 | 10 |
| 2000 | 60 | 20 | 12 |
| 2100 | 62 | 21 | 13 |
| 1900 | 58 | 19 | 11 |
| 2200 | 65 | 22 | 14 |
# Resumen estadístico básico
summary(datos)
## ingreso_mensual horas_trabajo escolaridad experiencia
## Min. :1200 Min. :38.00 Min. :12.00 Min. : 5.00
## 1st Qu.:1525 1st Qu.:45.75 1st Qu.:14.25 1st Qu.: 7.25
## Median :1750 Median :52.50 Median :17.00 Median : 9.50
## Mean :1730 Mean :52.10 Mean :17.00 Mean : 9.50
## 3rd Qu.:1975 3rd Qu.:59.50 3rd Qu.:19.75 3rd Qu.:11.75
## Max. :2200 Max. :65.00 Max. :22.00 Max. :14.00
# Gráfica de dispersión: ingreso vs experiencia
plot(datos$experiencia, datos$ingreso_mensual,
xlab = "Experiencia (años)",
ylab = "Ingreso mensual",
col = "purple", pch = 19)
abline(lm(ingreso_mensual ~ experiencia, data = datos), col = "red")
# Gráfica de dispersión: ingreso vs escolaridad
plot(datos$escolaridad, datos$ingreso_mensual,
xlab = "Escolaridad (años)",
ylab = "Ingreso mensual",
col = "darkgreen", pch = 19)
abline(lm(ingreso_mensual ~ escolaridad, data = datos), col = "red")
# Gráfica de dispersión: ingreso vs horas de trabajo
plot(datos$horas_trabajo, datos$ingreso_mensual,
xlab = "Horas de trabajo",
ylab = "Ingreso mensual",
col = "blue", pch = 19)
abline(lm(ingreso_mensual ~ horas_trabajo, data = datos), col = "red")
# Ajustar el modelo de regresión múltiple
modelo <- lm(ingreso_mensual ~ horas_trabajo + escolaridad + experiencia, data = datos)
# Mostrar resumen del modelo
summary(modelo)
##
## Call:
## lm(formula = ingreso_mensual ~ horas_trabajo + escolaridad +
## experiencia, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -67.616 -17.709 -2.208 10.354 72.160
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 141.94 201.52 0.704 0.508
## horas_trabajo 13.93 11.22 1.241 0.261
## escolaridad 37.56 37.51 1.001 0.355
## experiencia 23.57 31.46 0.749 0.482
##
## Residual standard error: 45.95 on 6 degrees of freedom
## Multiple R-squared: 0.9873, Adjusted R-squared: 0.981
## F-statistic: 156.1 on 3 and 6 DF, p-value: 4.41e-06
# Análisis de varianza (ANOVA) del modelo
anova(modelo)
## Analysis of Variance Table
##
## Response: ingreso_mensual
## Df Sum Sq Mean Sq F value Pr(>F)
## horas_trabajo 1 980014 980014 464.2470 6.523e-07 ***
## escolaridad 1 7136 7136 3.3803 0.1156
## experiencia 1 1185 1185 0.5611 0.4821
## Residuals 6 12666 2111
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Gráficas de diagnóstico del modelo
par(mfrow = c(2, 2)) # Mostrar 4 gráficos juntos
plot(modelo)
## Warning in sqrt(crit * p * (1 - hh)/hh): NaNs produced
## Warning in sqrt(crit * p * (1 - hh)/hh): NaNs produced
par(mfrow = c(1, 1)) # Volver a una sola gráfica por pantalla