Con base en los datos de rotación realizar los puntos 1 a 4:
library(readxl)
datos <- read_excel("Datos_Rotacion.xlsx",
sheet = "Base")
attach(datos)
names(datos)
## [1] "Rotación" "Edad"
## [3] "Viaje de Negocios" "Departamento"
## [5] "Distancia_Casa" "Educación"
## [7] "Campo_Educación" "Satisfacción_Ambiental"
## [9] "Genero" "Cargo"
## [11] "Satisfación_Laboral" "Estado_Civil"
## [13] "Ingreso_Mensual" "Trabajos_Anteriores"
## [15] "Horas_Extra" "Porcentaje_aumento_salarial"
## [17] "Rendimiento_Laboral" "Años_Experiencia"
## [19] "Capacitaciones" "Equilibrio_Trabajo_Vida"
## [21] "Antigüedad" "Antigüedad_Cargo"
## [23] "Años_ultima_promoción" "Años_acargo_con_mismo_jefe"
str(datos)
## tibble [1,470 x 24] (S3: tbl_df/tbl/data.frame)
## $ Rotación : chr [1:1470] "Si" "No" "Si" "No" ...
## $ Edad : num [1:1470] 41 49 37 33 27 32 59 30 38 36 ...
## $ Viaje de Negocios : chr [1:1470] "Raramente" "Frecuentemente" "Raramente" "Frecuentemente" ...
## $ Departamento : chr [1:1470] "Ventas" "IyD" "IyD" "IyD" ...
## $ Distancia_Casa : num [1:1470] 1 8 2 3 2 2 3 24 23 27 ...
## $ Educación : num [1:1470] 2 1 2 4 1 2 3 1 3 3 ...
## $ Campo_Educación : chr [1:1470] "Ciencias" "Ciencias" "Otra" "Ciencias" ...
## $ Satisfacción_Ambiental : num [1:1470] 2 3 4 4 1 4 3 4 4 3 ...
## $ Genero : chr [1:1470] "F" "M" "M" "F" ...
## $ Cargo : chr [1:1470] "Ejecutivo_Ventas" "Investigador_Cientifico" "Tecnico_Laboratorio" "Investigador_Cientifico" ...
## $ Satisfación_Laboral : num [1:1470] 4 2 3 3 2 4 1 3 3 3 ...
## $ Estado_Civil : chr [1:1470] "Soltero" "Casado" "Soltero" "Casado" ...
## $ Ingreso_Mensual : num [1:1470] 5993 5130 2090 2909 3468 ...
## $ Trabajos_Anteriores : num [1:1470] 8 1 6 1 9 0 4 1 0 6 ...
## $ Horas_Extra : chr [1:1470] "Si" "No" "Si" "Si" ...
## $ Porcentaje_aumento_salarial: num [1:1470] 11 23 15 11 12 13 20 22 21 13 ...
## $ Rendimiento_Laboral : num [1:1470] 3 4 3 3 3 3 4 4 4 3 ...
## $ Años_Experiencia : num [1:1470] 8 10 7 8 6 8 12 1 10 17 ...
## $ Capacitaciones : num [1:1470] 0 3 3 3 3 2 3 2 2 3 ...
## $ Equilibrio_Trabajo_Vida : num [1:1470] 1 3 3 3 3 2 2 3 3 2 ...
## $ Antigüedad : num [1:1470] 6 10 0 8 2 7 1 1 9 7 ...
## $ Antigüedad_Cargo : num [1:1470] 4 7 0 7 2 7 0 0 7 7 ...
## $ Años_ultima_promoción : num [1:1470] 0 1 0 3 2 3 0 0 1 7 ...
## $ Años_acargo_con_mismo_jefe : num [1:1470] 5 7 0 0 2 6 0 0 8 7 ...
summary(datos)
## Rotación Edad Viaje de Negocios Departamento
## Length:1470 Min. :18.00 Length:1470 Length:1470
## Class :character 1st Qu.:30.00 Class :character Class :character
## Mode :character Median :36.00 Mode :character Mode :character
## Mean :36.92
## 3rd Qu.:43.00
## Max. :60.00
## Distancia_Casa Educación Campo_Educación Satisfacción_Ambiental
## Min. : 1.000 Min. :1.000 Length:1470 Min. :1.000
## 1st Qu.: 2.000 1st Qu.:2.000 Class :character 1st Qu.:2.000
## Median : 7.000 Median :3.000 Mode :character Median :3.000
## Mean : 9.193 Mean :2.913 Mean :2.722
## 3rd Qu.:14.000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :29.000 Max. :5.000 Max. :4.000
## Genero Cargo Satisfación_Laboral Estado_Civil
## Length:1470 Length:1470 Min. :1.000 Length:1470
## Class :character Class :character 1st Qu.:2.000 Class :character
## Mode :character Mode :character Median :3.000 Mode :character
## Mean :2.729
## 3rd Qu.:4.000
## Max. :4.000
## Ingreso_Mensual Trabajos_Anteriores Horas_Extra
## Min. : 1009 Min. :0.000 Length:1470
## 1st Qu.: 2911 1st Qu.:1.000 Class :character
## Median : 4919 Median :2.000 Mode :character
## Mean : 6503 Mean :2.693
## 3rd Qu.: 8379 3rd Qu.:4.000
## Max. :19999 Max. :9.000
## Porcentaje_aumento_salarial Rendimiento_Laboral Años_Experiencia
## Min. :11.00 Min. :3.000 Min. : 0.00
## 1st Qu.:12.00 1st Qu.:3.000 1st Qu.: 6.00
## Median :14.00 Median :3.000 Median :10.00
## Mean :15.21 Mean :3.154 Mean :11.28
## 3rd Qu.:18.00 3rd Qu.:3.000 3rd Qu.:15.00
## Max. :25.00 Max. :4.000 Max. :40.00
## Capacitaciones Equilibrio_Trabajo_Vida Antigüedad Antigüedad_Cargo
## Min. :0.000 Min. :1.000 Min. : 0.000 Min. : 0.000
## 1st Qu.:2.000 1st Qu.:2.000 1st Qu.: 3.000 1st Qu.: 2.000
## Median :3.000 Median :3.000 Median : 5.000 Median : 3.000
## Mean :2.799 Mean :2.761 Mean : 7.008 Mean : 4.229
## 3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.: 9.000 3rd Qu.: 7.000
## Max. :6.000 Max. :4.000 Max. :40.000 Max. :18.000
## Años_ultima_promoción Años_acargo_con_mismo_jefe
## Min. : 0.000 Min. : 0.000
## 1st Qu.: 0.000 1st Qu.: 2.000
## Median : 1.000 Median : 3.000
## Mean : 2.188 Mean : 4.123
## 3rd Qu.: 3.000 3rd Qu.: 7.000
## Max. :15.000 Max. :17.000
Seleccionar 3 variables categóricas (distintas de rotación) y 3 variables cuantitativas, que consideren estén relacionadas con la rotación.
Nota: Justificar por que estas variables están relacionadas y que tipo de relación se espera (Hipótesis).
Ejemplo: Se espera que las horas extra se relacionen con la rotación ya que las personas podrían desgastarse mas al trabajar horas extra y descuidan aspectos personales. La hipótesis es que las personas que trabajan horas extra tienen mayor posibilidad de rotar que las que no trabajan extra. (serían 6, una por variable).
Cargo:
Estado Civil:
\(H_{0}\) : Se espera que los trabajadores con el estado civil “Soltero” tenga mayor rotación, por no tener madurez suficiente y mayores responsabilidades.
\(H_{1}\) : No se espera que los trabajadores con el estado civil “Soltero” tenga mayor rotación, por no tener madurez suficiente y mayores responsabilidades.
Satisfacción Ambiental:
\(H_{0}\) : Se espera que que los trabajadores con en satisfacción ambiental “bajo” se encuentre mayor rotación.
\(H_{1}\) : No Se espera que que los trabajadores con en satisfacción ambiental “bajo” se encuentre mayor rotación.
Trabajos Anteriores:
\(H_{0}\) : Se espera que los trabajadores que tengan mayor cantidad de trabajos anteriores tenga mayor rotación.
\(H_{1}\) : No se espera que los trabajadores que tengan mayor cantidad de trabajos anteriores tenga mayor rotación.
Viajes de Negocios:
\(H_{0}\) : Se espera que los trabajadores que no viajen frecuentemente y lo tengan que hacer, tengan mayor rotación.
\(H_{1}\) : No Se espera que los trabajadores que no viajen frecuentemente y lo tengan que hacer, tengan mayor rotación.
Ingreso mensual:
\(H_{0}\) : Se espera que los trabajadores que tengan un ingreso mensual por debajo de la media, tienen mayor rotación
\(H_{1}\) : No se espera que los trabajadores que tengan un ingreso mensual por debajo de la media, tienen mayor rotación
Realizar un análisis univariado (caracterización). Nota: Los indicadores o gráficos se usan dependiendo del tipo de variables (cuantitativa o cualitativa). Incluir interpretaciones de la rotación.
library(plotly)
library(tidyverse)
library(scales)
bd_cargo <- datos %>% count(Cargo) %>%
mutate(prop = n/sum(n))
bd_cargo
barra_cargo <- bd_cargo %>%
arrange(desc(n)) %>%
mutate(Cargo = factor(Cargo, level = Cargo)) %>%
ggplot(aes(Cargo, n))+
geom_bar(stat = "identity",
fill = "blue",
color ="black")
g_cargo2 <- barra_cargo +
geom_text(aes(label = comma((n))),
vjust = 0.1, color = "orange")+
labs(x = "Cargo",
y = "Número de Empleados") +
scale_y_continuous(labels = comma) +
theme_classic() +
coord_flip()
ggplotly(g_cargo2)
En Power BI
Como se puede observar en la gráfica de barras de la variable “Cargo”. El primer lugar lo ocupa el cargo de “Ejecutivo Ventas”, con 326 empleados, representa el 22.18% de la población de empleados. El segundo lugar lo ocupa el cargo “Investigador Científico” con 292 empleados que representan el 19.86%. El tercer lugar lo ocupa el cargo “Técnico Laboratorio” con 259 empleados que representan el 17.62%. Estos tres cargos reunidos suman 877 empleados que representan del total de 1.470 el 59.66% del total de la población.
De esta información podemos inferir que la empresa se encuentran en el sector de la industria farmacéutica, o en el campo de la investigación científica de la salud, ya que los cargos “Investigador Científico” con 292 empleados, “Técnico de laboratorio” 259 empleados, “Director de Manofactura” con 145 empleados, representan 47.35% del total de la población de empleados.
bd_estado_civil <- datos %>% count(Estado_Civil) %>%
mutate(prop = n/sum(n))
bd_estado_civil
barra_estado_civil <- bd_estado_civil %>%
arrange(desc(n)) %>%
mutate(Estado_Civil = factor(Estado_Civil, level = Estado_Civil)) %>%
ggplot(aes(Estado_Civil, n))+
geom_bar(stat = "identity",
fill = "blue",
color ="black")
g_estado_civil <- barra_estado_civil+
geom_text(aes(label = comma((n))),
vjust = -0.3, color = "orange")+
labs(x = "Estado Civil",
y = "Número de Empleados") +
scale_y_continuous(labels = comma) +
theme_classic()
ggplotly(g_estado_civil)
En Power BI
De la variable Estado Civil, se puede decir que mayoritariamente los empleados que están casados son 673 empleados que representan el 45.78%, seguida los que están solteros con 470 empleados representando el 31.97%, y en tercer lugar se encuentran los divorciados representando el 22.24% con 327 empleados. Esta última población podría ser objeto de estudio para identificar si las causas de divorcio tienen relación con el cargo y tiempo de vinculación de la empresa.
| Nivel | Categoría |
|---|---|
| 1 | Bajo |
| 2 | Medio |
| 3 | Elevado |
| 4 | Muy alto |
bd_satisfaccion_ambiental <- datos %>% count(Satisfacción_Ambiental) %>%
mutate(prop = n/sum(n))
bd_satisfaccion_ambiental
barra_satisfaccion_ambiental <- bd_satisfaccion_ambiental %>%
arrange(desc(n)) %>%
mutate(Satisfacción_Ambiental = factor(Satisfacción_Ambiental, level = Satisfacción_Ambiental)) %>%
ggplot(aes(Satisfacción_Ambiental, n))+
geom_bar(stat = "identity",
fill = "blue",
color ="black")
g_satisfaccion_ambiental <- barra_satisfaccion_ambiental+
geom_text(aes(label = comma((n))),
vjust = -0.3, color = "orange")+
labs(x = "Satisfacción Ambiental",
y = "Número de Empleados") +
scale_y_continuous(labels = comma) +
theme_classic()
ggplotly(g_satisfaccion_ambiental)
En Power BI
De la variable Satisfacción Ambiental, se puede observar que las categorías “Elevado” y “Muy Alto” con 899 empleados, representan el 61.16% del total de los empleados. Y las categorías “Bajo” con 284 empleados representando el 19.32% y la categoría “Medio” con 287 empleados representando el 19.52%. Ambas categorías representan el 38.84%. Situación que nos hace inferir una insatisfacción en la variable.
library(ggpubr)
g_01 <- ggplot(datos, aes(x = Ingreso_Mensual)) +
geom_histogram() + theme_bw()
g_02 <- ggplot(datos, aes(x = Estado_Civil)) +
geom_bar() + theme_bw()
ggarrange(g_01 , g_02, labels = c("A", "B"), ncol = 2, nrow = 1)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Se las anteriores gráficas se observa en el histograma que el ingreso mensual se concentra por debajo de los $5 millones y en el gráfico de barras un gran número de empleados se encuentra cansados, seguido de los solteros
bd_trabajos_anteriores <- datos %>% count(Trabajos_Anteriores) %>%
mutate(prop = n/sum(n))
bd_trabajos_anteriores
g_trabajos_anteriores <- ggplot(data = datos, aes(x = Trabajos_Anteriores, fill = as.factor(Trabajos_Anteriores))) +
geom_bar() +
xlab("Número de Trabajos Anteriores") +
ylab("Numeros de Empleados") +
ggtitle("Gráfico de Barras de la Variable Trabajos Anteriores") +
labs(fill = "Trab Ant")
ggplotly(g_trabajos_anteriores)
Con la gráfica anterior se puede observar que el 35.44%, es decir 521 empleados ha tenido un sólo trabajo. Con lo que se puede inferir que la rotación de empleados puede ser de personas con poca experiencia.
bd_viajes_negocios<- datos %>% count(`Viaje de Negocios`) %>%
mutate(prop = n/sum(n))
bd_viajes_negocios
g_viaje_negocios <- ggplot(data = datos, aes(x = `Viaje de Negocios`, fill = as.factor(`Viaje de Negocios`))) +
geom_bar() +
xlab("Número de Viaje de Negocios") +
ylab("Numeros de Empleados") +
ggtitle("Gráfico de Barras de la Variable Viaje de Negocios") +
labs(fill = "Viaje Negocios")
ggplotly(g_viaje_negocios)
En el gratifico de barras podemos observar que 1.043 empleados el 70.95% de las personas raramente viajan, y sólo el 18.84% de los empleados viajan frecuentemente, unos 277 empleados. Se podría inferir que en gran mayoría seríanlos Ejecutivo_venta.
bd_ingreso_mensual <- datos %>% count(Ingreso_Mensual) %>%
mutate(prop = n/sum(n))
bd_trabajos_anteriores
frecuencias <- as.data.frame(table(clases=factor(cut(datos$Ingreso_Mensual, breaks = 12))))
tabla=transform(frecuencias,FRECAC=cumsum(Freq),FRECREL=Freq/1470,RELACUM=cumsum(Freq/1470))
tabla
g_ingreso_mnesual <- ggplot(datos) +
geom_histogram(bins = 12, aes(x = Ingreso_Mensual), fill = 'steelblue') +
xlab("Ingreso Mensual") +
ylab("Frecuencia") +
ggtitle("Distribución de la variable Ingreso Mensual") +
theme_minimal()
ggplotly(g_ingreso_mnesual)
De la anterior tabla de frecuencia se puede decir que el 71.29% de los empleados se encuentra en el rango de salarial de 1.009 y 7.340.
Realizar un análisis bivariado (siempre contra la rotación). Nota: Los indicadores y gráficos se usan dependiendo del tipo de variable (cuantitativa vs cualitativa, cualitativa vs cualitativa). Comparar los resultados con la hipótesis planteada inicialmente y determinar si los datos apoyan o no la hipótesis.
g1 <- ggplot(data = datos, aes(x = Rotación, y = Ingreso_Mensual, fill = Rotación)) +
geom_boxplot() + theme_bw()
ggplotly(g1)
De acuerdo a la gráfica cajas, se puede observar que los trabajadores que si han rotado, devengan en promedio 3.202, unos 2.002 menos de los que no rotan que en promedio devengan 5.204.
g_biv_trab_ant_vs_Rota <- ggplot(datos) +
geom_histogram(bins = 50, aes(x = Trabajos_Anteriores, fill = Rotación), color = 'black') +
facet_grid(Rotación~., scales = 'free') +
xlab("Trabajos Anteriores") +
ylab("Frecuencia") +
ggtitle("Distribución de la variable Trabajos Anteriores para los distintos Rotación") +
theme_minimal()
ggplotly(g_biv_trab_ant_vs_Rota)
bd_trabajos_anteriores <- datos %>% count(Trabajos_Anteriores) %>%
mutate(prop = n/sum(n))
bd_trabajos_anteriores
datos$Trabajos_Anteriores <- factor(datos$Trabajos_Anteriores, levels = c("5", "9", "7", "6", "1", "8", "4", "0", "2","3"))
tabla_01 <- table(datos$Trabajos_Anteriores, datos$Rotación)
prop.table(tabla_01, margin = 1)*100
##
## No Si
## 5 74.60317 25.39683
## 9 76.92308 23.07692
## 7 77.02703 22.97297
## 6 77.14286 22.85714
## 1 81.19002 18.80998
## 8 87.75510 12.24490
## 4 87.76978 12.23022
## 0 88.32487 11.67513
## 2 89.04110 10.95890
## 3 89.93711 10.06289
De cuerdo a la tabla, se puede decir que los trabajadores que mas empleos han tenido, suelen rotar más.
datos$Cargo <- factor(datos$Cargo,levels = c("Representante_Ventas", "Tecnico_Laboratorio", "Recursos_Humanos", "Investigador_Cientifico","Ejecutivo_Ventas", "Representante_Salud", "Director_Manofactura", "Gerente", "Director_Investigación"))
tabla_02 <- table(datos$Cargo, datos$Rotación)
prop.table(tabla_02, margin = 1)*100
##
## No Si
## Representante_Ventas 60.240964 39.759036
## Tecnico_Laboratorio 76.061776 23.938224
## Recursos_Humanos 76.923077 23.076923
## Investigador_Cientifico 83.904110 16.095890
## Ejecutivo_Ventas 82.515337 17.484663
## Representante_Salud 93.129771 6.870229
## Director_Manofactura 93.103448 6.896552
## Gerente 95.098039 4.901961
## Director_Investigación 97.500000 2.500000
g_biv_cargo_vs_rotacion <- ggplot(data = datos, aes(x = Rotación, y = Cargo)) +
geom_jitter(aes(color = Rotación), size = 1, alpha = 0.7) +
xlab("Rotación") +
ylab("Cargo") +
ggtitle('Cargo vs Rotación') +
theme_minimal()
ggplotly(g_biv_cargo_vs_rotacion)
La gráfica bivariada de las variables Cargo y Rotación al igual que la tabla el cargo representante de ventas, tiene mayor rotación, seguido de técnico de laboratorio, recursos humanos e investigador científico.
Los cargos anteriormente mencionados son del área administrativa, lo hace inferir que hay factores de ambiente laboral que no hace que estos cargos que generalmente son de estabilidad laboral, rotan más que el de Ejecutivo de Ventas, que sería lo normal en cualquier empresa.
datos$Estado_Civil <- factor(datos$Estado_Civil, levels = c("Soltero", "Casado", "Divorciado"))
tabla_03 <- table(datos$Estado_Civil, datos$Rotación)
prop.table(tabla_03, margin = 1)*100
##
## No Si
## Soltero 74.46809 25.53191
## Casado 87.51857 12.48143
## Divorciado 89.90826 10.09174
g_biv_est_civil_vs_rotacion <- ggplot(data = datos, aes(x = Rotación, y = Estado_Civil)) +
geom_jitter(aes(color = Rotación), size = 1, alpha = 0.7) +
xlab("Rotación") +
ylab("Estado Civil") +
ggtitle('Rotacion vs Cargo') +
theme_minimal()
ggplotly(g_biv_est_civil_vs_rotacion)
La tabla y la gráfica permite evidenciar que en la variable “Estado Civil”, los solteros son los que más rotan en un 25.5%, superando conjuntamente a los casados y divorciados.
datos$`Viaje de Negocios` <- factor(datos$`Viaje de Negocios`, levels = c("Frecuentemente", "Raramente", "No_Viaja"))
tabla_04 <- table(datos$`Viaje de Negocios`, datos$Rotación)
prop.table(tabla_04, margin = 1)*100
##
## No Si
## Frecuentemente 75.09025 24.90975
## Raramente 85.04314 14.95686
## No_Viaja 92.00000 8.00000
g_biv_viaje_neog_vs_rotacion <- ggplot(data = datos, aes(x = Rotación, y = `Viaje de Negocios`)) +
geom_jitter(aes(color = Rotación), size = 1, alpha = 0.7) +
xlab("Rotación") +
ylab("Viaje de Negocios") +
ggtitle('Rotacion vs Viaje de Negocios') +
theme_minimal()
ggplotly(g_biv_viaje_neog_vs_rotacion)
Como se evidencia en la tabla y en la gráfica, los que viajan frecuentemente (24.90%) y raramente (14.96%), son los de más alta rotación. Y en conjunto suman el 39.86% de la variable Viaje de Negocios. Un porcentaje muy alto en la rotación.
g_biv_viaje_neog_vs_rotacion <- ggplot(data = datos, aes(x = Estado_Civil, y = `Viaje de Negocios`)) +
geom_jitter(aes(color = Rotación), size = 1, alpha = 0.7) +
xlab("Estado Civil") +
ylab("Viaje de Negocios") +
ggtitle('Rotacion - Viaje de Negocios- Estado Civil') +
theme_minimal()
ggplotly(g_biv_viaje_neog_vs_rotacion)
En el cruce de tres variables “Estado Civil”, “Viaje de Negocios” y “Rotación”, se evidencia como los solteros que viajan frecuentemente, y raramente son los que mas rotan.
En las conclusiones se discute sobre cual sería la estrategia para disminuir la rotación en la empresa.
Ejemplo: Mejorar el ambiente laboral, los incentivos económicos, distribuir la carga de horas extra (menos turnos y más personal).
La estrategia de acuerdo al análisis exploratorio de datos es el siguiente:
Se evidencia una alta rotación en los trabajadores que son solteros, en los que han tenido más de 5 empleos, y en los que se encuentran en áreas administrativas, adicional los ingresos promedio de los que han rotado tiene un variación del 62.52% menos.
Por lo anterior es importante, realizar una análisis en referencia a los empleados que son solteros, que ocupan cargos administrativos, que antes de ingresar hayan tenido más de 5 empleos anteriores y su salario este por debajo del promedio.
Lo anterior obedece a que el promedio de años de antigüedad laboral es de 5, y a no ser que la empresa tenga poco tiempo de iniciar operaciones es un promedio muy bajo para el número de empleados. Lo que puede significar que se tiene poco sentido de pertenencia y que hay pocos incentivos prestacionales y labores que desmotiven el aceptar otras ofertas laborales.Situación que se demuestra con la variable “Satisfacción Ambiental”.
Por lo anterior se aceptan las hipótesis de las variables categóricas “cargo”, “estado civil”. La variable “satisfacción ambiental” aunque se rechaza la hipótesis se debe contemplar en conjunto las categorías “bajo” y “medio”.
En el punto 3.6. Se muestra que los solteros que viajan frecuentemente y raramente son los que mas rotan por lo que todos los esfuerzo y estrategias deben ir para esta población en especial, sin descuidar, los casados y divorciados. Estas estrategias deben estar encaminadas al bienestar laboral y social, mejorando las condiciones laborales, en referencia a disminuir el numero de viajes para que la población de solteros, tengan una mayor vida social, mejorar los incentivos económicos para que no vean la necesidad de buscar un empleo mejor remunerado y crear sentido de pertenencia con la empresa para evitar el costo de las curvas de entrenamiento y aprendizaje.