##VARIABLES ESCOGIDAS:
CUALITATIVAS:
ESTADO CIVIL: Se espera que una persona soltera tenga menos dificultades para decidir rotar, especialmente con cambio de localidad, que una persona casada.
SATISFACCIÓN LABORAL: Se espera que una persona insatisfecha en su trabajo tienda a rotar con mayor frecuencia que una persona que se encuentra agusto con el mismo.
EQUILIBRIO TRABAJO VS. VIDA: Se espera que una persona que se encuentre en un empleo donde puede distribuir mejor su tiempo entre su vida laboral y personal rote menos.
CUANTITATIVAS:
EDAD: Se espera una relación inversa entre la edad y la rotación en la que a medida que una persona envejece tiende menos a rotar, al querer afrontar menos riesgos.
SALARIO: Se espera que a mayor ingreso se genere una menor rotación. Generando una relación inversa entre estas variables.
ANTIGUEDAD: Se espera que una persona con pocos años en la empresa (menos lazos) tienda a rotar con mayor facilidad que una persona con muchos años en la misma empresa.
ESTADO CIVIL
library(readxl)
datos_rotacion <- read_excel("E:/Users/Diana Torres/Downloads/datos_rotacion.xlsx")
porcentajes1 = as.numeric(round(((prop.table(table(datos_rotacion$Estado_Civil)))*100),2))
porcentajes1
## [1] 45.78 22.24 31.97
etiquetas1 <- c("Casado", "Divorciado", "Soltero")
etiquetas1
## [1] "Casado" "Divorciado" "Soltero"
etiquetas1 = paste(etiquetas1, porcentajes1)
etiquetas1
## [1] "Casado 45.78" "Divorciado 22.24" "Soltero 31.97"
etiquetas1 <- paste(etiquetas1, "%", sep = "")
etiquetas1
## [1] "Casado 45.78%" "Divorciado 22.24%" "Soltero 31.97%"
pie(porcentajes1, etiquetas1,
main = "EMPLEADOS DE LA EMPRESA",
sub = "Composición por ESTADO CIVIL")
SATISFACCIÓN LABORAL
porcentajes2 = as.numeric(round(((prop.table(table(datos_rotacion$Satisfación_Laboral)))*100),2))
porcentajes2
## [1] 19.66 19.05 30.07 31.22
etiquetas2 <- c("Muy Insatisfecho", "Insatisfecho", "Satisfecho", "Muy Satisfecho")
etiquetas2
## [1] "Muy Insatisfecho" "Insatisfecho" "Satisfecho" "Muy Satisfecho"
etiquetas2 = paste(etiquetas2, porcentajes2)
etiquetas2
## [1] "Muy Insatisfecho 19.66" "Insatisfecho 19.05" "Satisfecho 30.07"
## [4] "Muy Satisfecho 31.22"
etiquetas2 <- paste(etiquetas2, "%", sep = "")
etiquetas2
## [1] "Muy Insatisfecho 19.66%" "Insatisfecho 19.05%"
## [3] "Satisfecho 30.07%" "Muy Satisfecho 31.22%"
pie(porcentajes2, etiquetas2,
main = "EMPLEADOS DE LA EMPRESA",
sub = "Estado de Satisfacción")
EQUILIBRIO TRABAJO VIDA
porcentajes3 = as.numeric(round(((prop.table(table(datos_rotacion$Equilibrio_Trabajo_Vida)))*100),2))
porcentajes3
## [1] 5.44 23.40 60.75 10.41
etiquetas3 <- c("Muy descompensado", "Inequilibrado", "Equilibrado","Muy equilibrado")
etiquetas3
## [1] "Muy descompensado" "Inequilibrado" "Equilibrado"
## [4] "Muy equilibrado"
etiquetas3 = paste(etiquetas3, porcentajes3)
etiquetas3
## [1] "Muy descompensado 5.44" "Inequilibrado 23.4" "Equilibrado 60.75"
## [4] "Muy equilibrado 10.41"
etiquetas3 <- paste(etiquetas3, "%", sep = "")
etiquetas3
## [1] "Muy descompensado 5.44%" "Inequilibrado 23.4%"
## [3] "Equilibrado 60.75%" "Muy equilibrado 10.41%"
pie(porcentajes3, etiquetas3,
main = "EMPLEADOS DE LA EMPRESA",
sub = "Equilibrio Vida Vs. Trabajo")
EDAD
promedio = mean(datos_rotacion$Edad)
desviación =sd(datos_rotacion$Edad)
data.frame(promedio,desviación)
## promedio desviación
## 1 36.92381 9.135373
require(ggplot2)
ggplot(datos_rotacion,aes(x=Edad))+geom_histogram(fill="red")+theme_bw()
summary(datos_rotacion$Edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18.00 30.00 36.00 36.92 43.00 60.00
INGRESO MENSUAL
promedio = mean(datos_rotacion$Ingreso_Mensual)
desviación =sd(datos_rotacion$Ingreso_Mensual)
data.frame(promedio,desviación)
## promedio desviación
## 1 6502.931 4707.957
require(ggplot2)
ggplot(datos_rotacion,aes(x=Ingreso_Mensual))+geom_histogram(fill="red")+theme_bw()
summary(datos_rotacion$Ingreso_Mensual)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1009 2911 4919 6503 8379 19999
ANTIGUEDAD
promedio = mean(datos_rotacion$Antigüedad)
desviación =sd(datos_rotacion$Antigüedad)
data.frame(promedio,desviación)
## promedio desviación
## 1 7.008163 6.126525
require(ggplot2)
ggplot(datos_rotacion,aes(x=Antigüedad))+geom_histogram(fill="red")+theme_bw()
summary(datos_rotacion$Antigüedad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 3.000 5.000 7.008 9.000 40.000
ESTADO CIVIL:
attach(datos_rotacion)
tabla1=table(Rotación,`Estado_Civil`)
tabla1
## Estado_Civil
## Rotación Casado Divorciado Soltero
## No 589 294 350
## Si 84 33 120
prop.table(tabla1, margin=1)*100
## Estado_Civil
## Rotación Casado Divorciado Soltero
## No 47.76967 23.84428 28.38605
## Si 35.44304 13.92405 50.63291
prop.table(tabla1,margin=2)*100
## Estado_Civil
## Rotación Casado Divorciado Soltero
## No 87.51857 89.90826 74.46809
## Si 12.48143 10.09174 25.53191
INTERPRETACIÓN:
Entre las personas que NO rotan, los casados tienen el mayor peso con un 47,76%. Los que presentan una mayor rotación son los solteros quienes constituyen el 50,63% de las personas quer rotan. Los solteros tienden tambien a ser los que más rotan dentro de su categoría, con un 25,5% de solteros que cambiaron de trabajo; frente a los divorciados y casados que en su categoria rotaron 10,09% y 12,48% respectivamente.
SATISFACCIÓN LABORAL:
attach(datos_rotacion)
tabla2=table(Rotación,`Satisfación_Laboral`)
tabla2
## Satisfación_Laboral
## Rotación 1 2 3 4
## No 223 234 369 407
## Si 66 46 73 52
prop.table(tabla2, margin=1)*100
## Satisfación_Laboral
## Rotación 1 2 3 4
## No 18.08597 18.97810 29.92701 33.00892
## Si 27.84810 19.40928 30.80169 21.94093
prop.table(tabla2,margin=2)*100
## Satisfación_Laboral
## Rotación 1 2 3 4
## No 77.16263 83.57143 83.48416 88.67102
## Si 22.83737 16.42857 16.51584 11.32898
INTERPRETACIÓN:
Se observa que las personas que estan muy satisfechas con su trabajo tienden a permanecer en su empleo más que aquellas muy insatisfechas. De todas las personas que permanecieron en su empleo el 33% estan muy satisfechas en el mismo, mientras que solo el 18% de las que permanecen son personas muy insatisfechas. Entre las personas muy satisfechas solo el 11% de estas rotaron; mientras que entre las personas muy insatisfechas el 22% rotaron.
EQUILIBRIO TRABAJO VIDA:
attach(datos_rotacion)
tabla3=table(Rotación,`Equilibrio_Trabajo_Vida`)
tabla3
## Equilibrio_Trabajo_Vida
## Rotación 1 2 3 4
## No 55 286 766 126
## Si 25 58 127 27
prop.table(tabla3, margin=1)*100
## Equilibrio_Trabajo_Vida
## Rotación 1 2 3 4
## No 4.460665 23.195458 62.124899 10.218978
## Si 10.548523 24.472574 53.586498 11.392405
prop.table(tabla3,margin=2)*100
## Equilibrio_Trabajo_Vida
## Rotación 1 2 3 4
## No 68.75000 83.13953 85.77828 82.35294
## Si 31.25000 16.86047 14.22172 17.64706
INTERPRETACIÓN:
Se observa que la mayoría de personas considera que tiene una vida bien equilibrada, al concentrarse la mayoría de la muestra en niveles de 3 y 4. Los resultados son consistentes con la hipotesis que una persona desequilibrada tiende a rotar más que una que se siente en equilibrio, con 31,25 % de las personas muy desequilibradas rotando, frente a 17,64% de las personas muy en equilibrio rotando.Esto en el caso de los extremos: Muy equilibrado y Muy desequilibrado. Cuando el estado de equilibrio no se encuentra en un extremo se observa un comportamiento más similar encuanto a la rotación.
EDAD
tapply(Edad, Rotación, mean)
## No Si
## 37.56123 33.60759
INTERPRECIÓN: En promedio una persona que decide cambiar de trabajo es más joven, con 33,60 años promedio, que una personas que decide permanecer en el mismo, con 37,56 años promedio.
SALARIO
tapply(Ingreso_Mensual, Rotación, mean)
## No Si
## 6832.740 4787.093
INTERPRETACIÓN: En promedio una persona con un ingreso bajo, cercano a los 4787.09 en promedio, tiende a rotar más que una persona con un ingreso mayor, cercano a 6832,74 en promedio.
ANTIGUEDAD
tapply(Antigüedad, Rotación, mean)
## No Si
## 7.369019 5.130802
INTERPRETACIÓN: Una persona con una antigüedad cercana a los 5 años en promedio tiende a rotar más que una persona con 7 años promedio en la misma empresa.
#MODELO LOGISCICO:
datos_rotacion$Rotación2=as.numeric(datos_rotacion$Rotación=="Si")
mod5 = glm(formula = Rotación2~`Satisfación_Laboral`+`Estado_Civil`+`Equilibrio_Trabajo_Vida`+Edad+Ingreso_Mensual+Antigüedad,data = datos_rotacion,family="binomial")
summary(mod5)
##
## Call:
## glm(formula = Rotación2 ~ Satisfación_Laboral + Estado_Civil +
## Equilibrio_Trabajo_Vida + Edad + Ingreso_Mensual + Antigüedad,
## family = "binomial", data = datos_rotacion)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.2728 -0.6246 -0.4736 -0.3038 3.1107
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.108e+00 4.732e-01 2.342 0.01917 *
## Satisfación_Laboral -2.856e-01 6.650e-02 -4.295 1.74e-05 ***
## Estado_CivilDivorciado -2.642e-01 2.219e-01 -1.191 0.23382
## Estado_CivilSoltero 7.983e-01 1.633e-01 4.887 1.02e-06 ***
## Equilibrio_Trabajo_Vida -2.689e-01 1.025e-01 -2.623 0.00871 **
## Edad -2.540e-02 9.663e-03 -2.628 0.00859 **
## Ingreso_Mensual -6.757e-05 2.541e-05 -2.660 0.00782 **
## Antigüedad -4.149e-02 1.824e-02 -2.275 0.02291 *
## ---
## 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: 1177.0 on 1462 degrees of freedom
## AIC: 1193
##
## Number of Fisher Scoring iterations: 5
INTERPRECIÓN: En el modelo estimado, se observa que las variables mas relevantes y determinantes en la rotacion son la satisfaccion laboral, y el estado civil soltero. Consideramos que el modelo esta bien estimado, ya que 5 de las 7 variables escogidas tienen relevancia.
predict(mod5,list(Satisfación_Laboral=3,Estado_Civil="Soltero",Equilibrio_Trabajo_Vida=2,Edad=35,Ingreso_Mensual=5000, Antigüedad=6,type="response"))
## 1
## -0.9637235
INTERPRETACIÓN: Con los datos propuestos, el modelo preditivo tiene una propabilidad del 96%
datos_rotacion$Rotación2=as.numeric(datos_rotacion$Rotación=="Si")
datos_rotacion$Estado_Civil2=as.numeric(datos_rotacion$Estado_Civil=="Soltero")
mod6 = glm(formula = Rotación2~`Satisfación_Laboral`+`Estado_Civil2`+`Equilibrio_Trabajo_Vida`+Edad+Ingreso_Mensual+Distancia_Casa,data = datos_rotacion,family="binomial")
summary(mod6)
##
## Call:
## glm(formula = Rotación2 ~ Satisfación_Laboral + Estado_Civil2 +
## Equilibrio_Trabajo_Vida + Edad + Ingreso_Mensual + Distancia_Casa,
## family = "binomial", data = datos_rotacion)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.4864 -0.6349 -0.4698 -0.3018 2.9985
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.6966209 0.4772293 1.460 0.144367
## Satisfación_Laboral -0.2886247 0.0666043 -4.333 1.47e-05 ***
## Estado_Civil2 0.9089178 0.1507130 6.031 1.63e-09 ***
## Equilibrio_Trabajo_Vida -0.2554256 0.1031920 -2.475 0.013314 *
## Edad -0.0283987 0.0097314 -2.918 0.003520 **
## Ingreso_Mensual -0.0000928 0.0000242 -3.835 0.000126 ***
## Distancia_Casa 0.0291246 0.0088235 3.301 0.000964 ***
## ---
## 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: 1173.3 on 1463 degrees of freedom
## AIC: 1187.3
##
## Number of Fisher Scoring iterations: 5
MODIFICACIÓN DEL MODELO: Cambiamos la variable Antigüedad dado que al correr el modelo se observa que no es tan significativa para explicar la rotación laboral. Ésta es reemplazada por: Distancia a Casa, que pensamos es un factor relevante a la hora de escoger un trabajo, especialmente si el trabajo se encuentra en un municipio o ciudad diferente al que se vive. Con esto conseguimos un modelo con variables explicativas más robustas que el anterior.
beta0= 0.6966209
beta1= -0.2886247
beta2= 0.9089178
beta3= -0.2554256
beta4= -0.0283987
beta5= -0.0000928
beta6= 0.0291246
lineal= beta0 +(beta1*2) + (beta2*1) + (beta3*3) + (beta4*27) + (beta5*3000) + (beta6*4)
exp(lineal)/(1+exp(lineal))
## [1] 0.3392465
predict(mod6,list(Satisfación_Laboral=2,Estado_Civil2=1,Equilibrio_Trabajo_Vida=3, Edad=27,Ingreso_Mensual=3000,Distancia_Casa=4),type="response")
## 1
## 0.3392459
y_mod=mod6$fitted.values
y_real=Rotación
y_mod_binario=as.numeric(y_mod>0.05)
tabla=table(y_mod_binario,y_real)
tabla
## y_real
## y_mod_binario No Si
## 0 162 11
## 1 1071 226
(tabla[1,1]+tabla[2,2])/sum(tabla)*100
## [1] 26.39456
##Definir el mejor corte
cal_corte=function(corte){
y_mod_binario=as.numeric(y_mod>corte)
tabla=table(y_mod_binario,y_real)
buenos_clasificados=(tabla[1,1]+tabla[2,2])/sum(tabla)*100
return(buenos_clasificados)
}
cal_corte(0.4)
## [1] 84.35374
cortes=seq(0.04,0.5,0.01)
probas=sapply(cortes,cal_corte)
plot(cortes,probas,type="b")
Crear una linea de crédito para compra de vivienda con tasas bajas para apoyar la compra de vivienda cercana al lugar de trabajo.
INGRESO MENSUAL: Establecer incentivos que aumenten el ingreso salarial de los empleados como recompensa a una mayor productividad. De tal manera que se beneficien ambas partes, tanto empresa como empleados.
SATISFACCION LABORAL: Desarrollar actividades y programas que incentiven el buen ambiente laboral, como: Fiestas de Fin de Año, Dias libres por cumpleaños, Reconocimientos por Antigüedad en la empresa, Regalos de navidad a hijos de empleados menores de 8 años. Establecer horarios flexibles para aquellos cargos cuyas funciones lo permitan.
ESTADO CIVIL (SOLTERO): Nos abstenemos de hacer sugerencias respecto dicha variable pues podría presentarse para hechos discriminatorios.
EDAD: Nos abstenemos de hacer sugerencias respecto dicha variable pues podría presentarse para hechos discriminatorios.
EQUILIBRIO VIDA TRABAJO: Variable irrelevante, por lo que decidimos enfocar nuestros esfuerzos en las 3 primeras variables mencionadas.