Actividad 3 - Rotación de cargo

#Cargamos los datos y paquetes adicionales necesarios

#install.packages("tidyverse")
#install.packages("corrplot")
#install.packages("leaflet")
#install.packages("mapview")
#install.packages("table1")
#install.packages("leaflet.extras")
#install.packages("base")
#install.packages("zoo")
#install.packages("factoextra")
#install.packages("missForest")
#install.packages("plotly")
#install.packages("ggpubr")
#install.packages("corrplot")

library(tidyverse)
## Warning: package 'ggplot2' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.3.3
## corrplot 0.92 loaded
library(leaflet)
library(leaflet.extras)
library(base)
library(zoo)
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(missForest)
library(plotly)
## 
## Attaching package: 'plotly'
## 
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following object is masked from 'package:graphics':
## 
##     layout
library(ggpubr)
library(knitr)
library(dplyr)
library(corrplot)
## Carga de datos
# install.packages("devtools") # solo la primera vez
# devtools::install_github("dgonxalex80/paqueteMODELOS", force =TRUE)
library(paqueteMODELOS)
## Loading required package: boot
## Loading required package: broom
## Loading required package: GGally
## Warning: package 'GGally' was built under R version 4.3.3
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## Loading required package: gridExtra
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
## Loading required package: summarytools
## 
## Attaching package: 'summarytools'
## The following object is masked from 'package:tibble':
## 
##     view
data("rotacion")
#Data
library(paqueteMODELOS)
library(dplyr)
data("rotacion")
glimpse(rotacion)
## Rows: 1,470
## Columns: 24
## $ Rotación                    <chr> "Si", "No", "Si", "No", "No", "No", "No", …
## $ Edad                        <dbl> 41, 49, 37, 33, 27, 32, 59, 30, 38, 36, 35…
## $ `Viaje de Negocios`         <chr> "Raramente", "Frecuentemente", "Raramente"…
## $ Departamento                <chr> "Ventas", "IyD", "IyD", "IyD", "IyD", "IyD…
## $ Distancia_Casa              <dbl> 1, 8, 2, 3, 2, 2, 3, 24, 23, 27, 16, 15, 2…
## $ Educación                   <dbl> 2, 1, 2, 4, 1, 2, 3, 1, 3, 3, 3, 2, 1, 2, …
## $ Campo_Educación             <chr> "Ciencias", "Ciencias", "Otra", "Ciencias"…
## $ Satisfacción_Ambiental      <dbl> 2, 3, 4, 4, 1, 4, 3, 4, 4, 3, 1, 4, 1, 2, …
## $ Genero                      <chr> "F", "M", "M", "F", "M", "M", "F", "M", "M…
## $ Cargo                       <chr> "Ejecutivo_Ventas", "Investigador_Cientifi…
## $ Satisfación_Laboral         <dbl> 4, 2, 3, 3, 2, 4, 1, 3, 3, 3, 2, 3, 3, 4, …
## $ Estado_Civil                <chr> "Soltero", "Casado", "Soltero", "Casado", …
## $ Ingreso_Mensual             <dbl> 5993, 5130, 2090, 2909, 3468, 3068, 2670, …
## $ Trabajos_Anteriores         <dbl> 8, 1, 6, 1, 9, 0, 4, 1, 0, 6, 0, 0, 1, 0, …
## $ Horas_Extra                 <chr> "Si", "No", "Si", "Si", "No", "No", "Si", …
## $ Porcentaje_aumento_salarial <dbl> 11, 23, 15, 11, 12, 13, 20, 22, 21, 13, 13…
## $ Rendimiento_Laboral         <dbl> 3, 4, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, …
## $ Años_Experiencia            <dbl> 8, 10, 7, 8, 6, 8, 12, 1, 10, 17, 6, 10, 5…
## $ Capacitaciones              <dbl> 0, 3, 3, 3, 3, 2, 3, 2, 2, 3, 5, 3, 1, 2, …
## $ Equilibrio_Trabajo_Vida     <dbl> 1, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3, 2, 3, …
## $ Antigüedad                  <dbl> 6, 10, 0, 8, 2, 7, 1, 1, 9, 7, 5, 9, 5, 2,…
## $ Antigüedad_Cargo            <dbl> 4, 7, 0, 7, 2, 7, 0, 0, 7, 7, 4, 5, 2, 2, …
## $ Años_ultima_promoción       <dbl> 0, 1, 0, 3, 2, 3, 0, 0, 1, 7, 0, 0, 4, 1, …
## $ Años_acargo_con_mismo_jefe  <dbl> 5, 7, 0, 0, 2, 6, 0, 0, 8, 7, 3, 8, 3, 2, …
head(rotacion)
## # A tibble: 6 × 24
##   Rotación  Edad `Viaje de Negocios` Departamento Distancia_Casa Educación
##   <chr>    <dbl> <chr>               <chr>                 <dbl>     <dbl>
## 1 Si          41 Raramente           Ventas                    1         2
## 2 No          49 Frecuentemente      IyD                       8         1
## 3 Si          37 Raramente           IyD                       2         2
## 4 No          33 Frecuentemente      IyD                       3         4
## 5 No          27 Raramente           IyD                       2         1
## 6 No          32 Frecuentemente      IyD                       2         2
## # ℹ 18 more variables: Campo_Educación <chr>, Satisfacción_Ambiental <dbl>,
## #   Genero <chr>, Cargo <chr>, Satisfación_Laboral <dbl>, Estado_Civil <chr>,
## #   Ingreso_Mensual <dbl>, Trabajos_Anteriores <dbl>, Horas_Extra <chr>,
## #   Porcentaje_aumento_salarial <dbl>, Rendimiento_Laboral <dbl>,
## #   Años_Experiencia <dbl>, Capacitaciones <dbl>,
## #   Equilibrio_Trabajo_Vida <dbl>, Antigüedad <dbl>, Antigüedad_Cargo <dbl>,
## #   Años_ultima_promoción <dbl>, Años_acargo_con_mismo_jefe <dbl>
str(rotacion)
## tibble [1,470 × 24] (S3: tbl_df/tbl/data.frame)
##  $ Rotación                   : chr [1:1470] "Si" "No" "Si" "No" ...
##  $ Edad                       : num [1:1470] 41 49 37 33 27 32 59 30 38 36 ...
##  $ Viaje de Negocios          : chr [1:1470] "Raramente" "Frecuentemente" "Raramente" "Frecuentemente" ...
##  $ Departamento               : chr [1:1470] "Ventas" "IyD" "IyD" "IyD" ...
##  $ Distancia_Casa             : num [1:1470] 1 8 2 3 2 2 3 24 23 27 ...
##  $ Educación                  : num [1:1470] 2 1 2 4 1 2 3 1 3 3 ...
##  $ 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" ...
##  $ Ingreso_Mensual            : num [1:1470] 5993 5130 2090 2909 3468 ...
##  $ Trabajos_Anteriores        : num [1:1470] 8 1 6 1 9 0 4 1 0 6 ...
##  $ Horas_Extra                : chr [1:1470] "Si" "No" "Si" "Si" ...
##  $ 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 ...
##  $ Años_Experiencia           : num [1:1470] 8 10 7 8 6 8 12 1 10 17 ...
##  $ 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                 : num [1:1470] 6 10 0 8 2 7 1 1 9 7 ...
##  $ 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 ...
En una organización, se busca comprender y prever los factores que influyen en la rotación de empleados entre distintos cargos. La empresa ha recopilado datos históricos sobre el empleo de sus trabajadores, incluyendo variables como la antigüedad en el cargo actual, el nivel de satisfacción laboral, el salario actual, edad y otros factores relevantes. La gerencia planea desarrollar un modelo de regresión logística que permita estimar la probabilidad de que un empleado cambie de cargo en el próximo período y determinar cuales factores indicen en mayor proporción a estos cambios.
Con esta información, la empresa podrá tomar medidas proactivas para retener a su talento clave, identificar áreas de mejora en la gestión de recursos humanos y fomentar un ambiente laboral más estable y tranquilo. La predicción de la probabilidad de rotación de empleados ayudará a la empresa a tomar decisiones estratégicas informadas y a mantener un equipo de trabajo comprometido y satisfecho en sus roles actuales.

1. Selección de variables

Seleccione 3 variables categóricas (distintas de rotación) y 3 variables cuantitativas, que se consideren estén relacionadas con la rotación.

Variables Categóricas Elegidas:

- Campo Educación: Ya que el empleado querrá crecer en la empresa y cambiar de cargo a medida que estudia y evoluciona académicamente.
- Cargo: Ya que es el punto de partida para querer rotar, posiblemente por el nivel que represente el cargo en el que esté actualmente.
- Horas Extra*: Puede afectar y motivar la necesidad de rotar si la cantidad de horas extra le afectan su vida personal.

Variables Cuantitavivas Elegidas:

- Educación: Va ligado al campo educación en al que pertenece el empleado.
- Edad: A medida que el empleado va creciendo en años, también querrá ir creciendo en experiencias diferentes y cargos más retadores y de mayor retribución y responsabilidad.
- Rendimiento Laboral: Creo que a medida que el empleado tiene mayor rendimiento laboral, con el tiempo querrá tener algún movimiento en cargo y querrá rotar de su trabajo actual.

2. Análisis Univariado

# Muestra un resumen estadístico de las variables numéricas en el dataset.
summary(rotacion)  
##    Rotación              Edad       Viaje de Negocios  Departamento      
##  Length:1470        Min.   :18.00   Length:1470        Length:1470       
##  Class :character   1st Qu.:30.00   Class :character   Class :character  
##  Mode  :character   Median :36.00   Mode  :character   Mode  :character  
##                     Mean   :36.92                                        
##                     3rd Qu.:43.00                                        
##                     Max.   :60.00                                        
##  Distancia_Casa     Educación     Campo_Educación    Satisfacción_Ambiental
##  Min.   : 1.000   Min.   :1.000   Length:1470        Min.   :1.000         
##  1st Qu.: 2.000   1st Qu.:2.000   Class :character   1st Qu.:2.000         
##  Median : 7.000   Median :3.000   Mode  :character   Median :3.000         
##  Mean   : 9.193   Mean   :2.913                      Mean   :2.722         
##  3rd Qu.:14.000   3rd Qu.:4.000                      3rd Qu.:4.000         
##  Max.   :29.000   Max.   :5.000                      Max.   :4.000         
##     Genero             Cargo           Satisfación_Laboral Estado_Civil      
##  Length:1470        Length:1470        Min.   :1.000       Length:1470       
##  Class :character   Class :character   1st Qu.:2.000       Class :character  
##  Mode  :character   Mode  :character   Median :3.000       Mode  :character  
##                                        Mean   :2.729                         
##                                        3rd Qu.:4.000                         
##                                        Max.   :4.000                         
##  Ingreso_Mensual Trabajos_Anteriores Horas_Extra       
##  Min.   : 1009   Min.   :0.000       Length:1470       
##  1st Qu.: 2911   1st Qu.:1.000       Class :character  
##  Median : 4919   Median :2.000       Mode  :character  
##  Mean   : 6503   Mean   :2.693                         
##  3rd Qu.: 8379   3rd Qu.:4.000                         
##  Max.   :19999   Max.   :9.000                         
##  Porcentaje_aumento_salarial Rendimiento_Laboral Años_Experiencia
##  Min.   :11.00               Min.   :3.000       Min.   : 0.00   
##  1st Qu.:12.00               1st Qu.:3.000       1st Qu.: 6.00   
##  Median :14.00               Median :3.000       Median :10.00   
##  Mean   :15.21               Mean   :3.154       Mean   :11.28   
##  3rd Qu.:18.00               3rd Qu.:3.000       3rd Qu.:15.00   
##  Max.   :25.00               Max.   :4.000       Max.   :40.00   
##  Capacitaciones  Equilibrio_Trabajo_Vida   Antigüedad     Antigüedad_Cargo
##  Min.   :0.000   Min.   :1.000           Min.   : 0.000   Min.   : 0.000  
##  1st Qu.:2.000   1st Qu.:2.000           1st Qu.: 3.000   1st Qu.: 2.000  
##  Median :3.000   Median :3.000           Median : 5.000   Median : 3.000  
##  Mean   :2.799   Mean   :2.761           Mean   : 7.008   Mean   : 4.229  
##  3rd Qu.:3.000   3rd Qu.:3.000           3rd Qu.: 9.000   3rd Qu.: 7.000  
##  Max.   :6.000   Max.   :4.000           Max.   :40.000   Max.   :18.000  
##  Años_ultima_promoción Años_acargo_con_mismo_jefe
##  Min.   : 0.000        Min.   : 0.000            
##  1st Qu.: 0.000        1st Qu.: 2.000            
##  Median : 1.000        Median : 3.000            
##  Mean   : 2.188        Mean   : 4.123            
##  3rd Qu.: 3.000        3rd Qu.: 7.000            
##  Max.   :15.000        Max.   :17.000
#Histograma de distribución de la Edad

ggplot(rotacion, aes(x = Edad)) +
  geom_histogram(bins = 30)

Observamos que la mayoría de empleados tiene entre 25 y 45 años, pero se ven picos significativos con empleados de 30 y 32 años mas o menos.
#Gráfico de barras para la Rotación

ggplot(rotacion, aes(x = Rotación)) +
  geom_bar()

La gran mayoría de empleados no ha rotado, está bastante desbalanceada la base con respecto a la variable rotación.
#Gráfico de barras para Departamento

ggplot(rotacion, aes(x = Departamento)) +
  geom_bar()

La mayoría de empleados (casi 1.000) son del departamento de Investigación y Desarrollo, seguido de Ventas (Casi 500) y finalmente de Recursos Humanos con menos de 50.
#Gráfico de barras para el campo en que se educó el empleado

ggplot(rotacion, aes(x = Campo_Educación)) +
  geom_bar()

Observamos que el área de estudio con más empleados son las Ciencias con un poco más de 600, seguido de Salud con cerca de 500.
#Histograma de distribución de la Educación

ggplot(rotacion, aes(x = Educación)) +
  geom_histogram(bins = 30)

Asumiendo que el número corresponde al grado obtenido por el empleado, siendo 1 primaria, 2 secundaria, 3 profesional y así sucesivamente, observamos que la mayoría de empleados tienen grado Profesional, pero también se observa una cantidad significativa con estudios se secundaria y primaria y otros incluso con grados superiores que podrían ser los que mayor deseo de rotación tengan.
#Gráfico de barras para el campo el Género

ggplot(rotacion, aes(x = Genero)) +
  geom_bar()

En la compañía existen más Hombres (M) que Mujeres (F).
#Gráfico de barras para el campo de cargo

ggplot(rotacion, aes(x = Cargo)) +
  geom_bar() +
  labs(x = "Cargo") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

Los cargos con mayor número de personal son Ejecutivo de Ventas, Investigador Científico y Técnico de Laboratorio.
#Histograma de distribución de la Satisfacción Laboral

ggplot(rotacion, aes(x = Satisfación_Laboral)) +
  geom_histogram(bins = 30)

Hay un gran número de empleados con baja satisfacción laboral, aunque impera los mayores a 3, no es despreciable la cantidad de empleados que tienen Satisfacción 2 e incluso 1.
#Histograma de distribución de los salarios

ggplot(rotacion, aes(x = Ingreso_Mensual)) +
  geom_histogram(bins = 30)

Evidenciamos que la gran mayoría de los empleados recibe ingresos mensuales menores a $7.000, siendo el pico más alto alrededor de los $2.500, como hipótesis, entre más bajo el rango salarial, quizás más alto sea la intención de rotar de puesto de trabajo.
#Gráfico de barras para el campo de Horas Extra

ggplot(rotacion, aes(x = Horas_Extra)) +
  geom_bar() +
  labs(x = "Horas Extra") +
  theme(axis.text.x = element_text(angle = 0, hjust = 1))

Menos de la mitad del personal realiza horas extra
#Histograma de distribución del rendimiento laboral

ggplot(rotacion, aes(x = Rendimiento_Laboral)) +
  geom_histogram(bins = 30)

De acuerdo a la escala y teniendo en cuenta que no hay mucha información al respecto, creemos que la mayoría de empleados tiene un rendimiento laboral “Normal”.
#Histograma de distribución de los años de experiencia

ggplot(rotacion, aes(x = Años_Experiencia)) +
  geom_histogram(bins = 30)

Observamos que hay empleados con bastantes años de experiencia (Hasta 40 años), pero la gran mayoría de ellos está por debajo del umbral de los 10 años, siendo este dato el más común.
#Histograma de distribución de los años de Antigüedad

ggplot(rotacion, aes(x = Antigüedad)) +
  geom_histogram(bins = 30)

cor(rotacion$Años_Experiencia, rotacion$Antigüedad)
## [1] 0.6281332
La antigüedad está muy relacionada con los años de experiencia, la gráfica es muy similar, observamos que gran parte de los empleados tiene menos de 10 años de antigüedad en la empresa, y la mayoría tiene menos de 5 (El mayor número es un año).
#Histograma de distribución de los años de Antigüedad en el cargo actual

ggplot(rotacion, aes(x = Antigüedad_Cargo)) +
  geom_histogram(bins = 30)

Vemos que la frecuencia más alta en antigüedades en cargos actuales está en los dos años, cero años y siete años respectivamente.
# Calcula la matriz de correlación.
cor_matrix <- cor(rotacion[, c("Educación", "Satisfación_Laboral", "Ingreso_Mensual", "Rendimiento_Laboral", "Años_Experiencia", "Antigüedad", "Antigüedad_Cargo")])

# Crea el mapa de calor.
corrplot(cor_matrix, method = "color", addCoef.col = TRUE)

ggplot(data = rotacion, aes(x = Antigüedad, y = Ingreso_Mensual)) +
  geom_point(color = "blue", size = 3) +
  geom_smooth(method = "lm") +
  labs(x = "Antigüedad", y = "Ingresos mensuales") +
  ggtitle("Relación entre antigüedad e ingresos mensuales")
## `geom_smooth()` using formula = 'y ~ x'

ggplot(data = rotacion, aes(x = Años_Experiencia, y = Ingreso_Mensual)) +
  geom_point(color = "black", size = 3) +
  geom_smooth(method = "lm") +
  labs(x = "Experiencia", y = "Ingresos mensuales") +
  ggtitle("Relación entre años de experiencia e Ingresos")
## `geom_smooth()` using formula = 'y ~ x'

cor(rotacion$Años_Experiencia, rotacion$Ingreso_Mensual)
## [1] 0.7728932
Observamos que existe una relación muy directa entre la experiencia y la remuneración mensual recibida por el empleado.

3. Análisis Bivariado

Realiza un análisis de bivariado en donde la variable respuesta sea rotacion codificada de la siguiente manera (y=1 es si rotación, y=0 es no rotación). Con base en estos resultados identifique cuales son las variables determinantes de la rotación e interpretar el signo del coeficiente estimado. Compare estos resultados con la hipotesis planteada en el punto 2.

Debemos preparar los datos, transformamos las variables categóricas en numéricas (Factores)

rotacion$`Viaje de Negocios` <- factor(rotacion$`Viaje de Negocios`)
rotacion$Departamento <- factor(rotacion$Departamento)
rotacion$Campo_Educación <- factor(rotacion$Campo_Educación)
rotacion$Genero <- factor(rotacion$Genero)
rotacion$Cargo <- factor(rotacion$Cargo)
rotacion$Estado_Civil <- factor(rotacion$Estado_Civil)
rotacion$Horas_Extra <- factor(rotacion$Horas_Extra)
#Cambiamos los valores de la variable de salida

rotacion$Rotación <- ifelse(rotacion$Rotación == "Si", 1, 0)

Modelo de Regresión Logística

model_bivariado <- glm(Rotación ~ ., data = rotacion, family = "binomial")

#Resultados del modelo
summary(model_bivariado)
## 
## Call:
## glm(formula = Rotación ~ ., family = "binomial", data = rotacion)
## 
## Coefficients:
##                                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                   2.613e-01  1.600e+00   0.163 0.870276    
## Edad                         -3.655e-02  1.328e-02  -2.753 0.005899 ** 
## `Viaje de Negocios`No_Viaja  -1.763e+00  3.958e-01  -4.454 8.44e-06 ***
## `Viaje de Negocios`Raramente -8.215e-01  2.062e-01  -3.984 6.78e-05 ***
## DepartamentoRH               -1.292e+01  3.780e+02  -0.034 0.972728    
## DepartamentoVentas            1.231e-01  1.023e+00   0.120 0.904238    
## Distancia_Casa                4.250e-02  1.046e-02   4.063 4.85e-05 ***
## Educación                    -1.149e-02  8.552e-02  -0.134 0.893169    
## Campo_EducaciónHumanidades    8.342e-01  7.860e-01   1.061 0.288527    
## Campo_EducaciónMercadeo       3.823e-01  3.178e-01   1.203 0.229009    
## Campo_EducaciónOtra           5.979e-02  4.024e-01   0.149 0.881890    
## Campo_EducaciónSalud         -1.136e-01  2.121e-01  -0.536 0.592226    
## Campo_EducaciónTecnicos       9.281e-01  2.970e-01   3.125 0.001779 ** 
## Satisfacción_Ambiental       -4.424e-01  8.119e-02  -5.449 5.05e-08 ***
## GeneroM                       3.248e-01  1.795e-01   1.809 0.070386 .  
## CargoDirector_Manofactura     1.269e+00  9.710e-01   1.307 0.191293    
## CargoEjecutivo_Ventas         1.989e+00  1.390e+00   1.431 0.152359    
## CargoGerente                  1.247e+00  1.032e+00   1.208 0.227061    
## CargoInvestigador_Cientifico  1.643e+00  1.021e+00   1.609 0.107544    
## CargoRecursos_Humanos         1.519e+01  3.780e+02   0.040 0.967950    
## CargoRepresentante_Salud      1.037e+00  9.640e-01   1.076 0.282059    
## CargoRepresentante_Ventas     2.962e+00  1.482e+00   1.998 0.045682 *  
## CargoTecnico_Laboratorio      2.587e+00  1.018e+00   2.541 0.011041 *  
## Satisfación_Laboral          -4.048e-01  7.925e-02  -5.109 3.24e-07 ***
## Estado_CivilDivorciado       -3.973e-01  2.530e-01  -1.570 0.116313    
## Estado_CivilSoltero           1.033e+00  1.941e-01   5.323 1.02e-07 ***
## Ingreso_Mensual              -9.588e-07  5.854e-05  -0.016 0.986932    
## Trabajos_Anteriores           1.756e-01  3.746e-02   4.688 2.76e-06 ***
## Horas_ExtraSi                 1.872e+00  1.869e-01  10.014  < 2e-16 ***
## Porcentaje_aumento_salarial  -2.302e-02  3.805e-02  -0.605 0.545193    
## Rendimiento_Laboral           1.702e-01  3.889e-01   0.438 0.661621    
## Años_Experiencia             -5.408e-02  2.782e-02  -1.944 0.051874 .  
## Capacitaciones               -1.828e-01  7.125e-02  -2.566 0.010301 *  
## Equilibrio_Trabajo_Vida      -3.654e-01  1.207e-01  -3.027 0.002470 ** 
## Antigüedad                    9.630e-02  3.750e-02   2.568 0.010220 *  
## Antigüedad_Cargo             -1.414e-01  4.386e-02  -3.224 0.001264 ** 
## Años_ultima_promoción         1.787e-01  4.112e-02   4.345 1.39e-05 ***
## Años_acargo_con_mismo_jefe   -1.563e-01  4.599e-02  -3.399 0.000677 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.58  on 1469  degrees of freedom
## Residual deviance:  893.23  on 1432  degrees of freedom
## AIC: 969.23
## 
## Number of Fisher Scoring iterations: 14
De acuerdo a los resultados anteriores, encontramos que las variables más representativas son Edad, Viaje de Negocios, Distancia de Casa, Saisfacción Ambiental, Satisfacción Laboral, si es casado, trabajos anteriores, horas extra, años de última promoción y años a cargo del mismo jefe.

Interpretamos el Coeficiente de Regresión:

Edad: Un aumento de un año en la edad se asocia con una disminución de la probabilidad de rotación de 0.3339 unidades.
Viaje de Negocios:
- No viaja: Comparado con “Viaja Frecuentemente”, la probabilidad de rotación es menor en 1.7629 unidades.
- Raramente: Comparado con “Viaja Frecuentemente”, la probabilidad de rotación es menor en 0.8215 unidades.
Departamento:
-RH: No se observa una relación significativa con la rotación.
-Ventas: No se observa una relación significativa con la rotación.
Distancia_Casa: Un aumento de una unidad en la distancia a la casa se asocia con un aumento de la probabilidad de rotación de 0.3445 unidades.
Educación: No se observa una relación significativa con la rotación.
Campo_Educación:
- Tecnicos: Un aumento en esta variable se asocia con un aumento en la probabilidad de rotación de 0.9281 unidades.

Interpretamos la Significancia:

Las variables con un valor p menor a 0.05 se consideran significativas. De acuerdo a lo anterior, las variables significativas son: Edad, Viaje de Negocios (No_Viaja, Raramente), Distancia_Casa, Satisfacción_Ambiental, CargoRepresentante_Ventas, CargoTecnico_Laboratorio, Trabajos_Anteriores, Horas_ExtraSi, Capacitaciones, Equilibrio_Trabajo_Vida, Antigüedad, Antigüedad_Cargo, Años_ultima_promoción y Años_acargo_con_mismo_jefe.

Interpretamos el coeficiente: Algunos ejemplos de acuerdo al signo del coeficiente.

- Positivo: A mayor valor de la variable independiente, mayor probabilidad de rotación.
- Negativo: A mayor valor de la variable independiente, menor probabilidad de rotación.
- Edad: A mayor edad, menor probabilidad de rotación.
- Distancia_Casa: A mayor distancia a la casa, mayor probabilidad de rotación.
- Horas_ExtraSi: Si se trabaja horas extra, mayor probabilidad de rotación.

4. Estimación del modelo

Realiza la estimación de un modelo de regresión logístico en el cual la variable respuesta es rotacion (y=1 es si rotación, y=0 es no rotación) y las covariables las 6 seleccionadas en el punto 1. Interprete los coeficientes del modelo y la significancia de los parámetros.

# Cargamos las librerias necesarias para el modelo de regresión logística.

#install.packages("Matrix")
library(glmnet)
## Loading required package: Matrix
## Warning: package 'Matrix' was built under R version 4.3.3
## 
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
## 
##     expand, pack, unpack
## Loaded glmnet 4.1-8
Teniendo en cuenta que para el punto anterior se convirtieron las variables categóricas en factores, para este punto solo debemos dividir el set en entrenamiento y prueba, crear el modelo y evaluarlo.
# Creamos una copia del dataset original sin la variable Viajes

rotacion_sin_viaje <- subset(rotacion, select = -`Viaje de Negocios`)
#Divide los datos en entrenamiento y prueba:

set.seed(123)
train_index <- sample(1:nrow(rotacion_sin_viaje), 0.8 * nrow(rotacion_sin_viaje))
test_index <- setdiff(1:nrow(rotacion_sin_viaje), train_index)
train <- rotacion_sin_viaje[train_index, ]
test <- rotacion_sin_viaje[test_index, ]
# Creamos el modelo

model_6variables <- glm(Rotación ~ Campo_Educación + Cargo + Horas_Extra + Educación + Edad + Rendimiento_Laboral, data = train, family = "binomial")

summary(model_6variables)
## 
## Call:
## glm(formula = Rotación ~ Campo_Educación + Cargo + Horas_Extra + 
##     Educación + Edad + Rendimiento_Laboral, family = "binomial", 
##     data = train)
## 
## Coefficients:
##                               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                  -2.494417   1.159720  -2.151  0.03149 *  
## Campo_EducaciónHumanidades    1.127976   0.755132   1.494  0.13524    
## Campo_EducaciónMercadeo       0.580813   0.322271   1.802  0.07151 .  
## Campo_EducaciónOtra          -0.118597   0.401430  -0.295  0.76766    
## Campo_EducaciónSalud         -0.021275   0.213687  -0.100  0.92069    
## Campo_EducaciónTecnicos       0.800597   0.289751   2.763  0.00573 ** 
## CargoDirector_Manofactura     0.871505   0.807240   1.080  0.28032    
## CargoEjecutivo_Ventas         1.455417   0.767163   1.897  0.05781 .  
## CargoGerente                  0.535322   0.904265   0.592  0.55385    
## CargoInvestigador_Cientifico  1.357846   0.761274   1.784  0.07448 .  
## CargoRecursos_Humanos         1.696757   0.935879   1.813  0.06983 .  
## CargoRepresentante_Salud      0.871969   0.822156   1.061  0.28888    
## CargoRepresentante_Ventas     2.609731   0.794753   3.284  0.00102 ** 
## CargoTecnico_Laboratorio      2.198752   0.758876   2.897  0.00376 ** 
## Horas_ExtraSi                 1.489125   0.179882   8.278  < 2e-16 ***
## Educación                     0.070841   0.087825   0.807  0.41988    
## Edad                         -0.045694   0.011522  -3.966 7.32e-05 ***
## Rendimiento_Laboral           0.003364   0.243692   0.014  0.98899    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1036.88  on 1175  degrees of freedom
## Residual deviance:  870.19  on 1158  degrees of freedom
## AIC: 906.19
## 
## Number of Fisher Scoring iterations: 6

Interpretamos los coeficientes y la significancia de los parámetros.

Coeficientes de regresión:

Observamos que en el Campo Educación casi todas las variables no son significativas, excepto Técnicos (Tecnicos: Un aumento en esta variable se asocia con un aumento en la probabilidad de rotación de 0.8006 unidades, y es significativo (p-valor = 0.0057).)
para la variable Cargo, la mayoría de variables no son significativas, excepto las siguientes:
- Representante_Ventas: Un aumento en esta variable se asocia con un aumento en la probabilidad de rotación de 2.6097 unidades, y es significativo (p-valor = 0.0010).
- Tecnico_Laboratorio: Un aumento en esta variable se asocia con un aumento en la probabilidad de rotación de 2.1988 unidades, y es significativo (p-valor = 0.0038).
Horas Extra: Un aumento de una unidad en las horas extra se asocia con un aumento de la probabilidad de rotación de 1.4891 unidades, y es significativo (p-valor < 2e-16).
Educación no es significativo.
Edad: Un aumento de un año en la edad se asocia con una disminución en la probabilidad de rotación de 0.4175 unidades, y es significativo (p-valor = 7.32e-05).
Rendimiento Laboral no es significativo.

Significancia:

Las variables con un valor p menor a 0.05 se consideran significativas. En este caso, las variables significativas son:
- Campo_Educación (Tecnicos)
- Cargo (Representante_Ventas, Tecnico_Laboratorio)
- Horas Extra
- Edad
Solamente cuatro de las seis variables elegidas en el Punto 1 son significativas para el modelo

5. Evaluación

Evaluar el poder predictivo del modelo con base en la curva ROC y el AUC.

# Debemos calcular las probabilidades de rotación

probs <- predict(model_6variables, train, type = "response")
# Crear la curva ROC y calcular el AUC

library(pROC)
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
roc <- roc(train$Rotación, probs)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
auc <- auc(roc)
# Visualizar la curva ROC

plot(roc, print.auc = TRUE)

Interpretación:

- Curva ROC: Se observa que la curva se encuentra por encima de la línea diagonal, lo que indica que el modelo tiene un buen poder predictivo.
- AUC: Teniendo en cuenta que el valor nos da 0.766, se puede concluir que el modelo tiene un buen poder predictivo (medio-alto), es mucho mejor que el azar (ya que es mayor a 0.5)

6. Predicciones

Realiza una predicción la probabilidad de que un individuo (hipotético) rote y defina un corte para decidir si se debe intervenir a este empleado o no (posible estrategia para motivar al empleado).

# Creamos la información del empleado a predecir

empleado_df_2 <- data.frame(
  Edad = 22,
 #`Viaje de Negocios` = "Frecuentemente",
  Departamento = "IyD",
  Distancia_Casa = 15,
  Educación = 1,
  Campo_Educación = "Tecnicos",
  Satisfacción_Ambiental = 3,
  Genero = "M",
  Cargo = "Tecnico_Laboratorio",
  Satisfación_Laboral = 3,
  Estado_Civil = "Soltero",
  Ingreso_Mensual = 3894,
  Trabajos_Anteriores = 5,
  Horas_Extra = "No",
  Porcentaje_aumento_salarial = 16,
  Rendimiento_Laboral = 3,
  Años_Experiencia = 4,
  Capacitaciones = 3,
  Equilibrio_Trabajo_Vida = 3,
  Antigüedad = 2,
  Antigüedad_Cargo = 2,
  Años_ultima_promoción = 1,
  Años_acargo_con_mismo_jefe = 2
)
# Convertimos en factor los campos categóricos

#empleado_df_2$`Viaje de Negocios` <- factor(empleado_df_2$`Viaje de Negocios`)
empleado_df_2$Departamento <- factor(empleado_df_2$Departamento)
empleado_df_2$Campo_Educación <- factor(empleado_df_2$Campo_Educación)
empleado_df_2$Genero <- factor(empleado_df_2$Genero)
empleado_df_2$Cargo <- factor(empleado_df_2$Cargo)
empleado_df_2$Estado_Civil <- factor(empleado_df_2$Estado_Civil)
empleado_df_2$Horas_Extra <- factor(empleado_df_2$Horas_Extra)
# Realizamos la predicción

probs_empleado <- predict(model_6variables, empleado_df_2, type = "response")
cat("La probabilidad de rotación para el empleado es:", probs_empleado)
## La probabilidad de rotación para el empleado es: 0.3966576
Observamos que la probabilidad de rotación del empleado es bastante baja, por lo que se concluye que el empleado predicho no rotará de su puesto/empleo.

7. Conclusiones

En las conclusiones adicione una discución sobre cuál sería la estrategia para disminuir la rotación en la empresa (con base en las variables que resultaron significativas en el punto 3).

Estrategias y Conclusiones

Revisando los resultados de los estadísticos del modelo inicial (Punto 3) podemos observar los siguientes puntos clave para formular una estrategia de reducción de la rotación:

Factores que aumentan la probabilidad de rotación:

- Edad: Los empleados más jóvenes tienen una mayor tendencia a rotar.
- Viajes de negocios: Viajar con frecuencia, especialmente “Raramente”, aumenta la probabilidad de rotación.
- Distancia al trabajo: Una mayor distancia al lugar de trabajo aumenta la probabilidad de rotación.
- Satisfacción ambiental: Una menor satisfacción con el ambiente laboral aumenta la probabilidad de rotación.
- Cargo: Ciertos cargos, como “Tecnico_Laboratorio”, “Representante_Ventas” y “CargoGerente”, tienen mayor riesgo de rotación.
- Satisfacción laboral: Una menor satisfacción con el trabajo aumenta la probabilidad de rotación.
- Capacitaciones: La falta de capacitaciones puede aumentar la probabilidad de rotación.
- Equilibrio trabajo-vida: Un desequilibrio entre el trabajo y la vida personal aumenta la probabilidad de rotación.
- Antigüedad en el cargo: Una menor antigüedad en el cargo aumenta la probabilidad de rotación.
- Años a cargo con el mismo jefe: Un menor tiempo a cargo con el mismo jefe aumenta la probabilidad de rotación.
El resto de las variables no tienen un impacto significativo en la rotación.

Estrategias para disminuir la rotación:

- Implementar programas de desarrollo profesional y capacitación
- Mejorar el equilibrio entre el trabajo y la vida personal
- Promover un ambiente laboral positivo
- Reducir la carga de trabajo y el estrés
- Mejorar la comunicación y el feedback
- Ofrecer oportunidades de crecimiento dentro de la empresa
- Recompensar y reconocer el buen desempeño

Conclusiones:

- La rotación de personal es un problema complejo que tiene diversos factores causales.
- Es fundamental analizar las estadísticas y resultados del modelo para identificar los factores específicos que impactan la rotación en la empresa.
- Implementar una estrategia integral que combine diferentes medidas puede ayudar a reducir la rotación y mejorar la retención del talento.
- Se pueden realizar entrevistas de salida a los empleados que rotan para obtener información valiosa sobre sus motivos de partida.