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)

Base de datos 3: Personal de una empresa

Variable dependiente: Ingreso_Mensual (en pesos colombianos)

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")

Punto 1

1.1 Análisis exploratorio (univariado)

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.2 Análisis bivariado (correlaciones y gráficos)

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.

1.3 Propuesta de tres modelos simples

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.

1.4 Comparación de modelos y elección del mejor

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.

1.5 ⁠ ⁠Validar el poder predictivo hipotético del mejor modelo elegido con validación cruzada

(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.

Punto 2

2.1 Dos modelos de regresión lineal múltiple

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.

2.2 Selección del mejor modelo mediante AIC (stepwise)

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.

2.3 Validación de suppuestos

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.

2.4 Sustentar si es conveniente o no realizar alguna transformación al modelo

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.

2.5 Definir el mejor modelo y realizar pronósticos hipotéticos

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)

Pronóstico hipotético:

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

2.6 Utilidad del modelo

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.