##Modelo logístico para Rotación de Empleados
## Warning: package 'table1' was built under R version 4.1.3
##
## Attaching package: 'table1'
## The following objects are masked from 'package:base':
##
## units, units<-
## Warning: package 'ggplot2' was built under R version 4.1.3
## Warning in register(): Can't find generic `scale_type` in package ggplot2 to
## register S3 method.
## # A tibble: 1,470 x 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
## 7 No 59 Raramente IyD 3 3
## 8 No 30 Raramente IyD 24 1
## 9 No 38 Frecuentemente IyD 23 3
## 10 No 36 Raramente IyD 27 3
## # ... with 1,460 more rows, and 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>, ...
##Paso 1. Variables e hipótesis
#Hipotesis
#a. Distancia_Casa: Los que viven mas cerca rotan menos. #b. Trabajos_Anteriores: Los que menos trabajos han tenido rotan menos. #c. Años_Experiencia: Los que mas años de experiencia tienen rotan menos. #d. Antigüedad_Cargo: Los mas antiguos en el cargo rotan menos que los demás.
##Paso 2. Exploracion de Datos
table1(~Rotación+Distancia_Casa+Trabajos_Anteriores+Años_Experiencia+Antigüedad_Cargo,family = "binomial",data = Datos)
| Overall (N=1470) |
|
|---|---|
| Rotación | |
| No | 1233 (83.9%) |
| Si | 237 (16.1%) |
| Distancia_Casa | |
| Mean (SD) | 9.19 (8.11) |
| Median [Min, Max] | 7.00 [1.00, 29.0] |
| Trabajos_Anteriores | |
| Mean (SD) | 2.69 (2.50) |
| Median [Min, Max] | 2.00 [0, 9.00] |
| Años_Experiencia | |
| Mean (SD) | 11.3 (7.78) |
| Median [Min, Max] | 10.0 [0, 40.0] |
| Antigüedad_Cargo | |
| Mean (SD) | 4.23 (3.62) |
| Median [Min, Max] | 3.00 [0, 18.0] |
##Paso 3. Modelo Logístico
Datos$y=as.numeric(Datos$Rotación=="Si")
Datos$y
## [1] 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 1 0 1
## [38] 0 0 0 0 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
## [75] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0
## [112] 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0
## [149] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0
## [186] 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0
## [223] 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
## [260] 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0
## [297] 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0
## [334] 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 1 0
## [371] 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
## [408] 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0 1
## [445] 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1
## [482] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0
## [519] 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0
## [556] 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1
## [593] 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [630] 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 1 0 0
## [667] 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 1 0 0
## [704] 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0
## [741] 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
## [778] 1 0 1 1 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1
## [815] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 0
## [852] 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [889] 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0
## [926] 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0
## [963] 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0
## [1000] 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0
## [1037] 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0
## [1074] 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
## [1111] 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
## [1148] 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
## [1185] 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
## [1222] 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1
## [1259] 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0
## [1296] 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
## [1333] 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0
## [1370] 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0
## [1407] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
## [1444] 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
modelo=glm(y~Distancia_Casa+Trabajos_Anteriores+Años_Experiencia+Antigüedad_Cargo,family = "binomial",data = Datos)
summary(modelo)
##
## Call:
## glm(formula = y ~ Distancia_Casa + Trabajos_Anteriores + Años_Experiencia +
## Antigüedad_Cargo, family = "binomial", data = Datos)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.0497 -0.6558 -0.5058 -0.3158 3.0112
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.196063 0.168538 -7.097 1.28e-12 ***
## Distancia_Casa 0.028832 0.008678 3.322 0.000892 ***
## Trabajos_Anteriores 0.086763 0.029656 2.926 0.003437 **
## Años_Experiencia -0.069075 0.014315 -4.825 1.40e-06 ***
## Antigüedad_Cargo -0.081917 0.028393 -2.885 0.003912 **
## ---
## 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: 1216.2 on 1465 degrees of freedom
## AIC: 1226.2
##
## Number of Fisher Scoring iterations: 5
##Paso 4. Evaluar el poder predictivo del modelo
#por ejemplo: cual seria la probabilidad de rotar de un emplead@ #con distancia de la casa al trabajo 7 km, 2 trabajos anteriores, 10 años de #experiencia, 3 años de antiguedad en el mismo cargo
predict(modelo,list(Distancia_Casa=7,Trabajos_Anteriores=2,Años_Experiencia=10,Antigüedad_Cargo=3), type = "response")
## 1
## 0.1471389
proba_rotar=modelo$fitted.values
rotar_modelo=proba_rotar>0.16
rotal_real=Datos$Rotación
mc=table(rotal_real,rotar_modelo)
mc
## rotar_modelo
## rotal_real FALSE TRUE
## No 680 553
## Si 70 167
(mc[1,1]+mc[2,2]/sum(mc)*100)
## [1] 691.3605
library(vcd)
## Warning: package 'vcd' was built under R version 4.1.3
## Loading required package: grid
mosaic(mc, shade = T, colorize = T,
gp = gpar(fill = matrix(c("#447270", "#f6b915", "#f6b915", "#447270"), 2, 2)))
##Optimizar el corte de probabilidad para clasificar
calc_bien=function(corte){
rotar_modelo=proba_rotar>corte
rotal_real=Datos$Rotación
mc=table(rotal_real,rotar_modelo)
mc
bien=(mc[1,1]+mc[2,2])/sum(mc)*100
return(bien)
}
calc_bien(0.33)
## [1] 83.87755
cortes=seq(0.01,0.4,0.01)
cortes
## [1] 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15
## [16] 0.16 0.17 0.18 0.19 0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.30
## [31] 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.40
bien_clasificados=sapply(cortes,calc_bien)
plot(cortes,bien_clasificados, type = "b")