library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)
library(RecordLinkage)
library(leaflet)
library(htmltools)
##Introducción Este informe se encargara de mostrar la realizacion y evaluacion de los siguientes modelos que se encargaran de interpretar y pronosticar los ingresos en pesos colombianos (variable dependiente) que puede recibir un empleado de dicha empresa, en este caso hipotetico asumiremos que la informacion pertenece al grupo Nutresa.
library(readxl)
Datos_Nutresa <- read_excel("base3_ingreso.xlsx")
View (Datos_Nutresa)
##Elección de Variables
Empezamos con la eleccion de las variables que hemos de utilizar para todos los modelos que se propongan en este informe y la explicación de porque son relevantes para la modelación.
head(Datos_Nutresa)
Ingreso_Mensual | Edad | Educación | Años_Experiencia | Antigüedad | Horas_Extra | Departamento | Distancia_Casa | Campo_Educación | Satisfacción_Ambiental | Genero | Cargo | Satisfación_Laboral | Estado_Civil | Trabajos_Anteriores | Porcentaje_aumento_salarial | Rendimiento_Laboral | Capacitaciones | Equilibrio_Trabajo_Vida | Antigüedad_Cargo | Años_ultima_promoción | Años_acargo_con_mismo_jefe | Rotación | Viaje de Negocios |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
5993000 | 41 | 2 | 8 | 6 | Si | Ventas | 1 | Ciencias | 2 | F | Ejecutivo_Ventas | 4 | Soltero | 8 | 11 | 3 | 0 | 1 | 4 | 0 | 5 | Si | Raramente |
5130000 | 49 | 1 | 10 | 10 | No | IyD | 8 | Ciencias | 3 | M | Investigador_Cientifico | 2 | Casado | 1 | 23 | 4 | 3 | 3 | 7 | 1 | 7 | No | Frecuentemente |
2090000 | 37 | 2 | 7 | 0 | Si | IyD | 2 | Otra | 4 | M | Tecnico_Laboratorio | 3 | Soltero | 6 | 15 | 3 | 3 | 3 | 0 | 0 | 0 | Si | Raramente |
2909000 | 33 | 4 | 8 | 8 | Si | IyD | 3 | Ciencias | 4 | F | Investigador_Cientifico | 3 | Casado | 1 | 11 | 3 | 3 | 3 | 7 | 3 | 0 | No | Frecuentemente |
3468000 | 27 | 1 | 6 | 2 | No | IyD | 2 | Salud | 1 | M | Tecnico_Laboratorio | 2 | Casado | 9 | 12 | 3 | 3 | 3 | 2 | 2 | 2 | No | Raramente |
3068000 | 32 | 2 | 8 | 7 | No | IyD | 2 | Ciencias | 4 | M | Tecnico_Laboratorio | 4 | Soltero | 0 | 13 | 3 | 2 | 2 | 7 | 3 | 6 | No | Frecuentemente |
Ingresos en pesos Colombianos: Esta es nuestra variable dependiente, la intención de pronosticar el ingreso que pueda tener un empleado teniendo en cuenta diferentes variables.
promedio=mean(Datos_Nutresa$Ingreso_Mensual) #promedio / media
desviación=sd(Datos_Nutresa$Ingreso_Mensual) #desviación estandar
data.frame(promedio,desviación)
promedio | desviación |
---|---|
6502931 | 4707957 |
max_ingreso <- max(Datos_Nutresa$Ingreso_Mensual, na.rm = TRUE)
min_ingreso <- min(Datos_Nutresa$Ingreso_Mensual, na.rm = TRUE)
cat("Ingreso mensual máximo: $", format(max_ingreso, big.mark = ","), "\n")
## Ingreso mensual máximo: $ 19,999,000
cat("Ingreso mensual mínimo: $", format(min_ingreso, big.mark = ","), "\n")
## Ingreso mensual mínimo: $ 1,009,000
Se observa que el promedio del ingreso mensual es de 6,5 millones de pesos, mientras que el maximo de ingresos que recibe un empleado segun los datos obtenidos es de casi 20 millones
Departamento (Cualitativa): Se considera importante tener en cuenta esta variable independiente y entender la relacion que puedan tener el departamento en que trabaje la persona con los ingresos que pueda recibir.
# Convertir a factor si no lo es
Datos_Nutresa$Departamento <- as.factor(Datos_Nutresa$Departamento)
# Crear tabla de frecuencias
frecuencias <- table(Datos_Nutresa$Departamento)
# Graficar histograma de frecuencias categóricas usando barplot
barplot(frecuencias,
main = "Distribución del Departamento",
col = "lightcoral",
xlab = "Departamento",
ylab = "Frecuencia",
las = 2) # Gira las etiquetas del eje x
Se observa que el departamento de IyD tiene mucha mayor presencia de
empleados que los demas departamentos, encontrando como el departamento
con menos empleados el RH
Años de experiencia (Cuantitativa): Se toma la variable Años de Experiencia, se espera una gran relevancia de esta variable teniendo en cuenta la supuesta relacion directa entre años de experiencia y los ingresos, se espera que a mayor años sea mayor el ingreso.
summary(Datos_Nutresa$Años_Experiencia)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 6.00 10.00 11.28 15.00 40.00
hist(Datos_Nutresa$Años_Experiencia, main = "Histograma: Años de Experiencia", col = "palevioletred")
Edad (Cuantitativa): Se toma en cuenta la edad y el como esta puede estar afectando los ingresos mensuales, se espera que a mayor edad mejore el ingreso hasta cierto punto.
summary(Datos_Nutresa$Edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18.00 30.00 36.00 36.92 43.00 60.00
hist(Datos_Nutresa$Edad, main = "Histograma: Edad", col = "cadetblue")
Antigüedad (Cuantitativa): La antigüedad como una variable importante dentro del funcionamiento de la empresa, se espera que a mayor antiguedad mayores ingresos
summary(Datos_Nutresa$Antigüedad_Cargo)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 2.000 3.000 4.229 7.000 18.000
hist(Datos_Nutresa$Antigüedad, main = "Histograma: Antigüedad", col = "thistle")
Cargo (Cualitativa): Se toma en cuenta el cargo de la persona como una variable importante, esperando que un cargo mas alto refleje un mejor ingreso
# Convertir a factor si no lo es
Datos_Nutresa$Cargo <- as.factor(Datos_Nutresa$Cargo)
# Crear tabla de frecuencias
frecuencias <- table(Datos_Nutresa$Cargo)
# Graficar histograma de frecuencias categóricas usando barplot
barplot(frecuencias,
main = "Distribución del Cargo",
col = "darkseagreen",
xlab = "Cargo",
ylab = "Frecuencia",
las = 2) # Gira las etiquetas del eje x
##Analisis Bivariado
Años de experiencia e Ingresos Mensuales
g2=ggplot(data=Datos_Nutresa,mapping = aes(x=Años_Experiencia,y=Ingreso_Mensual))+geom_point()+theme_bw()+
geom_smooth()
ggplotly(g2)
cor(Datos_Nutresa$Ingreso_Mensual,Datos_Nutresa$Años_Experiencia)
## [1] 0.7728932
El grafico de dispersion indica que no hay una relacion lineal entre los años de experiencia y el aumento del ingreso, muestra una relacion lineal hasta los 10 años de experiencia, el proximo punto de inflexion seria pasado los 20 años. En cuanto a la correlacion si se muestra una correlacion alta entre estas dos variables de un 0.77
Departamento e Ingresos Mensuales
Datos_Nutresa$Departamento <- as.factor(Datos_Nutresa$Departamento)
frecuencias <- table(Datos_Nutresa$Departamento)
barplot(frecuencias,
main = "Distribución del Departamento",
col = "lightcoral",
xlab = "Departamento",
ylab = "Frecuencia",
las = 2)
##
## IyD RH Ventas
## 961 63 446
La mayor cantidad de empleados se trabajan en IyD y en Ventas, un minimo de empleados se encuentra en RH
Edad e Ingresos Mensuales
g_edu <- ggplot(data = Datos_Nutresa, mapping = aes(x = Edad, y = Ingreso_Mensual)) +
geom_point(alpha = 0.5) + # puntos con algo de transparencia
geom_smooth(method = "loess", se = TRUE, color = "blue") + # curva suavizada
theme_bw() +
labs(title = "Relación entre Edad e Ingreso Mensual",
x = "Edad",
y = "Ingreso Mensual")
# Convertir a gráfico interactivo
ggplotly(g_edu)
cor(Datos_Nutresa$Ingreso_Mensual,Datos_Nutresa$Edad)
## [1] 0.4978546
Hay un relación positiva entre la edad y el ingreso mensual, aunque esta relación no es lineal. El ingreso suele incrementarse con la edad hasta aproximadamente los 50 años, momento en el que empieza a estabilizarse o a disminuir un poco. Sin embargo, la elevada variabilidad indica que existen otros elementos además de la edad que determinan el nivel de ingreso, tales como la experiencia, el cargo o el campo de trabajo.
Se muestra una correlacion baja entre la educacion y los ingresos mensuales, siendo esta de 0.094
Antigüedad Cargo e Ingresos Mensuales
g2=ggplot(data=Datos_Nutresa,mapping = aes(x= Antigüedad,y=Ingreso_Mensual))+geom_point()+theme_bw()+
geom_smooth()
ggplotly(g2)
cor(Datos_Nutresa$Ingreso_Mensual,Datos_Nutresa$Antigüedad)
## [1] 0.5142848
Hay una relación positiva entre la antigüedad y el ingreso mensual, aunque esta relación no es completamente lineal. El ingreso tiende a aumentar a medida que la antigüedad crece, especialmente durante los primeros 20 años, pero a partir de ese punto comienza a estabilizarse e incluso a descender ligeramente. Sin embargo, la alta dispersión observada sugiere que existen otros factores además de la antigüedad que influyen en el ingreso, como el cargo ocupado, los años de experiencia o el área funcional en la que se desempeña el trabajador.
Se observa una correlacion mayor al 50%, es una correlacion alta considerando las vistas anteriormente.
Cargo e Ingresos Mensuales
Datos_Nutresa$Cargo <- as.factor(Datos_Nutresa$Cargo)
frecuencias <- table(Datos_Nutresa$Cargo)
barplot(frecuencias,
main = "Distribución del Cargo",
col = "lightcoral",
xlab = "Cargo",
ylab = "Frecuencia",
las = 2)
##
## Director_Investigación Director_Manofactura Ejecutivo_Ventas
## 80 145 326
## Gerente Investigador_Cientifico Recursos_Humanos
## 102 292 52
## Representante_Salud Representante_Ventas Tecnico_Laboratorio
## 131 83 259
Los cargos con mas empleados se encuentran en el Ejecutivo de ventas, Gerente de Investigador Cientifico y el Tecnico Laboratorio, dos son del campo de ciencias.
##Regresión Lineal Simple
Iniciamos con la prueba de 3 modelos de regresion simple, las variables que seleccionamos
###Modelo 1
La primera variable para este modelo de regresion lineal simple seran los años de experiencia. Primero realizamos un analisis bivariado entre estas variables.
mod1=lm(Ingreso_Mensual~Años_Experiencia, data=Datos_Nutresa)
summary (mod1)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Años_Experiencia, data = Datos_Nutresa)
##
## 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
Se observa una alta significancia de las variables, el modelo indica que por cada año de experiencia puede haber un aumento en el ingreso de 467 mil pesos colombianos.
Multiple R-squared: 0.5974, Adjusted R-squared: 0.5971: El modelo explica casi un 60% de la variacion en el ingreso mensual, es un modelo aceptable.
###Modelo 2
La segunda variable para el segundo modelo es la variable “Departamento”
mod2=lm(Ingreso_Mensual~Cargo, data=Datos_Nutresa)
summary (mod2)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Cargo, data = Datos_Nutresa)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5937676 -1209252 -350986 1165379 6947721
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 16033550 226367 70.830 < 2e-16 ***
## CargoDirector_Manofactura -8738412 281982 -30.989 < 2e-16 ***
## CargoEjecutivo_Ventas -9109271 252620 -36.059 < 2e-16 ***
## CargoGerente 1148127 302378 3.797 0.000152 ***
## CargoInvestigador_Cientifico -12793577 255502 -50.072 < 2e-16 ***
## CargoRecursos_Humanos -11797800 360661 -32.712 < 2e-16 ***
## CargoRepresentante_Salud -8504787 287289 -29.604 < 2e-16 ***
## CargoRepresentante_Ventas -13407550 317226 -42.265 < 2e-16 ***
## CargoTecnico_Laboratorio -12796380 258979 -49.411 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2025000 on 1461 degrees of freedom
## Multiple R-squared: 0.8161, Adjusted R-squared: 0.8151
## F-statistic: 810.2 on 8 and 1461 DF, p-value: < 2.2e-16
El modelo 2 estima el ingreso mensual promedio en función del cargo en el que trabaja, comparando cada departamento con un departamento de referencia. En este caso el cargo de referencia es el cargo de Director de Investigación.
El modelo muestra gran significancia en todos los departamentos. Multiple R-squared: 0.8161, Adjusted R-squared: 0.8151, en cuanto al R cuadrado muestra un 0.81, es decir, este modelo explica alrededor del 81% de la variacion en los ingresos mensuales
###Modelo 3
La variable a utilizar para el tercer modelo sera la Variable “Antigüedad”
mod3=lm(Ingreso_Mensual~Antigüedad, data=Datos_Nutresa)
summary (mod3)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Antigüedad, data = Datos_Nutresa)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9504365 -2498983 -1188091 1392960 15484522
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3733273 160091 23.32 <2e-16 ***
## Antigüedad 395205 17201 22.98 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4039000 on 1468 degrees of freedom
## Multiple R-squared: 0.2645, Adjusted R-squared: 0.264
## F-statistic: 527.9 on 1 and 1468 DF, p-value: < 2.2e-16
Se observa una alta significancia de las variables, el modelo indica que por cada año de antigüedad puede haber un aumento en el ingreso de 395 mil pesos colombianos.
Multiple R-squared: 0.2645, Adjusted R-squared: 0.264: El modelo explica alrededor del 26% de la variacion en el ingreso mensual, no se puede considerar un modelo aceptable
###Elección de Modelo
El modelo simple elegido para el pronostico es el segundo modelo, el cual explica el 81% y por ende se puede considerar un buen modelo.
# Predecir el ingreso para un cargo específico"
nueva_obs <- data.frame(Cargo = factor("Director_Investigación", levels = levels(Datos_Nutresa$Cargo)))
# Hacer la predicción con intervalo de confianza al 95%
predict(mod2, newdata = nueva_obs, interval = "confidence", level = 0.95)
## fit lwr upr
## 1 16033550 15589510 16477590
De acuerdo con el modelo modificado, un individuo con la posición de Director de Investigación estima un ingreso mensual de $16.033.550 COP. Además, con un grado de confianza del 95%, se anticipa que el salario de una persona con ese puesto fluctúe entre $15.589.510 y $16.477.590 COP.
##Validacion Cruzada
A continuación vamos a realizar una validación cruzada para evaluar el poder predictivo del modelo. Usaremos un escenario 80-20 (modelar-validar) como se observa:
## Paso 1 - Segmentar los Datos (80% modelar, 20% validar)
set.seed(123) # Para reproducibilidad
id_modelar <- sample(1:nrow(Datos_Nutresa), size = 0.8 * nrow(Datos_Nutresa))
nutresa_modelar <- Datos_Nutresa[id_modelar, ]
nutresa_validar <- Datos_Nutresa[-id_modelar, ]
## Paso 2 - Ajustar el Modelo sobre el set de modelado
modelo_edu <- lm(Ingreso_Mensual ~ Cargo,data = nutresa_modelar)
## Paso 3 - Predecir sobre el set de validación
ingreso_pred <- predict(modelo_edu, newdata = nutresa_validar)
## Paso 4 - Comparar valores reales vs. predichos
ingreso_real <- nutresa_validar$Ingreso_Mensual
error <- ingreso_real - ingreso_pred
resumen <- data.frame(ingreso_real, ingreso_pred)
## Paso 5 - Calcular MAE (Mean Absolute Error)
MAE <- mean(abs(error))
MAE
## [1] 1640217
MAE = 1640217 señala que, en términos generales, el modelo se equivoca en alrededor de 1,6 millones de pesos al estimar el ingreso mensual de los individuos en el conjunto validado.
Es un valor considerable al tener en cuenta que el valor maximo que encontramos en el Ingreso Mensual es de 19,9 millones y su minimo de 1 millon.
##Regresión Lineal Multiple
Modelo Multiple 1
El primer modelo elegido tendra 3 variables, 2 cuantitativas (Años de Experiencia, Edad) y una cualitativa (Departamento)
# Asegúrate de que Departamento sea una variable categórica (factor)
Datos_Nutresa$Departamento <- as.factor(Datos_Nutresa$Departamento)
# Crear el modelo de regresión lineal múltiple
mod4<- lm(Ingreso_Mensual ~ Años_Experiencia + Edad + Departamento, data = Datos_Nutresa)
# Ver el resumen del modelo
summary(mod4)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Años_Experiencia + Edad + Departamento,
## data = Datos_Nutresa)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11075990 -1633045 -104341 1301962 11130102
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1691116 355685 4.755 2.18e-06 ***
## Años_Experiencia 488876 13566 36.037 < 2e-16 ***
## Edad -25778 11559 -2.230 0.0259 *
## DepartamentoRH 288793 385635 0.749 0.4541
## DepartamentoVentas 780879 169918 4.596 4.69e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2965000 on 1465 degrees of freedom
## Multiple R-squared: 0.6045, Adjusted R-squared: 0.6034
## F-statistic: 559.9 on 4 and 1465 DF, p-value: < 2.2e-16
Modelo con alta significancia en sus variables exceptuando el departamento de Recursos Humanos, un R2 ajustado de 0.6034, es decir, este modelo explica alrededor del 60,34% de la variacion de los ingresos mensuales. Es un modelo aceptable
mod_multiple4 =step(mod4)
## Start: AIC=43817.72
## Ingreso_Mensual ~ Años_Experiencia + Edad + Departamento
##
## Df Sum of Sq RSS AIC
## <none> 1.2877e+16 43818
## - Edad 1 4.3713e+13 1.2920e+16 43821
## - Departamento 2 1.8574e+14 1.3062e+16 43835
## - Años_Experiencia 1 1.1415e+16 2.4291e+16 44749
En lo que respecta al AIC, el mejor AIC se encuentra en el modelo original, lo que quiere decir que todas las variables estan aportando a que se mantenga el poder explicativo dentro del modelo.
Modelo Multiple 2
Para este modelo se van a utilizar las siguientes variables: Cualitativas: Cargo, Departamento. Cuantitativas: Años de Experiencia, Antiguedad, Edad.
# Asegúrate de que las variables categóricas sean factores
Datos_Nutresa$Cargo <- as.factor(Datos_Nutresa$Cargo)
Datos_Nutresa$Departamento <- as.factor(Datos_Nutresa$Departamento)
# Crear el modelo de regresión múltiple
mod5 <- lm(Ingreso_Mensual ~ Edad + Años_Experiencia + Antigüedad + Cargo + Departamento,
data = Datos_Nutresa)
# Ver el resumen del modelo
summary(mod5)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Edad + Años_Experiencia + Antigüedad +
## Cargo + Departamento, data = Datos_Nutresa)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5422574 -1094529 -114733 967283 5430782
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 11953251 300681 39.754 <2e-16 ***
## Edad -6968 6618 -1.053 0.2926
## Años_Experiencia 195549 10682 18.306 <2e-16 ***
## Antigüedad 18482 9317 1.984 0.0475 *
## CargoDirector_Manofactura -7032055 239614 -29.347 <2e-16 ***
## CargoEjecutivo_Ventas -6461247 420208 -15.376 <2e-16 ***
## CargoGerente 702806 292432 2.403 0.0164 *
## CargoInvestigador_Cientifico -10078028 232604 -43.327 <2e-16 ***
## CargoRecursos_Humanos -9251710 635884 -14.549 <2e-16 ***
## CargoRepresentante_Salud -7052986 241700 -29.181 <2e-16 ***
## CargoRepresentante_Ventas -9463646 460607 -20.546 <2e-16 ***
## CargoTecnico_Laboratorio -10068461 235303 -42.789 <2e-16 ***
## DepartamentoRH 84882 548735 0.155 0.8771
## DepartamentoVentas -620070 353853 -1.752 0.0799 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1656000 on 1456 degrees of freedom
## Multiple R-squared: 0.8774, Adjusted R-squared: 0.8763
## F-statistic: 801.5 on 13 and 1456 DF, p-value: < 2.2e-16
El modelo tiene una alta significancia en sus variables, las excepciones se encuentran en: Edad, Departamento de Recursos Humanos y Departamento de Ventas. En cuanto al R2 ajustado tiene un valor de 0.8763, es decir que este modelo explica alrededor del 87,63% de la variabilidad de los ingresos mensuales, por ende es un muy buen modelo.
mod_multiple5 =step(mod5)
## Start: AIC=42114.23
## Ingreso_Mensual ~ Edad + Años_Experiencia + Antigüedad + Cargo +
## Departamento
##
## Df Sum of Sq RSS AIC
## - Edad 1 3.0389e+12 3.9952e+15 42113
## - Departamento 2 9.5464e+12 4.0017e+15 42114
## <none> 3.9921e+15 42114
## - Antigüedad 1 1.0789e+13 4.0029e+15 42116
## - Años_Experiencia 1 9.1882e+14 4.9110e+15 42417
## - Cargo 8 8.8620e+15 1.2854e+16 43817
##
## Step: AIC=42113.35
## Ingreso_Mensual ~ Años_Experiencia + Antigüedad + Cargo + Departamento
##
## Df Sum of Sq RSS AIC
## - Departamento 2 9.4992e+12 4.0047e+15 42113
## <none> 3.9952e+15 42113
## - Antigüedad 1 1.3883e+13 4.0091e+15 42116
## - Años_Experiencia 1 1.3303e+15 5.3255e+15 42534
## - Cargo 8 8.8894e+15 1.2885e+16 43819
##
## Step: AIC=42112.84
## Ingreso_Mensual ~ Años_Experiencia + Antigüedad + Cargo
##
## Df Sum of Sq RSS AIC
## <none> 4.0047e+15 42113
## - Antigüedad 1 1.3623e+13 4.0183e+15 42116
## - Años_Experiencia 1 1.3293e+15 5.3340e+15 42532
## - Cargo 8 9.0606e+15 1.3065e+16 43835
Lo que se realizo en el proceso AIC fue quitar las variables que reducirian el valor AIC, asi mismo las variables que no aportan informacion valiosa al modelo, en este caso el modelo con menor AIC es el modelo que solo contiene las variables Antiguedad, Años de Experiencia y Cargo, este modelo tiene un valor AIC de 42112.
# Asegúrate de que "Cargo" sea una variable categórica
Datos_Nutresa$Cargo <- as.factor(Datos_Nutresa$Cargo)
# Ajustar el modelo óptimo
modelo_optimo <- lm(Ingreso_Mensual ~ Años_Experiencia + Antigüedad + Cargo, data = Datos_Nutresa)
# Ver el resumen del modelo
summary(modelo_optimo)
##
## Call:
## lm(formula = Ingreso_Mensual ~ Años_Experiencia + Antigüedad +
## Cargo, data = Datos_Nutresa)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5126134 -1082643 -88059 965060 5370994
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 11776875 243735 48.318 <2e-16 ***
## Años_Experiencia 188527 8567 22.007 <2e-16 ***
## Antigüedad 20315 9119 2.228 0.0260 *
## CargoDirector_Manofactura -7046677 239467 -29.427 <2e-16 ***
## CargoEjecutivo_Ventas -7097777 220689 -32.162 <2e-16 ***
## CargoGerente 483473 249189 1.940 0.0525 .
## CargoInvestigador_Cientifico -10095401 232353 -43.449 <2e-16 ***
## CargoRecursos_Humanos -9190187 310965 -29.554 <2e-16 ***
## CargoRepresentante_Salud -7070561 241396 -29.290 <2e-16 ***
## CargoRepresentante_Ventas -10091414 287540 -35.096 <2e-16 ***
## CargoTecnico_Laboratorio -10085105 235091 -42.899 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1657000 on 1459 degrees of freedom
## Multiple R-squared: 0.877, Adjusted R-squared: 0.8762
## F-statistic: 1040 on 10 and 1459 DF, p-value: < 2.2e-16
###Interpretacion del modelo optimo
R² = 0.877 y Ajusted R² = 0.8762
El modelo presenta un R² de 0.877, lo cual indica que aproximadamente el 87.7% de la variabilidad en el ingreso mensual puede ser explicada por los años de experiencia, la antigüedad y el cargo. Este nivel de ajuste es alto y representa un desempeño sólido dentro del contexto de los modelos lineales aplicados a datos socioeconómicos.
Años de Experiencia y Antigüedad
Ambas variables son positivas y estadísticamente significativas (p <
0.05), lo que indica que, en promedio, a mayor experiencia o antigüedad,
mayor es el ingreso mensual.
- Por cada año adicional de experiencia, se estima un incremento de
$188.527 COP.
- Por cada año adicional de antigüedad, se estima un incremento de
$20.315 COP.
Cargo
La variable Cargo
se interpreta en relación con el nivel de
referencia, que en este caso es el cargo de “Director de
Investigación”.
La mayoría de los cargos presentan coeficientes negativos y altamente
significativos, lo cual indica que, en comparación con el cargo de
referencia, esos cargos se asocian con un ingreso mensual
significativamente inferior.
El único cargo que muestra un coeficiente positivo es el de “Gerente”,
lo que sugiere que este podría tener un ingreso estimado superior al de
“Director de Investigación”, aunque con una significancia estadística
marginal (p ≈ 0.0525).
###Validación de Supuestos
# Establecer un layout de 2x2 para los gráficos
par(mfrow = c(2, 2))
# Gráficos de diagnóstico del modelo óptimo
plot(modelo_optimo)
Linealidad: El gráfico de residuos en comparación con valores ajustados no presenta patrones sistemáticos claros, lo que indica que la relació entre los predictores y el ingreso mensual es razonablemente lineal.
Normalidad de los residuos: El Q-Q plot indica que los residuos se alinean con la línea diagonal teórica, salvo algunas desviaciones en los extremos. Esto sugiere una distribución aproximadamente normal con colas ligeramente pesadas.
Homoscedasticidad: Se nota un pequeño incremento en la dispersión de los desechos conforme se elevan los valores ajustados, lo que señala una ligera heterocedasticidad. Aunque no es esencial, podría respaldar la implementación de una transformación en la variable dependiente.
Observaciones influyentes: El gráfico de residuos vs leverage no muestra puntos con distancia de Cook alta, por lo que se puede concluir que no existen observaciones que afecten de forma significativa la estabilidad del modelo.
###Modelo Transformado
En este caso se decidio que la transformación como se menciona antes se realizara en la variable dependiente, es decir, se sacara log a los ingresos mensuales.
# Crear el modelo con transformación logarítmica
modelo_log <- lm(log(Ingreso_Mensual) ~ Años_Experiencia + Antigüedad + Cargo,
data = Datos_Nutresa)
# Ver resumen
summary(modelo_log)
##
## Call:
## lm(formula = log(Ingreso_Mensual) ~ Años_Experiencia + Antigüedad +
## Cargo, data = Datos_Nutresa)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.90775 -0.19016 0.00004 0.18968 0.95144
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 15.953647 0.041328 386.029 < 2e-16 ***
## Años_Experiencia 0.026845 0.001453 18.481 < 2e-16 ***
## Antigüedad 0.004200 0.001546 2.716 0.00668 **
## CargoDirector_Manofactura -0.588780 0.040604 -14.501 < 2e-16 ***
## CargoEjecutivo_Ventas -0.585811 0.037420 -15.655 < 2e-16 ***
## CargoGerente -0.024070 0.042252 -0.570 0.56899
## CargoInvestigador_Cientifico -1.252474 0.039398 -31.791 < 2e-16 ***
## CargoRecursos_Humanos -1.074298 0.052727 -20.375 < 2e-16 ***
## CargoRepresentante_Salud -0.587190 0.040931 -14.346 < 2e-16 ***
## CargoRepresentante_Ventas -1.359430 0.048755 -27.883 < 2e-16 ***
## CargoTecnico_Laboratorio -1.249031 0.039862 -31.334 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2809 on 1459 degrees of freedom
## Multiple R-squared: 0.8225, Adjusted R-squared: 0.8213
## F-statistic: 675.9 on 10 and 1459 DF, p-value: < 2.2e-16
# Gráficos de diagnóstico del modelo transformado
par(mfrow = c(2, 2))
plot(modelo_log)
# Predicción en escala original
pred_log <- exp(predict(modelo_log))
pred_original <- predict(modelo_optimo)
# Ingresos reales
ingresos_reales <- Datos_Nutresa$Ingreso_Mensual
# Calcular MAE
MAE_log <- mean(abs(ingresos_reales - pred_log))
MAE_original <- mean(abs(ingresos_reales - pred_original))
# Mostrar los errores absolutos medios
MAE_log
## [1] 1318467
MAE_original
## [1] 1297127
Conclusión
Los hallazgos revelaron un R2 ajustado de 0.8213, que es inferior al del modelo inicial (0.8762), lo que señala una reducción en la capacidad explicativa. Igualmente, el error medio absoluto (MAE) del modelo transformado alcanzó los 1.318.467 COP, un poco más alto que el MAE del modelo inicial (1.297.127 COP).
Sin embargo, los diagramas de diagnóstico revelaron avances visuales en la normalidad de los desechos y una distribución más homogénea en el diagrama de escala-localidad. Esto indica que, a pesar de que la transformación mejora parcialmente ciertas hipótesis estadísticas, lo hace a costo de disminuir la capacidad predictiva del modelo.
Por lo tanto, se concluye que el modelo original (sin transformar) es el más adecuado para este análisis, ya que ofrece una mejor capacidad de predicción con un buen cumplimiento de los supuestos estadísticos básicos.
##Pronóstico
Procedemos con la realizamos del pronostico con el modelo optimo, para esto utilizaremos 3 personas hipoteticas.
# Crear copia sin tilde
Datos_Nutresa$Antiguedad <- Datos_Nutresa$Antigüedad
# Ajustar modelo óptimo sin tildes
modelo_optimo2 <- lm(Ingreso_Mensual ~ Años_Experiencia + Antiguedad + Cargo,
data = Datos_Nutresa)
# Crear nuevos casos
nuevos_casos <- data.frame(
Años_Experiencia = c(5),
Antiguedad = c(3),
Cargo = factor("Ejecutivo_Ventas", levels = levels(Datos_Nutresa$Cargo))
)
# Predecir ingreso
predict(modelo_optimo2, newdata = nuevos_casos, interval = "confidence", level = 0.95)
## fit lwr upr
## 1 5682678 5480061 5885294
###Conclusión
Se realizó una predicción del ingreso mensual para una persona con las siguientes características:
Utilizando el modelo óptimo de regresión lineal, se estimó un ingreso mensual de $5.682.678 COP, con un intervalo de confianza al 95% entre $5.480.061 y $5.885.294 COP.
Esto significa que, bajo las condiciones actuales del modelo, es razonable esperar que una persona con este perfil tenga un ingreso mensual dentro de ese rango.
##Aplicaciones y utilidad del modelo en la organización
El modelo de regresión lineal construido permite predecir de forma razonablemente precisa el ingreso mensual de los empleados, a partir de su experiencia, antigüedad y cargo. Esto lo convierte en una herramienta útil para la toma de decisiones en las siguientes áreas:
Gestión salarial y equidad interna: El modelo puede ayudar a identificar si existen brechas salariales entre empleados con perfiles similares, promoviendo una estructura salarial más justa y basada en datos objetivos.
Planeación de presupuestos de nómina: Permite estimar el impacto financiero de futuros ascensos, promociones o contrataciones, al predecir el ingreso que correspondería a distintos perfiles laborales.
Simulaciones y escenarios hipotéticos: La empresa puede utilizar el modelo para evaluar, por ejemplo, cuánto costaría incorporar personal con ciertos años de experiencia en cargos estratégicos.
Atracción y retención de talento: Ofrece un marco cuantitativo para diseñar escalas salariales competitivas según la experiencia y la trayectoria del empleado, lo cual puede mejorar la retención.
En resumen, el modelo sirve como base técnica para la toma de decisiones estratégicas en talento humano y compensaciones, alineando las políticas salariales con las características reales del personal.