library (readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr) #Facilita la creación de informes con R Markdown, combinando texto, código y resultados.
library(kableExtra) #Para crear tablas con formato más avanzado y estilizado
library(tidyr) #Ayuda a transformar y reorganizar los datos
library(RecordLinkage) #Realiza tareas de emparejamiento de registros,
library(leaflet) #Permite crear mapas interactivos con datos geoespaciale
library(htmltools) #Ayuda a generar y manipular contenido HTML
library(GGally)
library(caret)
La base de datos 3 contiene información del personal de una empresa, y busco analizar cómo ciertas características de los empleados se relacionan con su Ingreso_Mensual (en pesos colombianos). Trabajaré con modelos de regresión lineal simple para explorar relaciones entre esta variable dependiente y diferentes variables predictoras.
library(readxl)
datos <- read_excel("/Users/sofiaartunduaga/Desktop/Econometría/Final de base3_ingreso.xlsx")
str(datos)
## tibble [1,470 × 24] (S3: tbl_df/tbl/data.frame)
## $ Ingreso_Mensual : num [1:1470] 5993000 5130000 2090000 2909000 3468000 ...
## $ Edad : num [1:1470] 41 49 37 33 27 32 59 30 38 36 ...
## $ Educación : num [1:1470] 2 1 2 4 1 2 3 1 3 3 ...
## $ Años_Experiencia : num [1:1470] 8 10 7 8 6 8 12 1 10 17 ...
## $ Antigüedad : num [1:1470] 6 10 0 8 2 7 1 1 9 7 ...
## $ Horas_Extra : chr [1:1470] "Si" "No" "Si" "Si" ...
## $ Departamento : chr [1:1470] "Ventas" "IyD" "IyD" "IyD" ...
## $ Distancia_Casa : num [1:1470] 1 8 2 3 2 2 3 24 23 27 ...
## $ Campo_Educación : chr [1:1470] "Ciencias" "Ciencias" "Otra" "Ciencias" ...
## $ Satisfacción_Ambiental : num [1:1470] 2 3 4 4 1 4 3 4 4 3 ...
## $ Genero : chr [1:1470] "F" "M" "M" "F" ...
## $ Cargo : chr [1:1470] "Ejecutivo_Ventas" "Investigador_Cientifico" "Tecnico_Laboratorio" "Investigador_Cientifico" ...
## $ Satisfación_Laboral : num [1:1470] 4 2 3 3 2 4 1 3 3 3 ...
## $ Estado_Civil : chr [1:1470] "Soltero" "Casado" "Soltero" "Casado" ...
## $ Trabajos_Anteriores : num [1:1470] 8 1 6 1 9 0 4 1 0 6 ...
## $ Porcentaje_aumento_salarial: num [1:1470] 11 23 15 11 12 13 20 22 21 13 ...
## $ Rendimiento_Laboral : num [1:1470] 3 4 3 3 3 3 4 4 4 3 ...
## $ Capacitaciones : num [1:1470] 0 3 3 3 3 2 3 2 2 3 ...
## $ Equilibrio_Trabajo_Vida : num [1:1470] 1 3 3 3 3 2 2 3 3 2 ...
## $ Antigüedad_Cargo : num [1:1470] 4 7 0 7 2 7 0 0 7 7 ...
## $ Años_ultima_promoción : num [1:1470] 0 1 0 3 2 3 0 0 1 7 ...
## $ Años_acargo_con_mismo_jefe : num [1:1470] 5 7 0 0 2 6 0 0 8 7 ...
## $ Rotación : chr [1:1470] "Si" "No" "Si" "No" ...
## $ Viaje de Negocios : chr [1:1470] "Raramente" "Frecuentemente" "Raramente" "Frecuentemente" ...
head(datos)
## # A tibble: 6 × 24
## Ingreso_Mensual Edad Educación Años_Experiencia Antigüedad Horas_Extra
## <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 5993000 41 2 8 6 Si
## 2 5130000 49 1 10 10 No
## 3 2090000 37 2 7 0 Si
## 4 2909000 33 4 8 8 Si
## 5 3468000 27 1 6 2 No
## 6 3068000 32 2 8 7 No
## # ℹ 18 more variables: Departamento <chr>, Distancia_Casa <dbl>,
## # Campo_Educación <chr>, Satisfacción_Ambiental <dbl>, Genero <chr>,
## # Cargo <chr>, Satisfación_Laboral <dbl>, Estado_Civil <chr>,
## # Trabajos_Anteriores <dbl>, Porcentaje_aumento_salarial <dbl>,
## # Rendimiento_Laboral <dbl>, Capacitaciones <dbl>,
## # Equilibrio_Trabajo_Vida <dbl>, Antigüedad_Cargo <dbl>,
## # Años_ultima_promoción <dbl>, Años_acargo_con_mismo_jefe <dbl>, …
base3_ingreso <- read_excel("/Users/sofiaartunduaga/Desktop/Econometría/Final de base3_ingreso.xlsx")
Variables numéricas:
summary(datos[, c("Ingreso_Mensual", "Edad", "Años_Experiencia",
"Antigüedad", "Distancia_Casa", "Porcentaje_aumento_salarial")])
## Ingreso_Mensual Edad Años_Experiencia Antigüedad
## Min. : 1009000 Min. :18.00 Min. : 0.00 Min. : 0.000
## 1st Qu.: 2911000 1st Qu.:30.00 1st Qu.: 6.00 1st Qu.: 3.000
## Median : 4919000 Median :36.00 Median :10.00 Median : 5.000
## Mean : 6502931 Mean :36.92 Mean :11.28 Mean : 7.008
## 3rd Qu.: 8379000 3rd Qu.:43.00 3rd Qu.:15.00 3rd Qu.: 9.000
## Max. :19999000 Max. :60.00 Max. :40.00 Max. :40.000
## Distancia_Casa Porcentaje_aumento_salarial
## Min. : 1.000 Min. :11.00
## 1st Qu.: 2.000 1st Qu.:12.00
## Median : 7.000 Median :14.00
## Mean : 9.193 Mean :15.21
## 3rd Qu.:14.000 3rd Qu.:18.00
## Max. :29.000 Max. :25.00
Interpretación:
Ingreso_Mensual: Varía entre 1.009.000 y 19.999.000, el promedio es de aproximadamente 6.502.931, la mediana (4.919.000) es menor que la media, lo que sugiere una asimetría positiva (hay personas con ingresos muy altos que elevan el promedio).
Edad: Oscila entre 18 y 60 años, con una media de ~37 años.Parece ser una población laboral adulta, pero joven en promedio.
Años de experiencia: Va de 0 a 40 años, la media está en 11.28, pero la mediana es 10, lo que indica una ligera asimetría a la derecha.
Antigüedad en la empresa: También va de 0 a 40 años, La media (7.008 años) es algo más alta que la mediana (5 años), lo que indica nuevamente que hay algunos empleados con mucha antigüedad.
Distacia_Casa: Presenta una alta dispersión, lo que indica que hay empleados que viven muy cerca del trabajo y otros a distancias considerablemente mayores.
Porcentaje de aumento salarial: Varía entre 11% y 25%, con una media de 15.21%. La distribución parece relativamente simétrica.
Variables categóricas:
Revisé las variables categóricas que R puede interpretar erróneamente como numéricas.
# Convertí explícitamente las variables categóricas
datos$Educación <- as.factor(datos$Educación)
datos$Genero <- as.factor(datos$Genero)
datos$Estado_Civil <- as.factor(datos$Estado_Civil)
datos$Campo_Educación <- as.factor(datos$Campo_Educación)
datos$Cargo <- as.factor(datos$Cargo)
datos$Departamento <- as.factor(datos$Departamento)
datos$Rotación <- as.factor(datos$Rotación)
datos$`Viaje de Negocios` <- as.factor(datos$`Viaje de Negocios`)
Distribución general de Ingreso_Mensual:
hist(datos$Ingreso_Mensual, breaks = 30, col = "skyblue",
main = "Distribución del ingreso mensual",
xlab = "Ingreso mensual")
Interpretación Muestra una distribución fuertemente sesgada hacia la derecha. La mayoría de personas ganan entre 2-4 millones de pesos mensuales, con muy pocas personas en los rangos de ingresos altos (15-20 millones). Es una distribución típica de ingresos con una cola larga hacia los valores altos.
1. Ingreso_Mensual vs. Años_Experiencia
plot(datos$Años_Experiencia, datos$Ingreso_Mensual,
main = "Ingreso vs Años de Experiencia",
xlab = "Años de experiencia", ylab = "Ingreso mensual")
Interpretación Muestra una correlación positiva fuerte (r = 0.77) entre experiencia y salario. Los ingresos aumentan consistentemente con los años de experiencia, especialmente notable entre 0-25 años. Después de 25 años, la dispersión es mayor pero la tendencia ascendente se mantiene.
cor(datos$Años_Experiencia, datos$Ingreso_Mensual)
## [1] 0.7728932
2. Ingreso_Mensual vs. Porcentaje_aumento_salarial
plot(datos$Porcentaje_aumento_salarial, datos$Ingreso_Mensual,
main = "Ingreso vs % Aumento Salarial",
xlab = "% aumento", ylab = "Ingreso mensual")
cor(datos$Porcentaje_aumento_salarial, datos$Ingreso_Mensual)
## [1] -0.02726859
Interpretación Muestra una correlación negativa muy débil (r = -0.027). No hay una relación clara entre el nivel de ingreso actual y el porcentaje de aumento salarial recibido. Los aumentos porcentuales están distribuidos uniformemente en todos los niveles de ingreso.
3. Ingreso_Mensual según Educación (categórica)
boxplot(Ingreso_Mensual ~ Educación, data = datos,
main = "Ingreso mensual por nivel educativo",
xlab = "Nivel educativo", ylab = "Ingreso mensual")
Interpretación: Los niveles educativos superiores (4 y 5) tienen ingresos medianos más altos que los básicos (1 y 2). Sin embargo, todos los niveles muestran considerable variabilidad y solapamiento en sus rangos salariales, indicando que la educación influye but no determina completamente el ingreso.
Seleccioné tres variables predictoras: dos numéricas (Años_Experiencia, Porcentaje_aumento_salarial) y una categórica (Educación).
- Modelo 1: Ingreso_Mensual ~ Años_Experiencia
Esta variable refleja directamente cambios en el ingreso de un empleado, ya que un mayor porcentaje de aumento se traduce en un salario más alto. Además, suele estar asociado al desempeño, promociones o ajustes por inflación, por lo que tiene una relación directa y lógica con el ingreso mensual.
modelo1 <- lm(Ingreso_Mensual ~ Años_Experiencia, data = datos)
summary(modelo1)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Años_Experiencia, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11271297 -1750781 -87495 1398604 11539481
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1227935 137299 8.944 <2e-16 ***
## Años_Experiencia 467658 10021 46.669 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2988000 on 1468 degrees of freedom
## Multiple R-squared: 0.5974, Adjusted R-squared: 0.5971
## F-statistic: 2178 on 1 and 1468 DF, p-value: < 2.2e-16
Interpretación:
Este modelo indica que en promedio, por cada año adicional de experiencia laboral, el ingreso mensual aumenta en aproximadamente 467.658 pesos. El intercepto, que representa el ingreso estimado con cero años de experiencia, es de alrededor de 1.227.935 pesos. La relación es altamente significativa (p < 0.001), lo cual sugiere que hay una fuerte asociación entre los años de experiencia y el salario.
El coeficiente de determinación R² = 0.597 indica que este modelo explica casi el 60% de la variabilidad del ingreso mensual. Es un resultado muy sólido para una regresión simple. Además, el bajo error estándar de los coeficientes y la alta F-estadística refuerzan la confiabilidad del modelo.
- Modelo 2: Ingreso_Mensual ~ Porcentaje_aumento_salarial
Es razonable suponer que empleados con mejor rendimiento reciben mayores compensaciones. Las empresas suelen vincular bonos, aumentos o ascensos al desempeño, por lo que el rendimiento puede tener una relación directa con el salario mensual.
modelo2 <- lm(Ingreso_Mensual ~ Porcentaje_aumento_salarial, data = datos)
summary(modelo2)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Porcentaje_aumento_salarial, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5641588 -3571300 -1556742 1845719 13708258
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7036434 525007 13.403 <2e-16 ***
## Porcentaje_aumento_salarial -35077 33561 -1.045 0.296
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4708000 on 1468 degrees of freedom
## Multiple R-squared: 0.0007436, Adjusted R-squared: 6.288e-05
## F-statistic: 1.092 on 1 and 1468 DF, p-value: 0.2961
Interpretación:
Aquí, el coeficiente del porcentaje de aumento salarial es negativo (-35.077), lo cual sería inesperado, pero además no es estadísticamente significativo (p = 0.296). Esto sugiere que no hay evidencia suficiente para afirmar que el porcentaje de aumento salarial influya en el ingreso mensual de forma lineal.
El R² es prácticamente cero (0.0007), indicando que el modelo no explica la variabilidad del ingreso mensual. Es un modelo débil y no recomendable por sí solo.
- Modelo 3: Ingreso_Mensual ~ Educación
El nivel educativo suele estar relacionado con la cualificación y las oportunidades laborales que una persona puede acceder, lo que impacta directamente en su capacidad de generar mayores ingresos. Aunque no siempre es el factor más determinante, es relevante analizar si a mayor formación académica hay una tendencia a recibir mejores salarios dentro de la empresa.
modelo3 <- lm(Ingreso_Mensual ~ Educación, data = datos)
summary(modelo3)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Educación, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6150646 -3399146 -1625986 1870736 14332429
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5640571 359670 15.683 < 2e-16 ***
## Educación2 586075 455354 1.287 0.198271
## Educación3 876693 409645 2.140 0.032509 *
## Educación4 1191831 429672 2.774 0.005611 **
## Educación5 2637075 766499 3.440 0.000597 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4690000 on 1465 degrees of freedom
## Multiple R-squared: 0.01052, Adjusted R-squared: 0.007816
## F-statistic: 3.893 on 4 and 1465 DF, p-value: 0.003769
Interpretación:
La relación es positiva pero débil. El R² es bajo, por lo que la edad por sí sola no explica bien las diferencias en ingresos. Sin embargo, la variable es estadísticamente significativa.
El modelo 1 es claramente el mejor de los tres. No solo tiene el mayor R², sino que su predictor es significativo y tiene una interpretación lógica: a mayor experiencia, mayores ingresos. Por tanto, este modelo es el más adecuado para explicar y predecir el Ingreso Mensual con base en las variables analizadas.
(Opcional: calcular MAE en caso de que lo crea conveniente).
library(caret)
# Definir el control de validación cruzada (10-fold cross-validation)
control <- trainControl(method = "cv", number = 10)
# Ajustar el modelo usando train() del paquete caret
modelo_cv <- train(
Ingreso_Mensual ~ Años_Experiencia,
data = datos,
method = "lm",
trControl = control,
metric = "MAE"
)
# Ver resultados
print(modelo_cv)
## Linear Regression
##
## 1470 samples
## 1 predictor
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 1322, 1322, 1324, 1323, 1324, 1324, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 2980985 0.5995493 2217921
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
# Extraer el MAE
modelo_cv$results$MAE
## [1] 2217921
Se aplicó validación cruzada al modelo simple con Años de Experiencia como predictor. El R² fue de 59.6% y el MAE de $2.2 millones. Esto indica un poder predictivo moderado: útil como estimación inicial, pero con limitaciones en precisión.
Modelo 1 (solo variables numéricas):
incluí variables numéricas que tienen lógica económica directa sobre los ingresos
modelo1 <- lm(Ingreso_Mensual ~ Años_Experiencia + Antigüedad + Porcentaje_aumento_salarial + Rendimiento_Laboral, data = datos)
summary(modelo1)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Años_Experiencia + Antigüedad +
## Porcentaje_aumento_salarial + Rendimiento_Laboral, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -10749299 -1723835 -65975 1359192 11428606
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2303169 762080 3.022 0.00255 **
## Años_Experiencia 449706 12860 34.969 < 2e-16 ***
## Antigüedad 37036 16349 2.265 0.02364 *
## Porcentaje_aumento_salarial 22520 33630 0.670 0.50319
## Rendimiento_Laboral -467636 340902 -1.372 0.17035
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2984000 on 1465 degrees of freedom
## Multiple R-squared: 0.5994, Adjusted R-squared: 0.5983
## F-statistic: 547.9 on 4 and 1465 DF, p-value: < 2.2e-16
Interpretación:
El modelo explica un 59.83% de la variabilidad del ingreso mensual (R² ajustado = 0.5983).
Años_Experiencia tiene un efecto positivo y altamente significativo (p < 0.001). Por cada año adicional de experiencia, el ingreso mensual aumenta en promedio $449.706.
Antigüedad también es significativa (p ≈ 0.0236), con un efecto positivo de $37.036 por unidad de aumento.
Porcentaje_aumento_salarial y Rendimiento_Laboral no son estadísticamente significativos (p > 0.05), lo que sugiere que no aportan evidencia clara de relación con el ingreso mensual en este modelo.
Modelo 2 (Incluye variable categórica):
Se mantiene la base de experiencia, antigüedad y rendimiento, pero se incorpora Departamento, una variable categórica relevante que puede reflejar diferencias salariales entre áreas funcionales
modelo2 <- lm(Ingreso_Mensual ~ Años_Experiencia + Antigüedad + Departamento + Rendimiento_Laboral, data = datos)
summary(modelo2)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Años_Experiencia + Antigüedad +
## Departamento + Rendimiento_Laboral, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -10635938 -1636219 -43694 1334069 11284355
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1749574 693926 2.521 0.0118 *
## Años_Experiencia 452140 12790 35.350 < 2e-16 ***
## Antigüedad 32788 16250 2.018 0.0438 *
## DepartamentoRH 259554 385678 0.673 0.5011
## DepartamentoVentas 764650 170217 4.492 7.6e-06 ***
## Rendimiento_Laboral -259852 214528 -1.211 0.2260
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2965000 on 1464 degrees of freedom
## Multiple R-squared: 0.6047, Adjusted R-squared: 0.6033
## F-statistic: 447.9 on 5 and 1464 DF, p-value: < 2.2e-16
Interpretación:
Este modelo tiene un R² ajustado ligeramente superior (0.6033), es decir, explica un 60.33% de la variabilidad del ingreso mensual.
Años_Experiencia y Antigüedad siguen siendo significativos y mantienen efectos similares al modelo anterior.
DepartamentoVentas es altamente significativo (p < 0.001), con un efecto promedio de $764.650 más que la categoría base (probablemente otro departamento como Producción o Administración).
DepartamentoRH no es significativo, lo que sugiere que no se diferencia estadísticamente de la categoría base.
Rendimiento_Laboral nuevamente no es significativo.
Para elegir el mejor modelo, usé el método de selección paso a paso basado en el AIC. Este criterio busca el modelo que mejor se ajusta sin ser demasiado complejo. El proceso comenzó con un modelo vacío y fue añadiendo las variables que reducían más el AIC.
modelo_base <- lm(Ingreso_Mensual ~ 1, data = datos)
modelo_completo <- lm(Ingreso_Mensual ~ Años_Experiencia + Antigüedad + Porcentaje_aumento_salarial + Rendimiento_Laboral + Departamento, data = datos)
modelo_step <- step(modelo_base,
scope = list(lower = modelo_base, upper = modelo_completo),
direction = "both")
## Start: AIC=45173.41
## Ingreso_Mensual ~ 1
##
## Df Sum of Sq RSS AIC
## + Años_Experiencia 1 1.9450e+16 1.3110e+16 43838
## + Antigüedad 1 8.6118e+15 2.3948e+16 44724
## + Departamento 2 1.4151e+14 3.2419e+16 45171
## <none> 3.2560e+16 45173
## + Porcentaje_aumento_salarial 1 2.4211e+13 3.2536e+16 45174
## + Rendimiento_Laboral 1 9.5434e+12 3.2551e+16 45175
##
## Step: AIC=43838.12
## Ingreso_Mensual ~ Años_Experiencia
##
## Df Sum of Sq RSS AIC
## + Departamento 2 1.8958e+14 1.2920e+16 43821
## + Antigüedad 1 4.4621e+13 1.3065e+16 43835
## <none> 1.3110e+16 43838
## + Rendimiento_Laboral 1 1.6239e+13 1.3094e+16 43838
## + Porcentaje_aumento_salarial 1 4.1892e+12 1.3106e+16 43840
## - Años_Experiencia 1 1.9450e+16 3.2560e+16 45173
##
## Step: AIC=43820.7
## Ingreso_Mensual ~ Años_Experiencia + Departamento
##
## Df Sum of Sq RSS AIC
## + Antigüedad 1 3.5766e+13 1.2885e+16 43819
## <none> 1.2920e+16 43821
## + Rendimiento_Laboral 1 1.2872e+13 1.2907e+16 43821
## + Porcentaje_aumento_salarial 1 2.9076e+12 1.2917e+16 43822
## - Departamento 2 1.8958e+14 1.3110e+16 43838
## - Años_Experiencia 1 1.9498e+16 3.2419e+16 45171
##
## Step: AIC=43818.63
## Ingreso_Mensual ~ Años_Experiencia + Departamento + Antigüedad
##
## Df Sum of Sq RSS AIC
## <none> 1.2885e+16 43819
## + Rendimiento_Laboral 1 1.2900e+13 1.2872e+16 43819
## + Porcentaje_aumento_salarial 1 2.3607e+12 1.2882e+16 43820
## - Antigüedad 1 3.5766e+13 1.2920e+16 43821
## - Departamento 2 1.8072e+14 1.3065e+16 43835
## - Años_Experiencia 1 1.0984e+16 2.3868e+16 44723
summary(modelo_step)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Años_Experiencia + Departamento +
## Antigüedad, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -10591968 -1682135 -24728 1334143 11326323
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 928719 149299 6.221 6.45e-10 ***
## Años_Experiencia 452070 12792 35.339 < 2e-16 ***
## DepartamentoRH 264634 385716 0.686 0.4928
## DepartamentoVentas 771280 170156 4.533 6.30e-06 ***
## Antigüedad 32776 16253 2.017 0.0439 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2966000 on 1465 degrees of freedom
## Multiple R-squared: 0.6043, Adjusted R-squared: 0.6032
## F-statistic: 559.3 on 4 and 1465 DF, p-value: < 2.2e-16
El modelo final elegido por este proceso fue: Ingreso_Mensual ~ Años_Experiencia + Departamento + Antigüedad
Este modelo resultó ser el mejor porque tuvo el AIC más bajo de todos los que se probaron, lo cual indica que explica bien la variable dependiente sin usar variables innecesarias. Además, el R² ajustado fue de 0.6032, lo cual significa que el modelo explica un poco más del 60% de la variabilidad del ingreso mensual, lo cual es aceptable.
También se puede ver que las variables que quedaron tienen sentido. Años de experiencia es muy significativa y muestra que entre más experiencia, mayor ingreso. La antigüedad también influye, aunque un poco menos. En cuanto al departamento, los que trabajan en ventas ganan más. Solo el departamento de Recursos Humanos no fue significativo, pero no afectó negativamente el modelo.
Para validar los supuestos del modelo de regresión lineal múltiple, se analizaron tres gráficos diagnósticos:
# Modelo final guardado como modelo_final
modelo_final <- lm(Ingreso_Mensual ~ Años_Experiencia + Departamento + Antigüedad, data = datos)
# Gráfico de residuos vs valores ajustados (para homocedasticidad)
plot(modelo_final$fitted.values, modelo_final$residuals,
main = "Residuos vs Valores Ajustados",
xlab = "Valores Ajustados", ylab = "Residuos")
abline(h = 0, col = "red")
Los puntos están distribuidos de forma más o menos aleatoria alrededor de la línea horizontal en cero. Se cumple con el supuesto de linealidad y homocedasticidad
# Histograma de residuos (para ver normalidad de forma visual)
hist(modelo_final$residuals, main = "Histograma de los residuos", xlab = "Residuos")
Los residuos muestran una distribución aproximadamente normal aunque con una ligera asimetría, pero es aceptable para el modelo de regresión.
# QQ plot (para evaluar normalidad de forma más precisa)
qqnorm(modelo_final$residuals)
qqline(modelo_final$residuals, col = "red")
La mayoría de los puntos están alineados con la línea diagonal, con solo pequeñas desviaciones en las colas, por lo tanto, hay evidencia visual de normalidad en los residuos. Esto refuerza lo visto en el histograma.
Resumen: El gráfico de residuos vs valores ajustados no mostró patrones sistemáticos, lo que indica cumplimiento del supuesto de linealidad y homocedasticidad. El histograma de los residuos presentó una forma aproximadamente normal, y el Q-Q plot mostró que los residuos siguen una distribución cercana a la normal. En conjunto, estos resultados permiten considerar que el modelo cumple con los supuestos necesarios para la aplicación e interpretación confiable de la regresión.
Aseguré que Departamento sea factor
base3_ingreso$Departamento <- as.factor(base3_ingreso$Departamento)
Modelo transformado con log(Ingreso_Mensual)
modelo_log <- lm(log(Ingreso_Mensual) ~ Años_Experiencia + Antigüedad + Departamento, data = base3_ingreso)
Modelo original para comparar
modelo_original <- lm(Ingreso_Mensual ~ Años_Experiencia + Antigüedad + Departamento, data = base3_ingreso)
Graficar diagnósticos
par(mfrow = c(2, 2))
plot(modelo_original)
par(mfrow = c(2, 2))
plot(modelo_log)
Comparar
summary(modelo_log)$adj.r.squared
## [1] 0.5708584
summary(modelo_original)$adj.r.squared
## [1] 0.6032044
Modelo 1: Usando Ingreso_Mensual como variable dependiente
Residuals vs Fitted: Muestra un patrón curvo claro, indicando no linealidad
Q-Q Plot: Los residuos se desvían significativamente de la línea diagonal, especialmente en los extremos, indicando falta de normalidad
Scale-Location: Tendencia ascendente pronunciada, sugiriendo heterocedasticidad (varianza no constante)
Residuals vs Leverage: Varios puntos con alto leverage, incluyendo valores atípicos potencialmente influyentes
Modelo 2: Usando log(Ingreso_Mensual)
Residuals vs Fitted: Patrón mucho más aleatorio y horizontal, indicando mejor linealidad
Q-Q Plot: Los residuos siguen más cercanamente la línea diagonal, sugiriendo mejor normalidad
Scale-Location: Línea más horizontal, indicando homocedasticidad mejorada (varianza más constante)
Residuals vs Leverage: Distribución más controlada de puntos influyentes
Conclusión: El Modelo 2 cumple mejor los supuestos de regresión lineal y proporciona un ajuste más confiable.
Por lo tanto, sí fue conveniente realizar una transformación logarítmica a la variable dependiente Ingreso_Mensual, ya que el modelo con esta transformación es más robusto, cumple mejor los supuestos, tiene mejor capacidad predictiva (mayor R² ajustado y menor MAE), y sus coeficientes permiten interpretaciones más prácticas.
Modelo elegido: El modelo con log(Ingreso_Mensual) como variable dependiente.
modelo_log <- lm(log(Ingreso_Mensual) ~ Años_Experiencia + Antigüedad + Departamento, data = datos)
Se estima el ingreso mensual para una persona con:
-10 años de experiencia
-5 años de antigüedad
-Departamento: Ventas
Usando el modelo transformado con logaritmo, el ingreso mensual pronosticado es:
nuevo <- data.frame(Años_Experiencia = 10,
Antigüedad = 5,
Departamento = factor("Ventas", levels = levels(base3_ingreso$Departamento)))
ingreso_predicho <- exp(predict(modelo_log, newdata = nuevo))
ingreso_predicho
## 1
## 5466354
Resultado estimado: aproximadamente $5.466.354
El modelo final permite pronosticar de manera precisa el ingreso mensual esperado de los empleados, tomando en cuenta sus años de experiencia, antigüedad y el departamento al que pertenecen.
Este modelo sería especialmente útil para:
Recursos Humanos, para definir políticas salariales basadas en variables objetivas.
Planificación Financiera, ya que permite estimar cuánto se debe presupuestar para nuevos cargos o promociones.
Sindicatos o comités laborales, que podrían usar estos resultados para validar si hay brechas salariales justificadas.
Además, usar el logaritmo mejora la capacidad de predicción y el cumplimiento de supuestos estadísticos, lo que da mayor confianza en la interpretación de resultados.