ACTIVIDAD 3: Problema: Rotación de cargo

Se cargara la informacion para realizar esta actividad

library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
rotacion<- read_excel("C:/Users/Mindlabs/Desktop/MAESTRIA_CIENCIA DE DATOS/Semestre_2/Modelos Estadísticos para la toma de decisiones/ACTIVIDAD_3/mi_archivo.xlsx")

1. Selección de variables

A continuacion se selecionaran 3 varables cualiativa y 3 cuantitativas donde se cree que seran ideales para explicar la variable rotacion

2. PUNTO. Análisis univariado

# Asegúrate de que las librerías necesarias están instaladas y luego cárgalas
if (!requireNamespace("knitr", quietly = TRUE)) install.packages("knitr")
library(knitr)
## Warning: package 'knitr' was built under R version 4.3.3
# Crear una tabla de distribución de la rotación
tabla_1 <- table(rotacion$Rotacion)

# Usar kable para crear una tabla formateada
tabla_formateada <- kable(tabla_1, caption = "Distribución rotación por Empleado")

# Imprimir la tabla formateada
print(tabla_formateada)
## 
## 
## Table: Distribución rotación por Empleado
## 
## |Var1 | Freq|
## |:----|----:|
## |No   | 1233|
## |Si   |  237|
datos_1 <- c(0.84, 0.16)
categorías <- c("NO", "SI")
colores <- c("red", "blue")
pie(datos_1, labels = categorías, col = colores, main = "Rotación Empleados")

# Si 'Rotación' es un factor o texto y las comillas son incorrectas
#rotacion <- rotacion %>%
 # mutate(Rotación = recode(Rotación, `Si` = 1, `No` = 0))

#rotacion$Rotación

La mayoría de los empleados no han cambiado de cargo, lo que podría interpretarse como una señal de estabilidad laboral dentro de la organización.

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
library(ggpubr)
## Warning: package 'ggpubr' was built under R version 4.3.3
g1 = ggplot(rotacion, aes(x = Edad)) + geom_histogram() + theme_gray()
g2 = ggplot(rotacion, aes(x = Ingreso_Mensual)) + geom_histogram() + theme_gray()
g3 = ggplot(rotacion, aes(x = Distancia_Casa)) + geom_histogram() + theme_gray()
g4 = ggplot(rotacion, aes(x = `Viaje de Negocios`)) + geom_bar() + theme_gray()
g5 = ggplot(rotacion, aes(x = Departamento)) + geom_bar() + theme_gray()
g6 = ggplot(rotacion, aes(x = Estado_Civil)) + geom_bar() + theme_gray()

ggarrange(g1, g2, g3, g4, g5, g6, labels = c("A", "B", "C", "D", "E", "F"), ncol = 3, nrow = 2)
## `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`.

La imagen muestra seis histogramas que representan la distribución de seis variables diferentes dentro de una organización. Cada panel (de la A a la F) muestra la frecuencia de los empleados según distintas categorías o valores de cada variable.

Panel A - Edad: La mayoría de los empleados se concentran alrededor de los 30 años, con menos frecuencia a medida que la edad aumenta. Esto podría indicar una fuerza laboral relativamente joven.

Panel B - Ingreso Mensual: Hay una concentración significativa de empleados con ingresos mensuales en el extremo inferior del espectro, disminuyendo a medida que el ingreso aumenta. Esto sugiere que la mayoría de los empleados pueden estar en puestos de nivel de entrada o medio con salarios más bajos.

Panel C - Distancia desde Casa: La mayoría de los empleados vive cerca de su lugar de trabajo, con una distribución que disminuye rápidamente a medida que la distancia aumenta. Esto sugiere que la proximidad al lugar de trabajo es común entre los empleados.

Panel D - Viaje de Negocios: La mayoría de los empleados viajan raramente por negocios, con un número significativamente menor que viaja frecuentemente. Esto puede reflejar la naturaleza del trabajo que no requiere mucho viaje, o una política empresarial de viajes limitados.

Panel E - Departamento: El departamento con más empleados es ‘Ventas’, seguido de ‘RH’ (Recursos Humanos), y menos en ‘IyD’ (Investigación y Desarrollo). Esto podría reflejar una organización con un fuerte enfoque en las ventas o simplemente una estructura organizativa donde hay más personal necesario en estas áreas.

Panel F - Estado Civil: La distribución del estado civil muestra que hay más empleados solteros que casados o divorciados. Esto puede tener implicaciones en las políticas de recursos humanos y beneficios relacionados con la familia.

Implicaciones para la Rotación: Estas distribuciones pueden proporcionar insights sobre la rotación si se cruzan con la variable de rotación (no mostrada en los histogramas). Por ejemplo, si la mayoría de los empleados jóvenes o los solteros están rotando, podría indicar una tendencia donde los empleados más jóvenes o solteros buscan más oportunidades o tienen menos ataduras que los hacen quedarse en un solo lugar. La relación entre estas variables y la rotación podría ser explorada más a fondo con análisis adicionales como pruebas de chi-cuadrado o modelos de regresión logística.

3. PUNTO. Análisis bivariado

`Viaje de Negocios`

ggplot(rotacion, aes(x = Estado_Civil, fill = Rotacion, group = Rotacion)) +
  geom_bar() +
  labs(title = "Rotación por Estado civil", 
       x = "Estado cilvil", 
       y = "Conteo") +
  scale_fill_manual(values = c("No" = "#262B37", "Si" = "#2094AA"))

`Viaje de Negocio`

ggplot(rotacion, aes(x =`Viaje de Negocios`, fill = Rotacion, group = Rotacion)) +
  geom_bar() +
  labs(title = "Rotacion por Viaje de Negocios", 
       x = "Viaje de Negocios", 
       y = "Conteo") +
  scale_fill_manual(values = c("No" = "#262B37", "Si" = "#2094AA"))

Departamento

ggplot(rotacion, aes(x =Departamento, fill = Rotacion, group = Rotacion)) +
  geom_bar() +
  labs(title = "Rotacion por Departamento", 
       x = "Departamento", 
       y = "Conteo") +
  scale_fill_manual(values = c("No" = "#262B37", "Si" = "#2094AA"))

Edad

ggplot(rotacion, aes(x = Edad, fill = Rotacion, group = Rotacion)) +
  geom_bar() +
  labs(title = "Rotación por Edad", 
       x = "Edad", 
       y = "Conteo") +
  scale_fill_manual(values = c("No" = "#262B37", "Si" = "#2094AA"))+
  scale_x_continuous(breaks = unique(as.numeric(rotacion$Edad)), labels = unique(rotacion$Edad)) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

Ingreso Mensual

ggplot(rotacion, aes(x = Ingreso_Mensual, fill = Rotacion, group = Rotacion)) +
  labs(title = "Grafico de Densidad Ingreso Mensual - Rotacion")+
  geom_density(alpha = 0.4) + 
  scale_fill_manual(values = c("No" = "#2071E8", "Si" = "#F63E66"))

Distancia de la casa

ggplot(rotacion, aes(x = Distancia_Casa, fill = Rotacion, group = Rotacion)) +
  labs(title = "Grafico de Densidad Distancia a casa - Rotacion")+
  geom_density(alpha = 0.4) + 
  scale_fill_manual(values = c("No" = "#2071E8", "Si" = "#F63E66"))

4. Estimacion del modelo

# Asumiendo que 'datos_rotacion' es tu dataframe y que tienes variables como 'EstadoCivil', 'ViajeNegocios', etc.
rotacion$Rotacion <- factor(rotacion$Rotacion) 

rotacion$Estado_Civil <- factor(rotacion$Estado_Civil)
rotacion$`Viaje de Negocios` <- factor(rotacion$`Viaje de Negocios`)
rotacion$Departamento <- factor(rotacion$Departamento)
# Continúa para cada variable cualitativa

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
rotacion$Estado_Civil <- recode(rotacion$Estado_Civil,
                                     "Casado" = 1,
                                     "Divorciado" = 2,
                                     "Soltero" = 3)
rotacion$`Viaje de Negocios` <- recode(rotacion$`Viaje de Negocios`,
                                     "Frecuentemente" = 1,
                                     "Raramente" = 2,
                                     "No_Viaja" = 3)
rotacion$Departamento <- recode(rotacion$Departamento,
                                     "Ventas" = 1,
                                     "IyD" = 2,
                                     "RH" = 3)
# Continúa para cada categoría y variable cualitativa
rotacion$Rotacion<-recode(rotacion$Rotacion,"Si"=1,"No"=0)
modelo1 <- glm(Rotacion ~ Estado_Civil + `Viaje de Negocios`+Departamento
 +Edad+Ingreso_Mensual+Distancia_Casa,data=rotacion, family = binomial())
summary(modelo1)
## 
## Call:
## glm(formula = Rotacion ~ Estado_Civil + `Viaje de Negocios` + 
##     Departamento + Edad + Ingreso_Mensual + Distancia_Casa, family = binomial(), 
##     data = rotacion)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)          7.477e-01  5.224e-01   1.431 0.152410    
## Estado_Civil         4.008e-01  8.478e-02   4.728 2.27e-06 ***
## `Viaje de Negocios` -6.682e-01  1.381e-01  -4.837 1.32e-06 ***
## Departamento        -3.993e-01  1.439e-01  -2.775 0.005518 ** 
## Edad                -2.734e-02  9.765e-03  -2.799 0.005119 ** 
## Ingreso_Mensual     -1.051e-04  2.525e-05  -4.161 3.16e-05 ***
## Distancia_Casa       2.997e-02  8.798e-03   3.407 0.000657 ***
## ---
## 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: 1176.2  on 1463  degrees of freedom
## AIC: 1190.2
## 
## Number of Fisher Scoring iterations: 5

5 y 6 Evaluacion y predecciones

library(vcd)
## Warning: package 'vcd' was built under R version 4.3.3
## Loading required package: grid

pp1= predict.glm(modelo1, newdata = rotacion, type = "response")
resp = table(rotacion$Rotacion, ifelse(pp1 >0.2, 1, 0), dnn = c("observaciones", "predicciones"))
resp
##              predicciones
## observaciones   0   1
##             0 936 297
##             1  99 138
sum(diag(resp)/sum(resp))
## [1] 0.7306122
library(ROCR)
## Warning: package 'ROCR' was built under R version 4.3.3
prediccion_rotacion= ROCR::prediction(pp1,rotacion$Rotacion)
perf= performance(prediction.obj = prediccion_rotacion, "tpr", "fpr")
plot(perf,xlab = "Specificity", ylab = "Sensitivity", col="red")
abline(a=0, b=1, col="gold")
grid()

Conclusiones

El resumen del modelo de regresión logística y la curva ROC que has proporcionado ofrece varias conclusiones clave sobre la relación entre las variables predictoras y la probabilidad de rotación (si un empleado cambiará de trabajo), así como la capacidad del modelo para predecir correctamente la rotación. Aquí hay algunas conclusiones basadas en la información proporcionada:

  1. Relación de las Variables con la Rotación:

    • Las variables Estado_Civil, Viaje de Negocios, Departamento, Edad, Ingreso_Mensual y Distancia_Casa son estadísticamente significativas en el modelo, lo que implica que tienen un efecto significativo sobre la probabilidad de que un empleado experimente rotación.

    • Los signos de los coeficientes indican la dirección de la relación: por ejemplo, la Edad tiene un coeficiente negativo, lo que sugiere que a mayor edad, es menos probable que los empleados cambien de trabajo, mientras que una mayor Distancia_Casa aumenta la probabilidad de rotación.

  2. Efectividad del Modelo:

    • El modelo parece tener un buen ajuste dado que las variables incluidas son significativas y el AIC proporciona un valor razonable en comparación con un modelo nulo. No obstante, sin un modelo de comparación, no podemos afirmar categóricamente que sea el mejor posible.