Primera Situación Problema. Con base en los datos de rotación realizar los puntos 1 a 7.

library(readxl)
Rotacion <- read_excel("Datos_Rotación.xlsx")
View(Rotacion)
names(Rotacion)
##  [1] "Rotación"                    "Edad"                       
##  [3] "Viaje de Negocios"           "Departamento"               
##  [5] "Distancia_Casa"              "Educación"                  
##  [7] "Campo_Educación"             "Satisfacción_Ambiental"     
##  [9] "Genero"                      "Cargo"                      
## [11] "Satisfación_Laboral"         "Estado_Civil"               
## [13] "Ingreso_Mensual"             "Trabajos_Anteriores"        
## [15] "Horas_Extra"                 "Porcentaje_aumento_salarial"
## [17] "Rendimiento_Laboral"         "Años_Experiencia"           
## [19] "Capacitaciones"              "Equilibrio_Trabajo_Vida"    
## [21] "Antigüedad"                  "Antigüedad_Cargo"           
## [23] "Años_ultima_promoción"       "Años_acargo_con_mismo_jefe"

Punto #1: Seleccionar 3 variables categóricas (distintas de rotación) y 3 variables cuantitativas, que consideren estén relacionadas con la rotación. Nota: Justificar por que estas variables están relacionadas y que tipo de relación se espera (Hipótesis).

1. Estado Civil (Cualitativa): La hipótesis es que las personas solteras pueden recurrir a la rotación por la libertad de no tener familia principal.

2. Departamento (Cualitativa): Dependiendo del departamento al que pertenezca el trabajador puede acceder a la rotación por diferentes motivos.

3. Viaje de Negocios(Cualitativa): Realizar viajes por el trabajo puede generar que las personas se inclinen por la rotación, ya que genera mayor estrés por el cambio del sitio de trabajo, por otro lado, tal vez haya personas que les guste viajar en su trabajo.

4. Edad (Cuantitativa): Se espera que las personas jóvenes estén en constante búsqueda de mejores condiciones, por lo que la rotación es una buena.

5. Ingreso_Mensual (Cuantitativa): El salario es muy importante para un trabajador, por lo que estará en búsqueda de mejores condiciones económicas, siendo la rotación un tema de interés para su objetivo.

6. Trabajos_Anteriores (Cuantitativa): Las personas que han tenido diferentes puestos de trabajo tienen una predisposición hacia la rotación.

Punto #2: Realizar un análisis univariado (caracterización). Nota: Los indicadores o gráficos se usan dependiendo del tipo de variable (cuanti o cuali). Incluir interpretaciones de la rotación.

library(ggplot2)
library(ggpubr)
g1=ggplot(Rotacion,aes(x=`Viaje de Negocios`, fill =`Viaje de Negocios`))+geom_bar()+geom_text(stat='count', aes(label=..count..), vjust=1)+theme_bw()
g2=ggplot(Rotacion,aes(x=Departamento, fill =`Departamento`))+geom_bar()+geom_text(stat='count', aes(label=..count..), vjust=1)+theme_bw()
g3=ggplot(Rotacion,aes(x=Estado_Civil, fill =`Estado_Civil`))+geom_bar()+geom_text(stat='count', aes(label=..count..), vjust=1)+theme_bw()
g4=ggplot(Rotacion,aes(x=Edad, fill =`Edad`))+geom_histogram(colour = "red")+geom_bar()+theme_bw()
g5=ggplot(Rotacion,aes(x=Ingreso_Mensual))+geom_histogram(colour = "blue")+theme_bw()
g6=ggplot(Rotacion,aes(x=Trabajos_Anteriores))+geom_histogram(colour = "green")+theme_bw()
ggarrange(g1, g2, g3, g4, g5, g6,labels = c("A", "B","C","D","E","F"),ncol = 1, nrow = 3)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## $`1`

## 
## $`2`

## 
## attr(,"class")
## [1] "list"      "ggarrange"
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

Se puede observar la mayor proporción de personas se encuentran casadas, la mayoría de los empleados pertenecen al departamento LyD y los empleados raramente realizan viajes de trabajo. Por otro lado, las edades oscilan entre 30 y 40 años, el promedio de ingresos es 6.5 millones.

Punto #3: Realizar un análisis de bivariado en donde la variable respuesta sea la rotación 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.

ggplot(Rotacion, aes(x=`Viaje de Negocios`, fill = Rotación))+ 
      geom_bar(position="fill")+ylab('Proporción')+theme_bw()

Se puede observar que el mayor porcentaje de Rotación se da en empleados que viajan frecuentemente, lo cual está en correspondencia con la hipótesis inicial.

ggplot(Rotacion, aes(x=Estado_Civil, fill = Rotación))+ 
      geom_bar(position="fill")+
      ylab('Proporción')+
      theme_bw()

Se observa que los empleados solteros son más propensos a la Rotación, apoyando la hipótesis inicial.

ggplot(Rotacion, aes(x=Departamento, fill = Rotación))+ 
      geom_bar(position="fill")+
      ylab('Proporción')+
      theme_bw()+
      theme(axis.text.x = element_text(angle = 90))

Se observa que de acuerdo al departamento hay diferentes porcentajes de empleados propensos a la Rotación, siendo mayor el de Ventas.

ggplot(Rotacion,aes(x=Rotación,y= Edad,fill=Rotación))+geom_boxplot()+theme_bw()

Se observa que los empleados más jóvenes tienden a rotar más, lo cual va en correspondecia a la hipótesis inicial.

ggplot(Rotacion,aes(x=Rotación,y= Trabajos_Anteriores,fill=Rotación))+geom_boxplot()+theme_bw()

Se observa que las personas con varios trabajos anteriores tienden a rotar más, lo cual apoya la hipótesis inicial sobre dicha variable.

ggplot(Rotacion,aes(x=Rotación,y= Ingreso_Mensual,fill=Rotación))+geom_boxplot()+theme_bw()

Los empleados con bajos salarios tienden a rotar más, lo cual apoya la hipótesis inicial.

Punto #4: Realizar la estimación de un modelo de regresión logistico en el cual la variable respuesta es rotación (y=1 es si rotación, y=0 es no rotación) y las covariables las 6 seleccionadas. Interprete los coeficientes del modelo y la significancia de los parametros.

library(car)
## Loading required package: carData
Rotacion$Rotación=as.factor(Rotacion$Rotación)
modelo = glm(Rotación ~ `Viaje de Negocios` + Estado_Civil + Departamento + Ingreso_Mensual + Edad + Trabajos_Anteriores, data = Rotacion, family = "binomial")
summary(modelo)
## 
## Call:
## glm(formula = Rotación ~ `Viaje de Negocios` + Estado_Civil + 
##     Departamento + Ingreso_Mensual + Edad + Trabajos_Anteriores, 
##     family = "binomial", data = Rotacion)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -1.4955  -0.6250  -0.4565  -0.2607   2.9522  
## 
## Coefficients:
##                                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                   1.174e-02  3.696e-01   0.032 0.974655    
## `Viaje de Negocios`No_Viaja  -1.438e+00  3.444e-01  -4.176 2.97e-05 ***
## `Viaje de Negocios`Raramente -6.557e-01  1.738e-01  -3.772 0.000162 ***
## Estado_CivilDivorciado       -2.548e-01  2.241e-01  -1.137 0.255587    
## Estado_CivilSoltero           7.685e-01  1.650e-01   4.658 3.20e-06 ***
## DepartamentoRH                5.538e-01  3.526e-01   1.570 0.116310    
## DepartamentoVentas            6.050e-01  1.615e-01   3.746 0.000180 ***
## Ingreso_Mensual              -1.104e-04  2.579e-05  -4.279 1.87e-05 ***
## Edad                         -3.702e-02  1.025e-02  -3.611 0.000305 ***
## Trabajos_Anteriores           1.294e-01  3.020e-02   4.284 1.84e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1153.3  on 1460  degrees of freedom
## AIC: 1173.3
## 
## Number of Fisher Scoring iterations: 5

Del resumen del modelo se observar que las variables con mayor fuerza explicativa estadísticamente hablando son la edad, los ingresos mensuales, el estado civil soltero y que el empleado no viaje o raravez lo haga.

Se comparan las varianzas entre las medias de los grupos de las variables del modelo por medio del análisis ANOVA:

anova(modelo, test = "Chisq")
## Analysis of Deviance Table
## 
## Model: binomial, link: logit
## 
## Response: Rotación
## 
## Terms added sequentially (first to last)
## 
## 
##                     Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
## NULL                                 1469     1298.6              
## `Viaje de Negocios`  2   23.760      1467     1274.8 6.927e-06 ***
## Estado_Civil         2   43.016      1465     1231.8 4.562e-10 ***
## Departamento         2   10.581      1463     1221.2  0.005039 ** 
## Ingreso_Mensual      1   43.125      1462     1178.1 5.136e-11 ***
## Edad                 1    6.989      1461     1171.1  0.008203 ** 
## Trabajos_Anteriores  1   17.811      1460     1153.3 2.439e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

A partir de los resultados de análisis ANOVA, podemos identificar que todas las variables son significativas para el modelo.

Se complementa lo anterior con el análisis de factores de inflación de la varianza VIF

vif(modelo)
##                         GVIF Df GVIF^(1/(2*Df))
## `Viaje de Negocios` 1.012010  2        1.002989
## Estado_Civil        1.024485  2        1.006066
## Departamento        1.053125  2        1.013025
## Ingreso_Mensual     1.248549  1        1.117385
## Edad                1.321059  1        1.149373
## Trabajos_Anteriores 1.145700  1        1.070374

Por lo que se confirma que las variables son estadísticamente importantes para el modelo.

Punto #5: Evaluar el poder predictivo del modelo con base en la curva ROC y el AUC.

predicciones = ifelse(modelo$fitted.values > 0.2, yes = 1, no = 0)
matriz_confusion = table(modelo$model$Rotación, predicciones,
                         dnn = c('observaciones', 'predicciones'))

matriz_confusion
##              predicciones
## observaciones   0   1
##            No 932 301
##            Si 102 135
library(vcd)
## Loading required package: grid
mosaic(matriz_confusion, shade = TRUE, colorize = TRUE,
       gp = gpar(fill = matrix(c('#b5ead7', '#fbb4ae', '#fbb4ae', '#b5ead7'), 2, 2)))

sum(diag(matriz_confusion))/sum(matriz_confusion)
## [1] 0.7258503

Se observa que el modelo ha pronosticado correctamente 932 de 1233 de No Rotación, mientras que 301 son falsos negativos. Por otro lado, identifica 135 casos efectivamente de Rotación de un total de 237, mientras que 102 son falsos positivos.

La bondad del ajuste del modelo de regresión logístico es 72.58%.

Análisis ROC

attach(Rotacion)
library(ROCR)
prediccion_1= predict.glm(modelo, newdata = Rotacion, type = "response")
resultado_1=table(Rotacion$Rotación, ifelse(prediccion_1>0.2,1,0))
resultado_1
##     
##        0   1
##   No 932 301
##   Si 102 135
prediccion_rotacion= ROCR::prediction(prediccion_1,Rotacion$Rotación)
perf= performance(prediction.obj = prediccion_rotacion, "tpr", "fpr")

plot(perf)
abline(a = 0, b = 1,col="red")
grid()

AUC_1= performance(prediccion_rotacion,measure = "auc")@y.values[[1]]
cat("AUC: ",AUC_1,"n")
## AUC:  0.7338727 n

Se observa que el área debajo de la curva refleja la bondad del test para discriminar el personal que rota o no dentro de la empresa, este valor corresponde a 73.38%.

Punto #6: Predecir 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).

attach(Rotacion)
## The following objects are masked from Rotacion (pos = 4):
## 
##     Antigüedad, Antigüedad_Cargo, Años_acargo_con_mismo_jefe,
##     Años_Experiencia, Años_ultima_promoción, Campo_Educación,
##     Capacitaciones, Cargo, Departamento, Distancia_Casa, Edad,
##     Educación, Equilibrio_Trabajo_Vida, Estado_Civil, Genero,
##     Horas_Extra, Ingreso_Mensual, Porcentaje_aumento_salarial,
##     Rendimiento_Laboral, Rotación, Satisfacción_Ambiental,
##     Satisfación_Laboral, Trabajos_Anteriores, Viaje de Negocios
NuevaData = list(`Viaje de Negocios` = 'Raramente',
  Estado_Civil = 'Casado',
  Departamento = 'Ventas',
  Ingreso_Mensual = 4000,
  Edad = 33,
  Trabajos_Anteriores = 1)

predict(modelo,NuevaData, type = 'response')
##         1 
## 0.1718187

Punto #7: En las conclusiones se discute sobre cual seria la estrategia para disminuir la rotación en la empresa (con base en las variables que resultaron significativas en el punto 3). Ejemplo: Mejorar el ambiente laboral, los incentivos económicos, distribuir la carga de horas extra (menos turnos y mas personal).

Se recomienda un beneficio salarial para los empleados que viajan frecuentemente para mejorar la motivación en el trabajo.

Generar mejores condiciones en los diferentes departamentos de la empresa, realizar capacitaciones para retener los empleados y siga su creciemiento profesional.

Para los empleados jóvenes que quieran seguir su formación profesional, darles beneficios de estudio y flexibilidad de los horarios laborales.

Mejorar los salarios de los trabajadores teniendo en cuenta su tiempo de labor, crear incentivos económicos como bonos por metas, diseñar planes de capacitación y hacer reconocimiento de los empleados de acuerdo a su excelencia.