Importación de la data

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, …

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.

Se seleccionaron las siguientres variables categóricas:

Para las variables categóricas se seleccionaron:

2. Análisis univariado: Realiza un análisis univariado (caracterización) de la información contenida en la base de datos rotacion.

# Variable categórica: Departamento
rotacion %>% ggplot(aes(x=Departamento)) + geom_bar() + theme_minimal() + labs(title="Distribución de Empleados por Departamento")

# Variable categórica: Horas Extra
rotacion %>% ggplot(aes(x=Horas_Extra)) + geom_bar() + theme_minimal() + labs(title="Distribución de Empleados por Horas Extra")

## Variable categórica: Estado_Civil
rotacion %>% ggplot(aes(x=Estado_Civil)) + geom_bar() + theme_minimal() + labs(title="Distribución de Empleados por Estado Civil")

# Variable cuantitativa: Edad
rotacion %>% ggplot(aes(x=Edad)) + geom_histogram(bins=30) + theme_minimal() + labs(title="Distribución de la Edad de los Empleados")

## Variable categórica: Satisfacción Laboral
rotacion %>% ggplot(aes(x=Satisfación_Laboral)) + geom_bar() + theme_minimal() + labs(title="Distribución Satisfacción Laboral de los Empleados")

# Variable cuantitativa: Antiguedad en el cargo
rotacion %>% ggplot(aes(x=Antigüedad_Cargo)) + geom_bar() + theme_minimal() + labs(title="Distribución Antiguedad en el Cargo Actual")

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.

# Convertir la variable rotación a numérica
rotacion$Rotación <- ifelse(rotacion$Rotación == "Si", 1, 0)

###Variables categóricas

g1 = PlotXTabs2(rotacion,`Departamento`, Rotación , plottype = "percent")
g2 = PlotXTabs2(rotacion, Horas_Extra, Rotación , plottype = "percent")
g3 = PlotXTabs2(rotacion, Estado_Civil, Rotación , plottype = "percent")

###Variables cuantitativas

g4 = ggplot(rotacion,aes(x=Rotación,y= Edad,fill=Rotación))+geom_boxplot()+theme_gray()
g5 = PlotXTabs2(rotacion, Satisfación_Laboral, Rotación , plottype = "percent")
g6 = ggplot(rotacion,aes(x=Rotación,y= Antigüedad_Cargo,fill=Rotación))+geom_boxplot()+theme_gray()
# Rotacion ~ Departamento
g1

Se observa que la rotación de empleados varía según el departamento al que pertenecen:

Se valida la hipótesis donde los empleados en áreas como IyD tiene menor probailidad de rotación con respecto al área de ventas debido al mayor estrés que se puede manejar en dicha área.

# Rotacion ~ Horas Extra
g2

Se valida la hipótesis de que para los empleados que realizan horas extra tienen mayor probabilidades de rotación con respecto a los que no (31% vs 10%) realizan horas extra.

# Rotacion ~ Estado civil
g3

Se valida la hipótesis de que aquellos empleados que son solteros tienen mayores probabilidades de rotación con respecto a los divorciados y los casados.

# Rotacion ~ Edad
ggplotly(g4)
## Warning: Continuous x aesthetic
## ℹ did you forget `aes(group = ...)`?
## Warning: The following aesthetics were dropped during statistical transformation: fill
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?

Se valida la hipótesis de que los empleados más jovenes son los que mas rotaron (mediana de 32 años) en comparación con los empleados que no rotaron (mediana 36 años).

# Rotacion ~ Satisfacción laboral
g5

Se valida la hipótesis para los empleados con bajos niveles de satisfacción tienen más probabilidades de rotación con respecto a los de más alto nivel de satisfacción.

# Rotacion ~ Antiguedad en el cargo
ggplotly(g6)
## Warning: Continuous x aesthetic
## ℹ did you forget `aes(group = ...)`?
## Warning: The following aesthetics were dropped during statistical transformation: fill
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?

Se valida la hipótesis de que los empleados con menor tiempo de antigudad tienen mayor 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.

# Preparar los datos para el modelo
datos_modelo <- model.matrix(Rotación ~ Departamento + Estado_Civil + Horas_Extra + Edad + Satisfación_Laboral + Antigüedad_Cargo, data=rotacion)[,-1]
rotacion <- rotacion$Rotación

# Ajustar el modelo de regresión logística
modelo <- glm(rotacion ~ ., data=as.data.frame(datos_modelo), family=binomial)
summary(modelo)
## 
## Call:
## glm(formula = rotacion ~ ., family = binomial, data = as.data.frame(datos_modelo))
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -1.8693  -0.5689  -0.3955  -0.2404   3.1254  
## 
## Coefficients:
##                         Estimate Std. Error z value Pr(>|z|)    
## (Intercept)             0.119459   0.391561   0.305 0.760301    
## DepartamentoRH          0.611790   0.358157   1.708 0.087606 .  
## DepartamentoVentas      0.561205   0.165616   3.389 0.000703 ***
## Estado_CivilDivorciado -0.354693   0.231111  -1.535 0.124850    
## Estado_CivilSoltero     0.816245   0.171842   4.750 2.03e-06 ***
## Horas_ExtraSi           1.518710   0.160118   9.485  < 2e-16 ***
## Edad                   -0.041991   0.009183  -4.573 4.82e-06 ***
## Satisfación_Laboral    -0.330189   0.069712  -4.736 2.17e-06 ***
## Antigüedad_Cargo       -0.123958   0.026291  -4.715 2.42e-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: 1077.0  on 1461  degrees of freedom
## AIC: 1095
## 
## Number of Fisher Scoring iterations: 5

Los resultados del modelo de logistico son los siguientes:

5. Evaluación: Evaluar el poder predictivo del modelo con base en la curva ROC y el AUC.

# Predicciones
predicciones <- predict(modelo, type="response")

# Calcular la curva ROC y el AUC
roc_obj <- roc(rotacion, predicciones)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj, main="Curva ROC para la Rotación de Empleados", col = "blue", lwd = 2)

auc <- auc(roc_obj)
cat("El AUC es:", auc)
## El AUC es: 0.7796223

El modelo muestra un AUC de 0.7796, lo que indica una capacidad razonable para distinguir entre casos positivos (rotación de empleados) y negativos (no rotación). Un AUC de 0.5 indica una predicción aleatoria, mientras que un valor más cercano a 1 sugiere una mejor capacidad de discriminación del modelo.

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

# nuevo empleado hipotético
nuevo_empleado <- data.frame(
  Satisfación_Laboral = 3,
  Edad = 33, 
  DepartamentoRH = 0,
  DepartamentoVentas = 1,
  Horas_ExtraSi = 0, 
  Estado_CivilSoltero = 0,
  Estado_CivilDivorciado = 1,
  Antigüedad_Cargo = 7
  
)

# Escalar los datos del individuo hipotético
nuevo_empleado_modelo <- predict(modelo, nuevo_empleado)

# Definir un corte, por ejemplo, 0.5
intervenir <- ifelse(nuevo_empleado_modelo > 0.5, "Intervenir", "No Intervenir")
intervenir
##               1 
## "No Intervenir"

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

Basándonos en los resultados del modelo de regresión logística, podemos identificar las variables que tienen un impacto significativo en la probabilidad de rotación de empleados. Estas variables incluyen el departamento al que pertenece el empleado, el estado civil, si realiza horas extras regularmente, la edad, el nivel de satisfacción laboral y la antigüedad en el cargo actual.

Para disminuir la rotación en la empresa, se pueden implementar las siguientes estrategias: