Elección de las variables categóricas y cuantitativas
A continuación se escogera tres variables categóricas y tres variables cuantitativas para el desarrollo del ejercicio:
Variables Categóricas
Cargo
Estado_Civil
Equilibrio_Trabajo_Vida
Variables Cuantitativas
Ingreso_Mensual
Trabajos_Anteriores
Antigüedad_Cargo
library(readxl)
Datos_R <- read_excel("C:/Users/pocho/Downloads/Datos_R.xlsx")
est_var = Datos_R [c(10, 12, 13, 14, 20, 22, 1)]
names(est_var)
## [1] "Cargo" "Estado_Civil"
## [3] "Ingreso_Mensual" "Trabajos_Anteriores"
## [5] "Equilibrio_Trabajo_Vida" "Antigüedad_Cargo"
## [7] "Rotación"
head(est_var)
| Cargo | Estado_Civil | Ingreso_Mensual | Trabajos_Anteriores | Equilibrio_Trabajo_Vida | Antigüedad_Cargo | Rotación |
|---|---|---|---|---|---|---|
| Ejecutivo_Ventas | Soltero | 5993 | 8 | 1 | 4 | Si |
| Investigador_Cientifico | Casado | 5130 | 1 | 3 | 7 | No |
| Tecnico_Laboratorio | Soltero | 2090 | 6 | 3 | 0 | Si |
| Investigador_Cientifico | Casado | 2909 | 1 | 3 | 7 | No |
| Tecnico_Laboratorio | Casado | 3468 | 9 | 3 | 2 | No |
| Tecnico_Laboratorio | Soltero | 3068 | 0 | 2 | 7 | No |
Justificación de Variables Categóricas que influyen en la rotación y su hipótesis:
Cargo: El cargo puede estar relacionado con la rotación ya que, el nivel de cargo que tengan los trabajadores influtyan en querer encontrar otros empleos con otros perfiles y responsabilidades y el puesto actual no influya mucho en su deseo de quedarse en l puesto actual. La hipótesis propuesta:las personas con determinados cargo tienen a rotar más en la organización.
Estado_Civil: La situación familiar o sentimental puede incidir en la decisión de estar en una empresa o de estar en otra que ofrezca arandelas que benefician a los integrantes de la familia o a la interacción que pueda tener en colaborador con su trabajo y familia. La hipótesis propuesta:hay estados civiles propensos a presentar rotación.
Equilibrio_Trabajo_Vida: En la motivación laboral y la decision de permanecer en una organiación tiene gran injerencia el equilibrio que pueda tener un colaborador con respecto a su vida personal y su trabajo, que no lo absorba completamente pero pueda desarrolar sus competencias y habilidades técnicas. La hipótesis propuesta: entre menor sea el equilibrio mayor la rotación de personal.
Variables cuantitativas que influyen en la rotación y su hipótesis:
Ingreso_Mensual: Dependiendo el nivel delc argo y responsabilidad del colaborador es probable que busque organizaciones que puedan ofrecerle un mayor salario. La hipótesis propuesta:los ingresos mensuales menores pueden tener indicencia a la rotación.
Trabajos_Anteriores: Puede darse una tendencia de cambiar de empleo si en el historial laboral de la persona presenta una alta cantidad de empleos anteriores, puede interpretarse que la persona no cuenta con mayor estabilidad laboral. La hipótesis propuesta: entre mayor sea la cantidad de trabajos anteriores puede tener tendendencia a rotar en el puesto actual.
Antigüedad_Cargo: Las personas a medida que pasa el tiempo llegan a un estancamiento laboral y dominio de sus funciones lo que puede promover en ellos una búsqueda de nuevas experiencias en el mercado laboral. La hipótesis propuesta: entre mayor sea el tiempo en el puesto actual mas probabilidad hay que el colaborador rote.
Analisis Univariado de cada una de las variables
Cargo
require(ggplot2)
require(ggpubr)
require(scales)
require(plotly)
est_var <- data.frame(est_var)
tf1 =data.frame(sort(table(est_var$Cargo),decreasing = TRUE))
d1=data.frame(percent(tf1$Freq/length(est_var$Cargo)/1))
d2=data.frame(tf1,d1)
colnames(d2)= c("Cargo", "Frecuencia", "Porcentaje")
head(d2,9)
| Cargo | Frecuencia | Porcentaje |
|---|---|---|
| Ejecutivo_Ventas | 326 | 22.18% |
| Investigador_Cientifico | 292 | 19.86% |
| Tecnico_Laboratorio | 259 | 17.62% |
| Director_Manofactura | 145 | 9.86% |
| Representante_Salud | 131 | 8.91% |
| Gerente | 102 | 6.94% |
| Representante_Ventas | 83 | 5.65% |
| Director_Investigación | 80 | 5.44% |
| Recursos_Humanos | 52 | 3.54% |
g1=ggplot(d2,aes(y=Cargo,x=Frecuencia))+geom_bar(stat="identity", fill="Gray") +geom_text(aes(label=Frecuencia),hjust=0.1) + theme_bw()+ggtitle("Cargos en la compañia")
ggplotly(g1)
Estado_civil
require(ggplot2)
require(ggpubr)
require(scales)
tf2 =data.frame(sort(table(est_var$Estado_Civil),decreasing = TRUE))
d3=data.frame(percent(tf2$Freq/length(est_var$Estado_Civil)/1))
d4=data.frame(tf2,d3)
colnames(d4)= c("Estado_Civil", "Frecuencia", "Porcentaje")
head(d4,9)
| Estado_Civil | Frecuencia | Porcentaje |
|---|---|---|
| Casado | 673 | 45.8% |
| Soltero | 470 | 32.0% |
| Divorciado | 327 | 22.2% |
ggplot(d4,aes(x="",y=Frecuencia,fill=Estado_Civil))+geom_bar(stat="identity", color="white")+geom_text(aes(label=Porcentaje),position=position_stack(vjust=0.5),color="white",size=6)+coord_polar(theta="y")+ggtitle("Estado civil")
Equilibrio_Trabajo_Vida
Ya que este valor es un valor nominal, se creó la siguiente escala likert para poder interpretar los datos
u1=matrix(1:4,nrow = 4, ncol=1)
u2=matrix(c("Muy Bajo","Bajo","Medio","Alto"),nrow = 4, ncol=1)
likert=data.frame(u1,u2)
names(likert)[1:2]=c("Escala", "Descripción")
likert
| Escala | Descripción |
|---|---|
| 1 | Muy Bajo |
| 2 | Bajo |
| 3 | Medio |
| 4 | Alto |
require(ggplot2)
require(ggpubr)
require(scales)
require(plotly)
tf3 =data.frame(sort(table(est_var$Equilibrio_Trabajo_Vida),decreasing = TRUE))
pos=match(tf3$Var1,likert$Escala)
tf3$Var1=likert$Descripción[pos]
d5=data.frame(percent(tf3$Freq/length(est_var$Equilibrio_Trabajo_Vida)/1))
d6=data.frame(tf3,d5)
colnames(d6)= c("Equilibrio_Trabajo_Vida", "Frecuencia", "Porcentaje")
head(d6,9)
| Equilibrio_Trabajo_Vida | Frecuencia | Porcentaje |
|---|---|---|
| Medio | 893 | 60.7% |
| Bajo | 344 | 23.4% |
| Alto | 153 | 10.4% |
| Muy Bajo | 80 | 5.4% |
g3=ggplot(d6,aes(x="",y=Frecuencia,fill=Equilibrio_Trabajo_Vida))+geom_bar(stat="identity", color="white")+geom_text(aes(label=Porcentaje),position=position_stack(vjust=0.5),color="white",size=3)+ggtitle("Equilibrio_Trabajo_Vida")
ggplotly(g3)
Ahora, daremos paso a las variables cuantitativas y para ello utilizaremos una función de nos calcule el mínimo, máximo, promedio, desviación estandar y mediana, adicional a ello tambien presentaremos un summary con los datos de cuartiles y finalizará con un grafico.
Cuantitativo1=function (dc){
Minimo=min(dc)
Maximo=max(dc)
Promedio=mean(dc)
Desviacion_Estandar=sd(dc)
Mediana=median(dc)
dato=data.frame(Minimo,Maximo,Promedio,Desviacion_Estandar,Mediana)
##Gráfico
dotchart(dc,pch = 21, bg = "green", pt.cex = 0.2)
##Tabla de datos
dato
return(dato)
}
Cuantitativo2=function (dc){
a=summary(dc)
return(a)
}
Cuantitativo3=function(dc){
tfin=hist(dc,plot = FALSE)
tabla1=table.freq(tfin)
names(tabla1)[1:7]=c("lím_clase_inf","lím_clase_sup","marca_clase", "Frequencie", "Porc_%", "Frec_acum","Porc_%_acum")
return(tabla1)
}
Ingreso_Mensual
require(agricolae)
dc=est_var$Ingreso_Mensual
dc=sort(dc,decreasing = TRUE)
Cuantitativo1(dc)
| Minimo | Maximo | Promedio | Desviacion_Estandar | Mediana |
|---|---|---|---|---|
| 1009 | 19999 | 6502.931 | 4707.957 | 4919 |
Cuantitativo2(dc)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1009 2911 4919 6503 8379 19999
Cuantitativo3(dc)
| lím_clase_inf | lím_clase_sup | marca_clase | Frequencie | Porc_% | Frec_acum | Porc_%_acum |
|---|---|---|---|---|---|---|
| 0 | 2000 | 1000 | 33 | 2.2 | 33 | 2.2 |
| 2000 | 4000 | 3000 | 510 | 34.7 | 543 | 36.9 |
| 4000 | 6000 | 5000 | 371 | 25.2 | 914 | 62.2 |
| 6000 | 8000 | 7000 | 175 | 11.9 | 1089 | 74.1 |
| 8000 | 10000 | 9000 | 100 | 6.8 | 1189 | 80.9 |
| 10000 | 12000 | 11000 | 86 | 5.9 | 1275 | 86.7 |
| 12000 | 14000 | 13000 | 53 | 3.6 | 1328 | 90.3 |
| 14000 | 16000 | 15000 | 16 | 1.1 | 1344 | 91.4 |
| 16000 | 18000 | 17000 | 57 | 3.9 | 1401 | 95.3 |
| 18000 | 20000 | 19000 | 69 | 4.7 | 1470 | 100.0 |
Trabajos_Anteriores
require(agricolae)
dc=est_var$Trabajos_Anteriores
dc=sort(dc,decreasing = TRUE)
Cuantitativo1(dc)
| Minimo | Maximo | Promedio | Desviacion_Estandar | Mediana |
|---|---|---|---|---|
| 0 | 9 | 2.693197 | 2.498009 | 2 |
Cuantitativo2(dc)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 1.000 2.000 2.693 4.000 9.000
Cuantitativo3(dc)
| lím_clase_inf | lím_clase_sup | marca_clase | Frequencie | Porc_% | Frec_acum | Porc_%_acum |
|---|---|---|---|---|---|---|
| 0 | 1 | 0.5 | 718 | 48.8 | 718 | 48.8 |
| 1 | 2 | 1.5 | 146 | 9.9 | 864 | 58.8 |
| 2 | 3 | 2.5 | 159 | 10.8 | 1023 | 69.6 |
| 3 | 4 | 3.5 | 139 | 9.5 | 1162 | 79.0 |
| 4 | 5 | 4.5 | 63 | 4.3 | 1225 | 83.3 |
| 5 | 6 | 5.5 | 70 | 4.8 | 1295 | 88.1 |
| 6 | 7 | 6.5 | 74 | 5.0 | 1369 | 93.1 |
| 7 | 8 | 7.5 | 49 | 3.3 | 1418 | 96.5 |
| 8 | 9 | 8.5 | 52 | 3.5 | 1470 | 100.0 |
valor=table(est_var$Trabajos_Anteriores)
#Resumen de frecuencia independiente
valor
##
## 0 1 2 3 4 5 6 7 8 9
## 197 521 146 159 139 63 70 74 49 52
Antigüedad_Cargo
require(agricolae)
dc=est_var$Antigüedad_Cargo
dc=sort(dc,decreasing = TRUE)
Cuantitativo1(dc)
| Minimo | Maximo | Promedio | Desviacion_Estandar | Mediana |
|---|---|---|---|---|
| 0 | 18 | 4.229252 | 3.623137 | 3 |
Cuantitativo2(dc)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 2.000 3.000 4.229 7.000 18.000
Cuantitativo3(dc)
| lím_clase_inf | lím_clase_sup | marca_clase | Frequencie | Porc_% | Frec_acum | Porc_%_acum |
|---|---|---|---|---|---|---|
| 0 | 2 | 1 | 673 | 45.8 | 673 | 45.8 |
| 2 | 4 | 3 | 239 | 16.3 | 912 | 62.0 |
| 4 | 6 | 5 | 73 | 5.0 | 985 | 67.0 |
| 6 | 8 | 7 | 311 | 21.2 | 1296 | 88.2 |
| 8 | 10 | 9 | 96 | 6.5 | 1392 | 94.7 |
| 10 | 12 | 11 | 32 | 2.2 | 1424 | 96.9 |
| 12 | 14 | 13 | 25 | 1.7 | 1449 | 98.6 |
| 14 | 16 | 15 | 15 | 1.0 | 1464 | 99.6 |
| 16 | 18 | 17 | 6 | 0.4 | 1470 | 100.0 |
valor=table(est_var$Antigüedad_Cargo)
#Resumen de frecuencia independiente
valor
##
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
## 244 57 372 135 104 36 37 222 89 67 29 22 10 14 11 8 7 4 2
Analisis Bivariado de cada una de las variables Validación de las hipótesis con los resultados bivariados
data_hipo=function(variable){
dfh=data.frame(variable,est_var$Rotación)
dfh=table(dfh)
return(dfh)
}
Hipotesis: Variables Categóricas y la Rotación:
Cargo:
La hipótesis propuesta:las personas con determinados cargo tienen a rotar más en la organización.
Conclusión: Efectivamenete hay cargo con mayor rotación con respecto a otros; el cargo Representante_Ventas cuenta con mayor rotacion dentro de la organización con un 40% y el cargo con menor rotación con cargo de representante es Representante_Salud con un 7%
Hay que tener en cuenta que en la base de datos los colaboradores con cargo de Representante_Ventas en total son 83 personas y no se puede comparar con Representante_Salud con una población de 131 personas o un Ejecutivo_Ventas quien tiene una poblacion mayor 326 y un % de rotación del 17%
Hay que validar cuales son las causales por las cuales este cargo presenta tan alto porcentaje de rotación a pesar de ser una de las áreas con menor cantidad de personas.
require(CGPfunctions)
variable=est_var$Cargo
data_hipo(variable)
## est_var.Rotación
## variable No Si
## Director_Investigación 78 2
## Director_Manofactura 135 10
## Ejecutivo_Ventas 269 57
## Gerente 97 5
## Investigador_Cientifico 245 47
## Recursos_Humanos 40 12
## Representante_Salud 122 9
## Representante_Ventas 50 33
## Tecnico_Laboratorio 197 62
PlotXTabs2(est_var,Cargo,Rotación,plottype = "percent",x.axis.orientation="vertical")
Estado_Civil
La hipótesis propuesta:hay estados civiles propensos a presentar rotación.
Conclusión: Solo el estado civil Soltero presenta una rotación del 26% a comparacion de los otros dos estados civil que mantiene su indicador en la primera decena.
Se deben de realizar verificaciones si dichas personas solteras presentan algun tipo de responsabilidad económica (hijos, deudas, hipotecas) para poder concluir mas puntualmente si los colaboradores que no cuenten con este tipo de obligaciones financieras sienten mas libertad para realizar un cambio de empleo y no sentirse atados al actual
Adicional a ello validar que condiciones laborales son propicias para estos colaboradores y generar estrategias de retención de personal.
require(CGPfunctions)
variable=est_var$Estado_Civil
data_hipo(variable)
## est_var.Rotación
## variable No Si
## Casado 589 84
## Divorciado 294 33
## Soltero 350 120
PlotXTabs2(est_var,Estado_Civil,Rotación,plottype = "percent",x.axis.orientation="vertical")
Equilibrio_Trabajo_Vida:
La hipótesis propuesta: entre menor sea el equilibrio mayor la rotación de personal.
Conclusión: Efectivamente las personas que mencionaron bajo equilibrio entre la vida personal y laboral, de las 80 personas que mencionaron bajo equilibrio el 31% presento rotación.
Ahora, las personas que mencionaron equilibrio medio son aquellas con indicadores 18% en rotación y estas representan el 60,7% (893 personas sobre 1470 colaboradoes de la base de datos), es decir que, en la organización un pooc mas de la mitad consideran que pueden tener ese equilibrio laboral y personal.
require(CGPfunctions)
variable=est_var$Equilibrio_Trabajo_Vida
pos=match(variable,likert$Escala)
variable=likert$Descripción[pos]
data_hipo(variable)
## est_var.Rotación
## variable No Si
## Alto 126 27
## Bajo 286 58
## Medio 766 127
## Muy Bajo 55 25
likert
| Escala | Descripción |
|---|---|
| 1 | Muy Bajo |
| 2 | Bajo |
| 3 | Medio |
| 4 | Alto |
PlotXTabs2(est_var,Equilibrio_Trabajo_Vida,Rotación,plottype = "percent",x.axis.orientation="vertical")
Hipotesis: Variables Cuantitativas y la Rotación:
Ingreso_Mensual:
La hipótesis propuesta:los ingresos mensuales menores pueden tener indicencia a la rotación.
Conclusión: El promedio de los salarios de aquellos que no rotan es de S6.832.740 pesos y aquellos que si rotaron fue de $4.787.093 pesos y con las gráficas se fundamenta que el salario es un indicador importante en la rotación de personal.
require(ggplot2)
require(plotly)
tapply(est_var$Ingreso_Mensual,est_var$Rotación,mean)
## No Si
## 6832.740 4787.093
gt1=ggplot(est_var,aes(x=Rotación,y=Ingreso_Mensual, fill=Rotación))+geom_boxplot()+theme_light()
ggplotly(gt1)
Trabajos_Anteriores:
La hipótesis propuesta: entre mayor sea la cantidad de trabajos anteriores puede tener tendendencia a rotar en el puesto actual.
Conclusión: Las cifras de personas que han tenido otros empleos anterior que rotan es muy reducido, la cifra mas alta es 98 personas que han tenido un empleo anterior por lo cual la hipotesis no es correcta y el tener empleos anteriores no marca tendencia con respecto a la rotación
trab_rot=table(est_var$Trabajos_Anteriores,est_var$Rotación)
trab_rot
##
## No Si
## 0 174 23
## 1 423 98
## 2 130 16
## 3 143 16
## 4 122 17
## 5 47 16
## 6 54 16
## 7 57 17
## 8 43 6
## 9 40 12
bp=barplot(trab_rot,horiz=1, las=1,col=c('yellow','white','pink','orange','brown','gray','red','black','green','blue'),legend.text = TRUE,beside = TRUE)
Antigüedad_Cargo:
La hipótesis propuesta: entre mayor sea el tiempo en el puesto actual mas probabilidad hay que el colaborador rote.
Conclusión: Verificando las cifras aquellas personas que llevan mas tiempo en su trabajo no rotan, en cambio aquellas que lo hacen son aquellas que estan en sus primeros años de contratación; es por esta razón que la hipotesis no es correcta.
require(ggplot2)
require(plotly)
tapply(est_var$Antigüedad_Cargo,est_var$Rotación,mean)
## No Si
## 4.484185 2.902954
gt3=ggplot(est_var,aes(x=Rotación,y=Antigüedad_Cargo, fill=Rotación))+geom_boxplot()+theme_light()
ggplotly(gt3)
PlotXTabs2(est_var,Antigüedad_Cargo,Rotación,plottype = "percent",x.axis.orientation="vertical")
Modelo de Regresión Logística Validación de los datos importantes para el modelo
Lo primero que vamos a realizar es colocar la variable dependiente de primera (Rotación), cambiar como factor los datos de escala como Equilibrio_Trabajo_Vida y cambiar los \(si\) y \(no\) por 1 y 0 respectivamente:
#Cambiar el si y no
est_var$Rota=0
est_var$Rota[est_var$Rotación=="Si"]=1
head(est_var,5)
| Cargo | Estado_Civil | Ingreso_Mensual | Trabajos_Anteriores | Equilibrio_Trabajo_Vida | Antigüedad_Cargo | Rotación | Rota |
|---|---|---|---|---|---|---|---|
| Ejecutivo_Ventas | Soltero | 5993 | 8 | 1 | 4 | Si | 1 |
| Investigador_Cientifico | Casado | 5130 | 1 | 3 | 7 | No | 0 |
| Tecnico_Laboratorio | Soltero | 2090 | 6 | 3 | 0 | Si | 1 |
| Investigador_Cientifico | Casado | 2909 | 1 | 3 | 7 | No | 0 |
| Tecnico_Laboratorio | Casado | 3468 | 9 | 3 | 2 | No | 0 |
#Cambio del orden
est_var2= est_var[,c(8,1,2,3,4,5,6,7)]
names (est_var2)
## [1] "Rota" "Cargo"
## [3] "Estado_Civil" "Ingreso_Mensual"
## [5] "Trabajos_Anteriores" "Equilibrio_Trabajo_Vida"
## [7] "Antigüedad_Cargo" "Rotación"
#Cambiar como factor los datos de escala como Equilibrio_Trabajo_Vida
est_var2$Equilibrio_Trabajo_Vida=as.factor(est_var2$Equilibrio_Trabajo_Vida)
Con la base de datos completa se puede hacer el modelo
modelo=glm(est_var2$Rota ~ Cargo + Estado_Civil + Equilibrio_Trabajo_Vida + Ingreso_Mensual, data = est_var2, family = "binomial")
Se genera el summary
summary(modelo)
##
## Call:
## glm(formula = est_var2$Rota ~ Cargo + Estado_Civil + Equilibrio_Trabajo_Vida +
## Ingreso_Mensual, family = "binomial", data = est_var2)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.3796 -0.5908 -0.4622 -0.2738 2.8681
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.839e+00 1.003e+00 -2.832 0.004633 **
## CargoDirector_Manofactura 9.789e-01 8.689e-01 1.127 0.259910
## CargoEjecutivo_Ventas 2.039e+00 8.242e-01 2.473 0.013382 *
## CargoGerente 6.909e-01 8.560e-01 0.807 0.419589
## CargoInvestigador_Cientifico 1.847e+00 9.075e-01 2.035 0.041830 *
## CargoRecursos_Humanos 2.472e+00 9.290e-01 2.660 0.007803 **
## CargoRepresentante_Salud 9.473e-01 8.733e-01 1.085 0.278066
## CargoRepresentante_Ventas 3.127e+00 9.364e-01 3.339 0.000841 ***
## CargoTecnico_Laboratorio 2.373e+00 9.043e-01 2.624 0.008695 **
## Estado_CivilDivorciado -1.735e-01 2.237e-01 -0.776 0.438038
## Estado_CivilSoltero 8.476e-01 1.648e-01 5.143 2.70e-07 ***
## Equilibrio_Trabajo_Vida2 -9.015e-01 3.020e-01 -2.985 0.002839 **
## Equilibrio_Trabajo_Vida3 -1.183e+00 2.799e-01 -4.227 2.37e-05 ***
## Equilibrio_Trabajo_Vida4 -8.840e-01 3.441e-01 -2.569 0.010204 *
## Ingreso_Mensual -3.810e-06 4.168e-05 -0.091 0.927158
## ---
## 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: 1156.8 on 1455 degrees of freedom
## AIC: 1186.8
##
## Number of Fisher Scoring iterations: 6
Teniendo en cuenta lo anterior, por su significancia los coeficientes que mas le aportan al modelo es:
CargoRepresentante_Ventas, el cual tiene un z value 3.339 y una P 0.000841 Estado_CivilSoltero, el cual tiene un z value 5.143 y una P 2.70e-07 Equilibrio_Trabajo_Vida3, el cual tiene un z value -4.227 y una P 2.37e-05 ***
Es decir que, si algun colaborador tiene estas caracteristicas es mas probable que se genere una rotación
Con la información anterior se puede hacer el modelo1 solo teniendo en cuenta las variables representativas
modelo1=glm(est_var2$Rota ~ Cargo + Estado_Civil + Equilibrio_Trabajo_Vida, data = est_var2, family = "binomial")
Se genera el summary
summary(modelo1)
##
## Call:
## glm(formula = est_var2$Rota ~ Cargo + Estado_Civil + Equilibrio_Trabajo_Vida,
## family = "binomial", data = est_var2)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.3802 -0.5896 -0.4621 -0.2722 2.8634
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.8986 0.7631 -3.799 0.000145 ***
## CargoDirector_Manofactura 1.0116 0.7917 1.278 0.201324
## CargoEjecutivo_Ventas 2.0729 0.7341 2.824 0.004748 **
## CargoGerente 0.6864 0.8546 0.803 0.421843
## CargoInvestigador_Cientifico 1.8954 0.7374 2.570 0.010158 *
## CargoRecursos_Humanos 2.5156 0.7950 3.164 0.001554 **
## CargoRepresentante_Salud 0.9793 0.7998 1.224 0.220771
## CargoRepresentante_Ventas 3.1773 0.7556 4.205 2.61e-05 ***
## CargoTecnico_Laboratorio 2.4211 0.7344 3.297 0.000978 ***
## Estado_CivilDivorciado -0.1731 0.2237 -0.774 0.439012
## Estado_CivilSoltero 0.8481 0.1647 5.149 2.62e-07 ***
## Equilibrio_Trabajo_Vida2 -0.9034 0.3013 -2.998 0.002717 **
## Equilibrio_Trabajo_Vida3 -1.1843 0.2795 -4.237 2.27e-05 ***
## Equilibrio_Trabajo_Vida4 -0.8850 0.3440 -2.573 0.010081 *
## ---
## 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: 1156.9 on 1456 degrees of freedom
## AIC: 1184.9
##
## Number of Fisher Scoring iterations: 6
poder predictivo del modelo de Regresión Logística curva ROC y el AUC
pred1 = predict.glm(modelo1,newdata = est_var2, type = "response")
ypred = ifelse(pred1> 0.3,1,0)
yobser=est_var2$Rota
matrizc=table(yobser,ypred)
matrizc
## ypred
## yobser 0 1
## 0 1127 106
## 1 165 72
sum(diag(matrizc))/sum(matrizc)
## [1] 0.8156463
## El modelo predice correctamente un 81%
Otra predicción
pred2 = predict.glm(modelo1,newdata = est_var2, type = "response")
result1 = table(est_var2$Rota, ifelse(pred2> 0.2,1,0))
result1
##
## 0 1
## 0 899 334
## 1 92 145
boxplot(pred2)
Ahora iremos con la curva ROC
library(ROCR)
pred= ROCR::prediction(pred1,est_var2$Rota)
perfo = performance(pred,"tpr","fpr")
plot(perfo)
abline(a=0,b=1,col="red")
grid()
como podemos observar la linea tiene mayor arco acercandose a los
Verdaderos positivos y muestra una separación de la linea roja, es decir
que el modelo si tiende a poder organizar de manera correcta la
calsificacion de los verdaderos positivos de la regresión.
ahora el AUC
AUClog1=performance(pred,measure = "auc")@y.values[[1]]
cat("AUC: ", AUClog1, "n")
## AUC: 0.7323036 n
probabilida de que un individuo rote
Teniendo en cuenta los coeficientes del summary del modelo nos queda de la siguiente manera
summary(modelo1)
##
## Call:
## glm(formula = est_var2$Rota ~ Cargo + Estado_Civil + Equilibrio_Trabajo_Vida,
## family = "binomial", data = est_var2)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.3802 -0.5896 -0.4621 -0.2722 2.8634
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.8986 0.7631 -3.799 0.000145 ***
## CargoDirector_Manofactura 1.0116 0.7917 1.278 0.201324
## CargoEjecutivo_Ventas 2.0729 0.7341 2.824 0.004748 **
## CargoGerente 0.6864 0.8546 0.803 0.421843
## CargoInvestigador_Cientifico 1.8954 0.7374 2.570 0.010158 *
## CargoRecursos_Humanos 2.5156 0.7950 3.164 0.001554 **
## CargoRepresentante_Salud 0.9793 0.7998 1.224 0.220771
## CargoRepresentante_Ventas 3.1773 0.7556 4.205 2.61e-05 ***
## CargoTecnico_Laboratorio 2.4211 0.7344 3.297 0.000978 ***
## Estado_CivilDivorciado -0.1731 0.2237 -0.774 0.439012
## Estado_CivilSoltero 0.8481 0.1647 5.149 2.62e-07 ***
## Equilibrio_Trabajo_Vida2 -0.9034 0.3013 -2.998 0.002717 **
## Equilibrio_Trabajo_Vida3 -1.1843 0.2795 -4.237 2.27e-05 ***
## Equilibrio_Trabajo_Vida4 -0.8850 0.3440 -2.573 0.010081 *
## ---
## 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: 1156.9 on 1456 degrees of freedom
## AIC: 1184.9
##
## Number of Fisher Scoring iterations: 6
logit(rotacion) = -2.8986 + (3.1773 ∗ CargoRepresentante_Ventas) + (2.4211 * CargoTecnico_Laboratorio) + (0.8481 * Estado_CivilSoltero) + (-1.1843 * Equilibrio_Trabajo_Vida3)
1 + 𝑒-2.8986 + (3.1773 ∗ CargoRepresentante_Ventas) + (2.4211 * CargoTecnico_Laboratorio) + (0.8481 * Estado_CivilSoltero) + (-1.1843 * Equilibrio_Trabajo_Vida3)
Estratégias para disminuir la rotación
Verificar cuales son las condiciones laborales (salariales y no salariales) entre los cargos Representante_Salud y Representante_Ventas para poder reducir la elevada rotación de este cargo (Representante_Ventas), realizar entrevistas y medicion de clima laboral con este cargo para encontrar en la raíz las causas de la rotación.
incluir dentro de los beneficios no salariales actividades en las cuales los colaboradores solteros puedan sentirse especial y entender que en la actualidad existen diferentes tipos de familias e integrantes (como mascotas) que pueda tener un impacto sobre el colaborador soltero y propiciar la retenciónd el talento.
Implementar con los con líderes con personas a cargo estrategias en las cuales se busque propiciar el equilibrio de la vida laboral con la vida personal de los colaboradores (manejo de horas extras, contacto fuera del horario laboral), adicional a ello estudiar dentro de ls beneficios no salariales dias de descando por desempeño, cumpleaños, ect.).
Elección de las variables categóricas y cuantitativas