Carga de librerías e Importación de Datos

suppressWarnings({
library(paqueteMODELOS)
library(dplyr)
library(pROC)
library(ggplot2)
library(modelr)
data("rotacion")
glimpse(rotacion)
})
## Loading required package: boot
## Loading required package: broom
## Loading required package: GGally
## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## Loading required package: gridExtra
## Loading required package: knitr
## Loading required package: summarytools
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:gridExtra':
## 
##     combine
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
## 
## Attaching package: 'modelr'
## The following object is masked from 'package:broom':
## 
##     bootstrap
## 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, …

Informe Actividad 3 - Problema: Rotación de cargo

A partir de los datos históricos recopilados por la Empresa 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, se solicita 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 cuáles factores indicen en mayor proporción a estos cambios.A continuación, se detallan los pasos que la gerencia ha propuesto para el análisis.

1. Selección de variables

Se seleccionan 6 variables que se consideran pueden estar relacionadas con la rotación, 3 categóricas y 3 numéricas.

Variables categóricas seleccionadas

A continuación, se describen las hipótesis para las 3 variables categóricas seleccionadas: cargo, viaje de negocios y horas extra.

Cargo

Se espera que el cargo se relacione con la rotación ya que algunos roles conllevan el afrontar mayores responsabilidades y, por tanto, mayor estrés. La hipótesis es que existen algunos cargos tales como Gerente o Director que tienen mayor rotación que otros cargos tales como técnico o representante.

Viaje de negocios

Se espera que la variable de “viaje de negocios” se relacione con la rotación debdo a que las personas que viajan frecuentemente podrían estar extrañando pasar más tiempo en casa con sus familias. La hipótesis es que las personas que deben viajar frecuentemente tienen mayor rotación que los empleados que no viajan o que raramente viajan.

Horas extra

Se espera que las horas extra se relacionen con la rotación debido a que las personas que laboran horas extra tienen un desgaste mayor y podrían estar descuidando aspectos personales y familiares. La hipótesis es que las personas que trabajan horas extra tienen mayor posibilidad de rotación en comparación con las que no laboran horas extra.

Variables numéricas seleccionadas

A continuación, se describen las hipótesis para las 3 variables numéricas seleccionadas: Satisfacción laboral, ingreso mensual y años de experiencia.

Satisfacción laboral

Se asume que la satisfacción laboral se relaciona con la rotación en el sentido en que un trabajador satisfecho no tedría razón para la rotación. La hipótesis es que a mayor satisfacción se da menos rotación y viceversa.

Ingreso mensual

Se espera que el ingreso mensual se relacione con la rotación debido a que un menor ingreso podría ser motivo de rotación. La hipótesis es que a mayor ingreso se da menos probabilidad de rotación.

Años de experiencia

Se espera que un trabajador con muchos años de experiencia en un mismo cargo tenga cansancio y/o desmotivación, por lo que podría ser causante de rotación. La hipótesis es que a mayor experiencia se da mayor rotación.

2. Análisis univariado

Los atributos contenidos en la base de datos de rotación se pueden clasificar en: cualitativas nominales, cualitativas ordinales, cuantitativas discretas y cuantitativas continuas.

Análisis de Atributos Cualitativos Nominales

En este grupo se encuentran las variables: rotación, viaje de negocios, departamento, campo educación, género, cargo, estado civil y horas extra.

Rotación

La variable rotación es el motivo de análisis de este informe, es decir, se considera la etiqueta. Tiene dos estados o clases, Si o No, haciendo referencia para cada uno de los 1470 registros si ha tenido rotación o no. Se considera que el resultado positivo o negativo es función de las otras 23 variables del tipo cualitativas y cuantitativas.

t=table(rotacion$Rotación)
summarytools::freq(rotacion$Rotación, cumul = FALSE)
## Frequencies  
## rotacion$Rotación  
## Type: Character  
## 
##               Freq   % Valid   % Total
## ----------- ------ --------- ---------
##          No   1233     83.88     83.88
##          Si    237     16.12     16.12
##        <NA>      0                0.00
##       Total   1470    100.00    100.00
lbs=unique(rotacion$Rotación)
pct=round(t/sum(t)*100)
labs=paste(lbs, pct)
labs=paste(labs, "%", sep = " ") 
pie(t, labels=labs)

El resultado indica que de los 1470 registros o casos, el 84% ha presentado rotación.

Viaje de negocios

t=table(rotacion$`Viaje de Negocios`)
summarytools::freq(rotacion$`Viaje de Negocios`, cumul = FALSE)
## Frequencies  
## rotacion$`Viaje de Negocios`  
## Type: Character  
## 
##                        Freq   % Valid   % Total
## -------------------- ------ --------- ---------
##       Frecuentemente    277     18.84     18.84
##             No_Viaja    150     10.20     10.20
##            Raramente   1043     70.95     70.95
##                 <NA>      0                0.00
##                Total   1470    100.00    100.00
lbs=unique(rotacion$`Viaje de Negocios`)
pct=round(t/sum(t)*100)
labs=paste(lbs, pct)
labs=paste(labs, "%", sep = " ") 
pie(t, labels=labs)

Departamento

t=table(rotacion$Departamento)
summarytools::freq(rotacion$Departamento, cumul = FALSE)
## Frequencies  
## rotacion$Departamento  
## Type: Character  
## 
##                Freq   % Valid   % Total
## ------------ ------ --------- ---------
##          IyD    961     65.37     65.37
##           RH     63      4.29      4.29
##       Ventas    446     30.34     30.34
##         <NA>      0                0.00
##        Total   1470    100.00    100.00
lbs=unique(rotacion$Departamento)
pct=round(t/sum(t)*100)
labs=paste(lbs, pct)
labs=paste(labs, "%", sep = " ") 
pie(t, labels=labs)

Campo educación

t=table(rotacion$Campo_Educación)
summarytools::freq(rotacion$Campo_Educación, cumul = FALSE)
## Frequencies  
## rotacion$Campo_Educación  
## Type: Character  
## 
##                     Freq   % Valid   % Total
## ----------------- ------ --------- ---------
##          Ciencias    606     41.22     41.22
##       Humanidades     27      1.84      1.84
##          Mercadeo    159     10.82     10.82
##              Otra     82      5.58      5.58
##             Salud    464     31.56     31.56
##          Tecnicos    132      8.98      8.98
##              <NA>      0                0.00
##             Total   1470    100.00    100.00
lbs=unique(rotacion$Campo_Educación)
pct=round(t/sum(t)*100)
labs=paste(lbs, pct)
labs=paste(labs, "%", sep = " ") 
pie(t, labels=labs)

Género

t=table(rotacion$Genero)
summarytools::freq(rotacion$Genero, cumul = FALSE)
## Frequencies  
## rotacion$Genero  
## Type: Character  
## 
##               Freq   % Valid   % Total
## ----------- ------ --------- ---------
##           F    588     40.00     40.00
##           M    882     60.00     60.00
##        <NA>      0                0.00
##       Total   1470    100.00    100.00
lbs=unique(rotacion$Genero)
pct=round(t/sum(t)*100)
labs=paste(lbs, pct)
labs=paste(labs, "%", sep = " ") 
pie(t, labels=labs)

Cargo

t=table(rotacion$Cargo)
summarytools::freq(rotacion$Cargo, cumul = FALSE)
## Frequencies  
## rotacion$Cargo  
## Type: Character  
## 
##                                 Freq   % Valid   % Total
## ----------------------------- ------ --------- ---------
##        Director_Investigación     80      5.44      5.44
##          Director_Manofactura    145      9.86      9.86
##              Ejecutivo_Ventas    326     22.18     22.18
##                       Gerente    102      6.94      6.94
##       Investigador_Cientifico    292     19.86     19.86
##              Recursos_Humanos     52      3.54      3.54
##           Representante_Salud    131      8.91      8.91
##          Representante_Ventas     83      5.65      5.65
##           Tecnico_Laboratorio    259     17.62     17.62
##                          <NA>      0                0.00
##                         Total   1470    100.00    100.00
lbs=unique(rotacion$Cargo)
pct=round(t/sum(t)*100)
labs=paste(lbs, pct)
labs=paste(labs, "%", sep = " ") 
pie(t, labels=labs)

Estado civil

t=table(rotacion$Estado_Civil)
summarytools::freq(rotacion$Estado_Civil, cumul = FALSE)
## Frequencies  
## rotacion$Estado_Civil  
## Type: Character  
## 
##                    Freq   % Valid   % Total
## ---------------- ------ --------- ---------
##           Casado    673     45.78     45.78
##       Divorciado    327     22.24     22.24
##          Soltero    470     31.97     31.97
##             <NA>      0                0.00
##            Total   1470    100.00    100.00
lbs=unique(rotacion$Estado_Civil)
pct=round(t/sum(t)*100)
labs=paste(lbs, pct)
labs=paste(labs, "%", sep = " ") 
pie(t, labels=labs)

Horas extra

t=table(rotacion$Horas_Extra)
summarytools::freq(rotacion$Horas_Extra, cumul = FALSE)
## Frequencies  
## rotacion$Horas_Extra  
## Type: Character  
## 
##               Freq   % Valid   % Total
## ----------- ------ --------- ---------
##          No   1054     71.70     71.70
##          Si    416     28.30     28.30
##        <NA>      0                0.00
##       Total   1470    100.00    100.00
lbs=unique(rotacion$Horas_Extra)
pct=round(t/sum(t)*100)
labs=paste(lbs, pct)
labs=paste(labs, "%", sep = " ") 
pie(t, labels=labs)

Análisis de Atributos Cualitativos Ordinales

En este grupo se encuentran las variables: educación, satisfacción ambiental, rendimiento laboral y equilibrio trabajo vida.

Educación

t=table(rotacion$Educación)
summarytools::freq(rotacion$Educación)
## Frequencies  
## rotacion$Educación  
## Type: Numeric  
## 
##               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
##           1    170     11.56          11.56     11.56          11.56
##           2    282     19.18          30.75     19.18          30.75
##           3    572     38.91          69.66     38.91          69.66
##           4    398     27.07          96.73     27.07          96.73
##           5     48      3.27         100.00      3.27         100.00
##        <NA>      0                               0.00         100.00
##       Total   1470    100.00         100.00    100.00         100.00
ev=table(rotacion$Educación)
names(ev)=c("1","2","3","4","5")
barplot(ev, 
        main = "Nivel de educación",
        las=1 )

Satisfacción ambiental

t=table(rotacion$Satisfacción_Ambiental)
summarytools::freq(rotacion$Satisfacción_Ambiental)
## Frequencies  
## rotacion$Satisfacción_Ambiental  
## Type: Numeric  
## 
##               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
##           1    284     19.32          19.32     19.32          19.32
##           2    287     19.52          38.84     19.52          38.84
##           3    453     30.82          69.66     30.82          69.66
##           4    446     30.34         100.00     30.34         100.00
##        <NA>      0                               0.00         100.00
##       Total   1470    100.00         100.00    100.00         100.00
ev=table(rotacion$Satisfacción_Ambiental)
names(ev)=c("1","2","3","4")
barplot(ev, 
        main = "Satisfacción Ambiental",
        las=1 )

Rendimiento laboral

t=table(rotacion$Rendimiento_Laboral)
summarytools::freq(rotacion$Rendimiento_Laboral)
## Frequencies  
## rotacion$Rendimiento_Laboral  
## Type: Numeric  
## 
##               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
##           3   1244     84.63          84.63     84.63          84.63
##           4    226     15.37         100.00     15.37         100.00
##        <NA>      0                               0.00         100.00
##       Total   1470    100.00         100.00    100.00         100.00
ev=table(rotacion$Rendimiento_Laboral)
names(ev)=c("3","4")
barplot(ev, 
        main = "Rendimiento Laboral",
        las=1 )

Equilibrio trabajo vida

t=table(rotacion$Equilibrio_Trabajo_Vida)
summarytools::freq(rotacion$Equilibrio_Trabajo_Vida)
## Frequencies  
## rotacion$Equilibrio_Trabajo_Vida  
## Type: Numeric  
## 
##               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
##           1     80      5.44           5.44      5.44           5.44
##           2    344     23.40          28.84     23.40          28.84
##           3    893     60.75          89.59     60.75          89.59
##           4    153     10.41         100.00     10.41         100.00
##        <NA>      0                               0.00         100.00
##       Total   1470    100.00         100.00    100.00         100.00
ev=table(rotacion$Equilibrio_Trabajo_Vida)
names(ev)=c("1","2","3","4")
barplot(ev, 
        main = "Rendimiento Laboral",
        las=1 )

Análisis de Atributos Cuantitativos Discretos

En este grupo se encuentran las variables: Edad, distancia casa, trabajos anteriores, años de experiencia, capacitaciones, antigüedad, antigüedad cargo, años última promoción y años a cargo con mismo jefe.

Edad

hist(rotacion$Edad, main = "Histograma de Edad", xlab = "Edad")

Distancia casa

hist(rotacion$Distancia_Casa, main = "Histograma de Distancia Casa", xlab = "Distancia Casa")

Trabajos anteriores

hist(rotacion$Trabajos_Anteriores, main = "Histograma de Trabajos Anteriores", xlab = "Trabajos Anteriores")

Años de experiencia

hist(rotacion$Años_Experiencia, main = "Histograma de Años Experiencia", xlab = "Años Experiencia")

Capacitaciones

hist(rotacion$Capacitaciones, main = "Histograma de Capacitaciones", xlab = "Capacitaciones")

Antigüedad

hist(rotacion$Antigüedad, main = "Histograma de Antigüedad", xlab = "Antigüedad")

Antigüedad cargo

hist(rotacion$Antigüedad_Cargo, main = "Histograma de Antigüedad Cargo", xlab = "Antigüedad Cargo")

Años última promoción

hist(rotacion$Años_ultima_promoción, main = "Histograma de Años última promoción", xlab = "Años última promoción")

Años a cargo conmismo jefe

hist(rotacion$Años_acargo_con_mismo_jefe, main = "Histograma de Años a cargo con mismo jefe", xlab = "Años a cargo con mismo jefe")

Análisis de Atributos Cuantitativos Continuos

En este grupo se encuentran las variables: Ingreso mensual y porcentaje aumento salarial.

Ingreso mensual

summarytools::descr(rotacion$Ingreso_Mensual)
## Descriptive Statistics  
## rotacion$Ingreso_Mensual  
## N: 1470  
## 
##                     Ingreso_Mensual
## ----------------- -----------------
##              Mean           6502.93
##           Std.Dev           4707.96
##               Min           1009.00
##                Q1           2911.00
##            Median           4919.00
##                Q3           8380.00
##               Max          19999.00
##               MAD           3260.24
##               IQR           5468.00
##                CV              0.72
##          Skewness              1.37
##       SE.Skewness              0.06
##          Kurtosis              0.99
##           N.Valid           1470.00
##         Pct.Valid            100.00
boxplot(rotacion$Ingreso_Mensual,  xlab = "Ingreso mensual", ylab = "Valor en USD", 
        las=1)

Porcentaje aumento salarial

summarytools::descr(rotacion$Porcentaje_aumento_salarial)
## Descriptive Statistics  
## rotacion$Porcentaje_aumento_salarial  
## N: 1470  
## 
##                     Porcentaje_aumento_salarial
## ----------------- -----------------------------
##              Mean                         15.21
##           Std.Dev                          3.66
##               Min                         11.00
##                Q1                         12.00
##            Median                         14.00
##                Q3                         18.00
##               Max                         25.00
##               MAD                          2.97
##               IQR                          6.00
##                CV                          0.24
##          Skewness                          0.82
##       SE.Skewness                          0.06
##          Kurtosis                         -0.31
##           N.Valid                       1470.00
##         Pct.Valid                        100.00
boxplot(rotacion$Porcentaje_aumento_salarial,  xlab = "Porcentaje aumento salarial", ylab = "%", 
        las=1)

3. Análisis bivariado

Se realiza análisis de las diferentes variables con respecto a la variable respuesta de Rotación. se realiza en primera instancia la codificación de la variable respuesta.

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

Análisis bivariado para variables categóricas

Se crea primero una lista de variables categóricas

categorical_variables <- names(rotacion)[sapply(rotacion, is.factor) | sapply(rotacion, is.character)]
categorical_variables 
## [1] "Viaje de Negocios" "Departamento"      "Campo_Educación"  
## [4] "Genero"            "Cargo"             "Estado_Civil"     
## [7] "Horas_Extra"

Se crea una lista vacía para guardar los resultados del test chi-square

cramers_v <- numeric(length(categorical_variables))

Se aplica el loop para las variables categóricas

for (i in seq_along(categorical_variables)) {
    # se crea tabla de contingencia
    tabla_contingencia <- table(rotacion$Rotación, rotacion[[categorical_variables[i]]])
    
    # Calculate chi-square test
    chi_square_test <- chisq.test(tabla_contingencia)
    
    # Se calcula Cramer's V
    cramers_v[i] <- sqrt(chi_square_test$statistic / (sum(tabla_contingencia) * (min(nrow(tabla_contingencia), ncol(tabla_contingencia)) - 1)))
}
## Warning in chisq.test(tabla_contingencia): Chi-squared approximation may be
## incorrect

Se visualizan los resultados teniendo en cuenta que valores mayores indican mayor nivel de asociación

cramers_v
## [1] 0.12825998 0.08569844 0.10440852 0.02756522 0.24214216 0.17721135 0.24406464
categorical_variables
## [1] "Viaje de Negocios" "Departamento"      "Campo_Educación"  
## [4] "Genero"            "Cargo"             "Estado_Civil"     
## [7] "Horas_Extra"

Según estos resultados las variables categóricas que tienen mayor nivel de asociación con la rotación son: Las horas extra, el cargo y los viajes de negocio.

Análisis bivariado para variables numéricas

Se crea primero una lista de variables numéricas

numerical_variables <- names(rotacion)[-1][sapply(rotacion[-1], is.numeric)]
numerical_variables 
##  [1] "Edad"                        "Distancia_Casa"             
##  [3] "Educación"                   "Satisfacción_Ambiental"     
##  [5] "Satisfación_Laboral"         "Ingreso_Mensual"            
##  [7] "Trabajos_Anteriores"         "Porcentaje_aumento_salarial"
##  [9] "Rendimiento_Laboral"         "Años_Experiencia"           
## [11] "Capacitaciones"              "Equilibrio_Trabajo_Vida"    
## [13] "Antigüedad"                  "Antigüedad_Cargo"           
## [15] "Años_ultima_promoción"       "Años_acargo_con_mismo_jefe"

Se crea una lista vacía para guardar los resultados de coeficientes de correlación

correlation_coefficients <- numeric(length(numerical_variables))

Se aplica el loop para las variables numéricas

for (i in seq_along(numerical_variables)) {
    correlation_coefficients[i] <- cor(rotacion[[numerical_variables[i]]], as.numeric(rotacion$Rotación))
}

Se realiza procedimiento para obtener los coeficientes de correlación absolutos más significativos de manera ordenada

abs_correlation_coefficients <- abs(correlation_coefficients)
sorted_indices <- order(abs_correlation_coefficients, decreasing = TRUE)
sorted_numerical_variables <- numerical_variables[sorted_indices]
for (i in seq_along(sorted_indices)) {
  cat("Absolute Value:", abs_correlation_coefficients[sorted_indices[i]], "\tVariable:", sorted_numerical_variables[i], "\n")
}
## Absolute Value: 0.1710632    Variable: Años_Experiencia 
## Absolute Value: 0.160545     Variable: Antigüedad_Cargo 
## Absolute Value: 0.1598396    Variable: Ingreso_Mensual 
## Absolute Value: 0.1592278    Variable: Edad 
## Absolute Value: 0.1561993    Variable: Años_acargo_con_mismo_jefe 
## Absolute Value: 0.1343922    Variable: Antigüedad 
## Absolute Value: 0.1034811    Variable: Satisfación_Laboral 
## Absolute Value: 0.103369     Variable: Satisfacción_Ambiental 
## Absolute Value: 0.07792358   Variable: Distancia_Casa 
## Absolute Value: 0.06393905   Variable: Equilibrio_Trabajo_Vida 
## Absolute Value: 0.0594778    Variable: Capacitaciones 
## Absolute Value: 0.04349374   Variable: Trabajos_Anteriores 
## Absolute Value: 0.03301878   Variable: Años_ultima_promoción 
## Absolute Value: 0.03137282   Variable: Educación 
## Absolute Value: 0.0134782    Variable: Porcentaje_aumento_salarial 
## Absolute Value: 0.002888752  Variable: Rendimiento_Laboral

Según estos resultados las variables numéricas que tienen mayor nivel de asociación con la rotación son: Años de experiencia, antigüedad en el cargo y el ingreso mensual.

Comparación de resultados con las hipótesos planteadas en la selección de variables

Según los resultados obtenidos de los análisis bivariados, las 3 variables categóricas seleccionadas fueron las 3 variables con mayor grado de asociación con la variable respuesta. Para el caso de las variables numéricas, dos de las variables seleccionadas (ingrso mensual y años de experiencia) se encuentran entre las 3 variables con mayor coeficiente de correlación. Según los resultados del análisis bivariado, la variable antigüedad en el cargo se encontraba entre las 3 primeras respecto al mayor grado de asociación. La variable que se escogió en su lugar fue la de satisfacción laboral, la cual obtuvo el octavo lugar entre las variables numéricas.

4. Estimación del modelo

se crea el modelo de regresión logística usando las 6 variables seleccionadas.

modeloRotacion <- glm(Rotación ~ Cargo + `Viaje de Negocios` + Horas_Extra + Ingreso_Mensual + Años_Experiencia + Satisfación_Laboral, data = rotacion, family = binomial)

Se visualizan los resultados del modelo

summary(modeloRotacion)
## 
## Call:
## glm(formula = Rotación ~ Cargo + `Viaje de Negocios` + Horas_Extra + 
##     Ingreso_Mensual + Años_Experiencia + Satisfación_Laboral, 
##     family = binomial, data = rotacion)
## 
## Coefficients:
##                                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                  -2.608e+00  1.021e+00  -2.555 0.010621 *  
## CargoDirector_Manofactura     1.155e+00  8.857e-01   1.304 0.192363    
## CargoEjecutivo_Ventas         2.237e+00  8.381e-01   2.669 0.007615 ** 
## CargoGerente                  9.996e-01  8.701e-01   1.149 0.250651    
## CargoInvestigador_Cientifico  1.988e+00  9.264e-01   2.146 0.031873 *  
## CargoRecursos_Humanos         2.573e+00  9.551e-01   2.694 0.007070 ** 
## CargoRepresentante_Salud      1.187e+00  8.924e-01   1.330 0.183449    
## CargoRepresentante_Ventas     3.279e+00  9.549e-01   3.434 0.000596 ***
## CargoTecnico_Laboratorio      2.721e+00  9.253e-01   2.940 0.003277 ** 
## `Viaje de Negocios`No_Viaja  -1.337e+00  3.518e-01  -3.800 0.000145 ***
## `Viaje de Negocios`Raramente -7.002e-01  1.819e-01  -3.850 0.000118 ***
## Horas_ExtraSi                 1.533e+00  1.614e-01   9.500  < 2e-16 ***
## Ingreso_Mensual               5.401e-05  5.180e-05   1.043 0.297122    
## Años_Experiencia             -5.950e-02  1.844e-02  -3.227 0.001253 ** 
## Satisfación_Laboral          -3.338e-01  7.011e-02  -4.761 1.93e-06 ***
## ---
## 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: 1068.4  on 1455  degrees of freedom
## AIC: 1098.4
## 
## Number of Fisher Scoring iterations: 6

Según los resultados obtenidos los parámetros que presentan una mayor significancia en la rotación son: La existencia de horas extra, la evaluación de la satisfacción laboral, que se tengan viajes de negocio raramente, que no se tengan viajes de negocio y el cargo de representante de ventas.

Los parámetros que le seguirían en orden de significancia serían: los años de experiencia, el cargo de técnico de laboratorio, el cargo de recursos humanos y el cargo de ejecutivo de ventas.

A partir de los coeficientes de los parámetros con mayor significancia se tendrían las siguientes interpretaciones:

Para el parámetro de la existencia de horas extra manteniendo todas las demás variables constantes se tiene que

exp(1.533)
## [1] 4.632052

lo cual significa que cuando una persona trabaja horas extra tiene 0.46 veces más probabilidad de realizar rotación.

En el caso del parámetro de la evaluación de satisfacción laboral si se tienen todas las dempas variables constantes, se tiene que

exp(-3.338e-01)
## [1] 0.716197

lo cual significa que por cada unidad de cambio en la evaluación de satisfacción laboral el trabajador tiene 0.71 veces más probabilidad de realizar rotación.

Para los parámetros de tener vaijes de negocio raramente o no tener viajes de negocio, si se mantenien todas las demás variables constantes se tiene que

exp(-7.002e-01)
## [1] 0.496486
exp(-1.337)
## [1] 0.2626324

Esto significa que los individuos que raramente viajan tienen 0.49 veces más probabilidad de tener rotación y los que no viajan 0.26 veces más probabilidad.

Para el caso del cargo de representante de ventas si se mantienen todas las demás variables constantes se tiene que

exp(3.279)
## [1] 26.54921

Lo cual significa que un individuo que tenga este cargo tiene 26.54 veces más probabilidad de cambiar de cargo.

5. Evaluación

Se dividen los datos en dos conjuntos, entrenamiento y prueba train con el 60% de los registros test con el 40% de los registros

ntrain <- nrow(rotacion)*0.6
ntest <- nrow(rotacion)*0.4
set.seed(123)
index_train<-sample(1:nrow(rotacion),size = ntrain)
train<-rotacion[index_train,]  # muestra de entrenamiento
test<-rotacion[-index_train,]  # muestra de prueba

Se crea el modelo con los datos de entrenamiento y se generan los valores pronosticados con los datos de prueba

modeloRotacion2 <- glm(Rotación ~ Cargo + `Viaje de Negocios` + Horas_Extra + Ingreso_Mensual + Años_Experiencia + Satisfación_Laboral, data = train, family = binomial)
valor_pronosticado <- predict(modeloRotacion2, test, type = "response")

Se genera la curva ROC y se estima el AUC

curva_ROC <- roc(test$Rotación, valor_pronosticado)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
auc<- round(auc(curva_ROC, levels =c(0,1), direction = "<"),4) 

ggroc(curva_ROC, colour = "#FF7F00", size=1)+
ggtitle(paste0("Curva ROC ", "(AUC = ", auc, ")"))+
xlab("Especificidad")+
ylab("Sensibilidad")  

El área comprendida entre la curva ROC y la diagonal del cuadrado (AUC = 0.7787), indica un ajuste aceptable del modelo de predicción.

6. Predicciones

Se crea un individuo hipotético con los siguientes datos:

new_sample <- data.frame(
  Edad = 31,
  `Viaje de Negocios` = "Raramente",
  Departamento = "IyD",
  Distancia_Casa = 8,
  Educación = 4,
  Campo_Educación = "Ciencias",
  Satisfacción_Ambiental = 3,
  Genero = "F",
  Cargo = "Director_Manofactura",
  Satisfación_Laboral = 4,
  Estado_Civil = "Soltero",
  Ingreso_Mensual = 4424,
  Trabajos_Anteriores = 1,
  Horas_Extra = "No",
  Porcentaje_aumento_salarial = 13,
  Rendimiento_Laboral = 3,
  Años_Experiencia = 16,
  Capacitaciones = 2,
  Equilibrio_Trabajo_Vida = 3,
  Antigüedad = 5,
  Antigüedad_Cargo = 3,
  Años_ultima_promoción = 4,
  Años_acargo_con_mismo_jefe = 3
)
names(new_sample)[which(names(new_sample) == "Viaje.de.Negocios")] <- "Viaje de Negocios"
new_sample
##   Edad Viaje de Negocios Departamento Distancia_Casa Educación Campo_Educación
## 1   31         Raramente          IyD              8         4        Ciencias
##   Satisfacción_Ambiental Genero                Cargo Satisfación_Laboral
## 1                      3      F Director_Manofactura                   4
##   Estado_Civil Ingreso_Mensual Trabajos_Anteriores Horas_Extra
## 1      Soltero            4424                   1          No
##   Porcentaje_aumento_salarial Rendimiento_Laboral Años_Experiencia
## 1                          13                   3               16
##   Capacitaciones Equilibrio_Trabajo_Vida Antigüedad Antigüedad_Cargo
## 1              2                       3          5                3
##   Años_ultima_promoción Años_acargo_con_mismo_jefe
## 1                     4                          3

Se predice la probabilidad de rotación del nuevo registro de individuo

predicted_probabilities <- predict(modeloRotacion, newdata = new_sample, type = "response")
predicted_probabilities
##         1 
## 0.0147515

La probabilidad de que un individuo hipotético con los datos ingresados tenga rotación es del 0.014, bastante bajo debido a que campos como el de horas extra se registró con un “No”. Un punto de corte o umbral para decidir cuando se debería realizar una intervención podría ser con una probabilidad de 0.5, es decir, cuando se tenga >= 0.5 se recomienda realizar intervención.

7. Conclusiones

Teniendo en consideración las variables significativas obtenidas en el análisis bivariado del punto 3, se plantea la siguiente estrategia para disminuir la rotación en la empresa: Disminuir las horas extra mediante la contratación de más personal en modalidades de contratación que no generen mayor carga prestacional para la empresa, realizar más actividades por fuera de la oficina para los empleados que no deben viajar constantemente, generar incentivos económicos para los empleados con ingresos mensuales más bajos, incentivar a los empleados con tiempos largos en la empresa o en el mismo cargo mediante bonificaciones por resutlados y buen desempeño.