En una organización, se busca comprender y prever los factores que influyen en la rotación de empleados entre distintos cargos. La empresa ha recopilado datos históricos sobre el empleo de sus trabajadores, incluyendo variables como la antigüedad en el cargo actual, el nivel de satisfacción laboral,el salario actual, edad y otros factores relevantes. La gerencia planea desarrollar un modelo de regresión logística que permita estimar la probabilidad de que un empleado cambie de cargo en el próximo período y determinar cuales factores indicen en mayor proporción a estos cambios.
Con esta información, la empresa podrá tomar medidas proactivas para retener a su talento clave, identificar áreas de mejora en la gestión de recursos humanos y fomentar un ambiente laboral más estable y tranquilo. La predicción de la probabilidad de rotación de empleados ayudará a la empresa a tomar decisiones estratégicas informadas y a mantener un equipo de trabajo comprometido y satisfecho en sus roles actuales.
library(paqueteMODELOS)
## Loading required package: boot
## Loading required package: broom
## Warning: package 'broom' was built under R version 4.3.3
## Loading required package: GGally
## Warning: package 'GGally' was built under R version 4.3.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.3.3
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
## Loading required package: gridExtra
## Warning: package 'gridExtra' was built under R version 4.3.3
## Loading required package: knitr
## Warning: package 'knitr' was built under R version 4.3.3
## Loading required package: summarytools
library(dplyr)
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:gridExtra':
##
## combine
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data("rotacion")
colnames(rotacion)
## [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"
Género: En muchas organizaciones, dependiendo de su naturaleza, puede haber una preferencia por empleados de un género específico. Además, ciertos trabajos pueden requerir habilidades físicas que favorecen a un género sobre otro, lo que podría influir en la permanencia del empleado en la empresa.
Estado Civil: Las responsabilidades familiares y personales pueden desempeñar un papel importante en la decisión de un empleado de seguir en la empresa o buscar nuevas oportunidades.
Cargo: El nivel de estrés varía según el cargo y el área de trabajo, lo que puede llevar a que algunos empleados decidan abandonar la empresa si la presión es excesiva.
Edad: Los empleados más jóvenes, al tener menos responsabilidades familiares o financieras, suelen cambiar de trabajo con mayor facilidad, ya que tienen menos obstáculos para hacerlo.
Ingreso_Mensual: El salario es uno de los factores más importantes en la retención de empleados. Un ingreso mensual bajo podría aumentar la posibilidad de que un empleado busque otro cargo o empleo.
Distancia al Trabajo: Es probable que los empleados que viven más lejos de la oficina tengan mayor tendencia a cambiar de empleo en busca de una ubicación más conveniente.
Rotación y Edad:Se puede analizar si la edad influye en la rotación. Por ejemplo, los empleados más jóvenes pueden tener más probabilidades de rotar, ya que buscan más oportunidades para crecer y avanzar en su carrera, mientras que los empleados mayores podrían tener más estabilidad.Hipótesis: “La rotación es más común en empleados jóvenes que en los mayores”.
Estado Civil:Los empleados solteros podrían tener una mayor disposición para cambiar de cargo en comparación con los casados o divorciados, quienes podrían buscar más estabilidad. Hipótesis: “Los empleados solteros son más propensos a cambiar de cargo que los casados o divorciados debido a menores responsabilidades familiares”.
Distancia al Trabajo:La distancia desde el hogar al trabajo puede influir en la decisión de cambiar de cargo o incluso abandonar la empresa. Hipótesis: “A mayor distancia de la casa al trabajo, mayor es la probabilidad de que un empleado decida cambiar de cargo o buscar un nuevo empleo”.
Ingreso Mensual:El nivel de ingreso puede ser un fuerte determinante en la rotación. Los empleados con salarios más bajos podrían estar más inclinados a buscar otras oportunidades. Hipótesis: “Los empleados con ingresos bajos tienen mayor probabilidad de rotación debido a la insatisfacción con su compensación económica”.
rotacion_seleccionada <- rotacion[,c("Rotación", "Genero", "Estado_Civil", "Distancia_Casa", "Ingreso_Mensual", "Edad", "Cargo")]
rotacion_seleccionada<-as.data.frame(rotacion_seleccionada)
head(rotacion_seleccionada)
## Rotación Genero Estado_Civil Distancia_Casa Ingreso_Mensual Edad
## 1 Si F Soltero 1 5993 41
## 2 No M Casado 8 5130 49
## 3 Si M Soltero 2 2090 37
## 4 No F Casado 3 2909 33
## 5 No M Casado 2 3468 27
## 6 No M Soltero 2 3068 32
## Cargo
## 1 Ejecutivo_Ventas
## 2 Investigador_Cientifico
## 3 Tecnico_Laboratorio
## 4 Investigador_Cientifico
## 5 Tecnico_Laboratorio
## 6 Tecnico_Laboratorio
Ahora vamos a validar los datos faltantes de esas variables
Faltantes<-colSums(is.na(rotacion_seleccionada))
as.data.frame(Faltantes)
## Faltantes
## Rotación 0
## Genero 0
## Estado_Civil 0
## Distancia_Casa 0
## Ingreso_Mensual 0
## Edad 0
## Cargo 0
Realiza un análisis univariado (caracterización) de la información contenida en la base de datos rotacion.
Analísis variable Genero
p_genero <- ggplot(rotacion, aes(x = Genero)) +
geom_bar(fill = "red", color = "red", aes(y = ..count..)) +
geom_text(aes(y = ..count.., label = scales::percent(..count../sum(..count..))), stat="count", position = position_dodge(0.9), vjust = -0.5) +
labs(title = "Gráfico de variable: Genero", x = "Genero", y = "Frecuencia") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
print(p_genero)
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
kable(table(rotacion$Genero))
Var1 | Freq |
---|---|
F | 588 |
M | 882 |
Se observa que en la base el 60% de los usuarios son masculinos, es decir que hay una predominancia de los hombres en la organización.
Analísis variable Antigüedad_Cargo
kable(table(rotacion$Cargo))
Var1 | Freq |
---|---|
Director_Investigación | 80 |
Director_Manofactura | 145 |
Ejecutivo_Ventas | 326 |
Gerente | 102 |
Investigador_Cientifico | 292 |
Recursos_Humanos | 52 |
Representante_Salud | 131 |
Representante_Ventas | 83 |
Tecnico_Laboratorio | 259 |
p_cargo <- ggplot(rotacion, aes(x = Cargo)) +
geom_bar(fill = "skyblue", color = "skyblue") +
geom_text(aes(y = ..count.., label = scales::percent(..count../sum(..count..))), stat="count", position = position_dodge(0.9), vjust = -0.5) +
labs(title = "Gráfico de barras para Carg", x = "Cargo", y = "Frecuencia") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
print(p_cargo)
El puesto de ejecutivo de ventas es el más común, representando el 22,18%, seguido por el investigador científico con un 19,86% y el técnico de laboratorio con un 17,62%. En contraste, el cargo menos común es el de Recursos Humanos, que solo alcanza un 3,54%. El análisis de las frecuencias de los diferentes roles sugiere que la organización tiene una clara orientación hacia la venta y la investigación. Mientras que los roles operativos y técnicos son predominantes, las posiciones directivas son menos numerosas, la estructura de roles revela una empresa que prioriza la eficiencia operativa y la innovación, con un potencial significativo para desarrollar una estrategia más equilibrada que incluya una mayor inversión en liderazgo y gestión del talento.
Analísis variable Estado Civil
kable(table(rotacion$Estado_Civil))
Var1 | Freq |
---|---|
Casado | 673 |
Divorciado | 327 |
Soltero | 470 |
p_civil<- ggplot(rotacion, aes(x = Estado_Civil)) +
geom_bar(fill = "green", color = "green") +
geom_text(aes(y = ..count.., label = scales::percent(..count../sum(..count..))), stat="count", position = position_dodge(0.9), vjust = -0.5) +
labs(title = "Gráfico de barras para Estado_Civil", x = "Estado_Civil", y = "Frecuencia") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
print(p_civil)
La tabla muestra que la mayoria de las personas de nuestra data son casadas, en total un 45,8% son casadas, el 32% son soteras y el 22,2% son divorciadas
Analísis variable Edad
# Estadísticas descriptivas y histograma para Edad
summary(rotacion$Edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18.00 30.00 36.00 36.92 43.00 60.00
median_val_hist <- median(rotacion$Edad)
mean_val_hist <- mean(rotacion$Edad)
p_edad <- ggplot(rotacion, aes(x = Edad)) +
geom_histogram(aes(y = ..density..), fill = "#FFB6C1", color = "black", alpha = 0.7) +
geom_density(alpha = 0.2, fill = "#006400") +
geom_vline(aes(xintercept = median_val_hist), color = "black", linetype = "dashed", size = 0.5) +
geom_vline(aes(xintercept = mean_val_hist), color = "red", linetype = "dashed", size = 0.5) +
labs(title = "Histograma para Edad", x = "Edad", y = "Densidad") +
annotate("text", x = mean_val_hist + 2, y = 0.02, label = "Media", color = "red") +
annotate("text", x = median_val_hist - 2, y = 0.02, label = "Mediana", color = "black") +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
print(p_edad)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
El análisis de los datos muestra que la media es aproximadamente 36.92 y
la mediana es 36, lo que indica que ambas medidas de tendencia central
son similares y que los datos no están muy sesgados. La desviación
estándar de 9.14 sugiere una dispersión moderada alrededor de la media,
indicando cierta diversidad en las observaciones. Además, el rango de
los datos varía entre un mínimo de 18 y un máximo de 60, lo que refleja
diferencias significativas entre los valores. En conjunto, los datos
presentan una tendencia central clara con una variabilidad notable.
p_boxedad <- ggplot(rotacion, aes(y = Edad)) +
geom_boxplot(fill = "#006400", color = "black", width = 0.5, outlier.shape = NA) +
geom_jitter(aes(x = 0), width = 0.25, size = 2, alpha = 0.7, color = "black") +
labs(
title = "Boxplot para Edad",
y = "Edad",
x = NULL
) +
theme_minimal()
print(p_boxedad)
El 50% de nuestros datos se concentran entro los 30 y 43 años de edad.
Analísis variable Ingreso Mensual
# Estadísticas descriptivas y histograma para Edad
summary(rotacion$Ingreso_Mensual)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1009 2911 4919 6503 8379 19999
median_val_hist <- median(rotacion$Ingreso_Mensual)
mean_val_hist <- mean(rotacion$Ingreso_Mensual)
p_ingreso <- ggplot(rotacion, aes(x = Ingreso_Mensual)) +
geom_histogram(aes(y = ..density..), fill = "#FFB6C1", color = "black", alpha = 0.7) +
geom_density(alpha = 0.2, fill = "#006400") +
geom_vline(aes(xintercept = median_val_hist), color = "blue", linetype = "dashed", size = 0.5) +
geom_vline(aes(xintercept = mean_val_hist), color = "red", linetype = "dashed", size = 0.5) +
labs(title = "Histograma para Ingreso_Mensual", x = "Ingreso_Mensual", y = "Densidad") +
annotate("text", x = mean_val_hist + 500, y = 0.00002, label = "Media", color = "red") +
annotate("text", x = median_val_hist - 500, y = 0.00002, label = "Mediana", color = "blue") +
theme_minimal()
print(p_ingreso)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
p_ingreso <- ggplot(rotacion, aes(y = Edad)) +
geom_boxplot(fill = "#600200", color = "black", width = 0.5, outlier.shape = NA) +
geom_jitter(aes(x = 0), width = 0.25, size = 2, alpha = 0.7, color = "black") +
labs(
title = "Boxplot para Edad",
y = "Edad",
x = NULL
) +
theme_minimal()
print(p_ingreso)
En conjunto, estos valores indican una distribución con una tendencia central (mediana) de 4919 y una media más alta de 6503, lo que sugiere la presencia de algunos valores extremos. La diferencia entre el primer y tercer cuartil (2911 a 8379) muestra una dispersión significativa en los datos. Esto podría implicar que el conjunto de datos tiene una variedad de observaciones, desde bajas hasta muy altas.
Analísis variable Distancia_Casa
summary(rotacion$Distancia_Casa)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 2.000 7.000 9.193 14.000 29.000
median_val_hist <- median(rotacion$Distancia_Casa)
mean_val_hist <- mean(rotacion$Distancia_Casa)
p_distancia <- ggplot(rotacion, aes(x = Distancia_Casa)) +
geom_histogram(aes(y = ..density..), fill = "#FFB6C1", color = "black", alpha = 0.7) +
geom_density(alpha = 0.2, fill = "#006400") +
geom_vline(aes(xintercept = median_val_hist), color = "blue", linetype = "dashed", size = 0.5) +
geom_vline(aes(xintercept = mean_val_hist), color = "red", linetype = "dashed", size = 0.5) +
labs(title = "Histograma para Distancia_Casa", x = "Distancia_Casa", y = "Densidad") +
annotate("text", x = mean_val_hist + 2, y = 0.02, label = "Media", color = "red") +
annotate("text", x = median_val_hist - 2, y = 0.02, label = "Mediana", color = "blue") +
theme_minimal()
print(p_distancia)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
p_distancia <- ggplot(rotacion, aes(y = Edad)) +
geom_boxplot(fill = "#007200", color = "black", width = 0.5, outlier.shape = NA) +
geom_jitter(aes(x = 0), width = 0.25, size = 2, alpha = 0.7, color = "black") +
labs(
title = "Boxplot para Edad",
y = "Edad",
x = NULL
) +
theme_minimal()
print(p_distancia)
En conjunto, los datos muestran una distribución que se extiende desde
un mínimo de 1 hasta un máximo de 29, con una mediana de 7 y una media
de aproximadamente 9.19. La diferencia entre el primer cuartil (2) y el
tercer cuartil (14) sugiere una dispersión moderada en los datos. La
media es mayor que la mediana, lo que indica la presencia de algunos
valores extremos que influyen en el promedio.
Realiza un análisis de bivariado en donde la variable respuesta sea rotacion codificada de la siguiente manera (y=1 es si rotación, y=0 es no rotación). Con base en estos resultados identifique cuales son las variables determinantes de la rotación e interpretar el signo del coeficiente estimado. Compare estos resultados con la hipotesis planteada en el punto 2.
rotacion_biv=rotacion
rotacion_biv$Rotación=as.numeric(rotacion_biv$Rotación=="Si")
rotacion_seleccionada$y<-ifelse(rotacion_seleccionada$Rotación=="Si",1,0)
Una vez Codificamos la variables asignando los 1 y 0.se realiza un análisis bivariado a cada una de las variables seleccionadas. Para lo anterior, se grafican las variables teniendo como resultado la variable rotación
Genero
m_genero <- glm(y ~ Genero, data = rotacion_seleccionada, family = binomial)
round(summary(m_genero)$coefficients,2)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.75 0.12 -15.07 0.00
## GeneroM 0.17 0.15 1.13 0.26
library(CGPfunctions)
## Warning: package 'CGPfunctions' was built under R version 4.3.3
## Warning in .recacheSubclasses(def@className, def, env): undefined subclass
## "ndiMatrix" of class "replValueSp"; definition not updated
library(plotly)
## Warning: package 'plotly' was built under R version 4.3.3
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(purrr)
## Warning: package 'purrr' was built under R version 4.3.3
library(tidyselect)
## Warning: package 'tidyselect' was built under R version 4.3.3
PlotXTabs2(data = rotacion_seleccionada,x = Genero,y = Rotación)
Los resultados del modelo indican que el intercepto es de -1.75, con un
valor p de 0.00, lo que sugiere que la probabilidad de rotación es
significativamente baja para la categoría de referencia, que en este
caso sería el género femenino.
Por otro lado, el coeficiente asociado al género masculino (GeneroM) es de 0.17, lo que indica que ser hombre incrementa ligeramente el logaritmo de las probabilidades de rotación en comparación con las mujeres. Sin embargo, este efecto no es estadísticamente significativo, ya que el valor p correspondiente es de 0.26, superior al umbral comúnmente aceptado de 0.05. En otras palabras, no hay evidencia suficiente para afirmar que el género tiene un impacto significativo en la probabilidad de rotación.
Cargo
m_cargo <- glm(y ~ Cargo, data = rotacion_seleccionada, family = binomial)
round(summary(m_cargo)$coefficients,2)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.66 0.72 -5.12 0.00
## CargoDirector_Manofactura 1.06 0.79 1.35 0.18
## CargoEjecutivo_Ventas 2.11 0.73 2.89 0.00
## CargoGerente 0.70 0.85 0.82 0.41
## CargoInvestigador_Cientifico 2.01 0.73 2.74 0.01
## CargoRecursos_Humanos 2.46 0.79 3.12 0.00
## CargoRepresentante_Salud 1.06 0.80 1.33 0.18
## CargoRepresentante_Ventas 3.25 0.75 4.33 0.00
## CargoTecnico_Laboratorio 2.51 0.73 3.43 0.00
PlotXTabs2(data = rotacion_seleccionada,x = Cargo,y = Rotación)
los cargos como “Ejecutivo de Ventas”, “Investigador Científico”,
“Recursos Humanos”, “Representante de Ventas”, y “Técnico de
Laboratorio” tienen un efecto positivo y significativo en la
probabilidad del evento de interés, lo que sugiere que las personas en
estos cargos son más propensas a una rotacion. Por otro lado, los cargos
como “Director de Manufactura”, “Gerente” y “Representante de Salud” no
muestran un efecto estadísticamente significativo, lo que implica que el
cargo no es un predictor fuerte del evento para estos grupos.
Estado_Civil
m_estado_civil <- glm(y ~ Estado_Civil, data = rotacion_seleccionada, family = binomial)
round(summary(m_estado_civil)$coefficients, 2)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.95 0.12 -16.70 0.00
## Estado_CivilDivorciado -0.24 0.22 -1.10 0.27
## Estado_CivilSoltero 0.88 0.16 5.57 0.00
PlotXTabs2(data = rotacion_seleccionada,x = Estado_Civil ,y = Rotación)
En cuanto a las personas divorciadas, el coeficiente estimado es de
-0.24, lo que indica una probabilidad ligeramente menor de experimentar
una rotacion en comparación con las personas casadas. Sin embargo, esta
diferencia no es estadísticamente significativa, ya que el valor p es de
0.27, lo que implica que no se puede concluir con certeza que el estado
civil de divorciado tenga un impacto importante en el evento.Por otro
lado, el estado civil de soltero muestra un coeficiente positivo de
0.88, lo que sugiere que las personas solteras tienen una probabilidad
significativamente mayor de rotacion en comparación con las casadas.
En resumen, mientras que ser soltero está fuertemente relacionado con una mayor probabilidad de que ocurra rotacion, no se encontró evidencia estadística que sugiera que las personas divorciadas difieran significativamente de las casadas en cuanto a este resultado. Estos hallazgos proporcionan información útil sobre cómo el estado civil afecta o no el tema de la rotacion.
Distancia_Casa
m_distancia <- glm(y ~ Distancia_Casa, data = rotacion_seleccionada, family = binomial)
round(summary(m_distancia)$coefficients, 2)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.89 0.11 -16.97 0
## Distancia_Casa 0.02 0.01 2.97 0
PlotXTabs2(data = rotacion_seleccionada,x = Distancia_Casa ,y = Rotación)
Por cada unidad adicional de distancia (ya sea un kilómetro o una milla)
desde la casa al lugar de trabajo, la estimación aumenta en 0.02. Este
resultado es estadísticamente significativo, lo que significa que entre
mas lejos se ubique la casa del empleado mayo es la posibilidad de
cambiar de trabajo.
Edad
m_Edad <- glm(y ~ Edad, data = rotacion_seleccionada, family = binomial)
round(summary(m_Edad)$coefficients, 2)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.21 0.31 0.67 0.5
## Edad -0.05 0.01 -6.01 0.0
rotacion_biv$m_Edad=cut(rotacion_biv$Edad,breaks = c(0,30,40,50,60))
PlotXTabs2(data = rotacion_biv,x = m_Edad,y = Rotación)
El análisis muestra que, aunque el intercepto del modelo no es
significativo, la edad tiene un efecto significativo en la probabilidad
de que ocurra el evento de interés. A medida que las personas envejecen,
su probabilidad de experimentar el evento disminuye de manera
significativa. Este hallazgo sugiere que la edad podría ser un factor
relevante a considerar en las intervenciones o políticas diseñadas para
abordar el evento estudiado.
Ingreso Mensual
m_ingreso_mensual <- glm(y ~ Ingreso_Mensual, data = rotacion_seleccionada, family = binomial)
round(summary(m_ingreso_mensual)$coefficients, 4)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.9291 0.1292 -7.1911 0
## Ingreso_Mensual -0.0001 0.0000 -5.8793 0
rotacion_biv$Ingreso_Mensual_acu=cut(rotacion_biv$Ingreso_Mensual,breaks = c(1000,4000,8000,12000,16000,20000))
PlotXTabs2(data = rotacion_biv,x = Ingreso_Mensual_acu,y = Rotación)
Las personas que ganan menos a 4 millones son las personas que mas
rotación presentan con un 25% y las personas que menos rotan son las que
ganan por encima de 16 millones. Esto confirma nuestra hipotesis de que
las personas con menos ingresos buscan cambiar rapidamente a un puesto
con mejor remuneración.
Realiza la estimación de un modelo de regresión logístico en el cual la variable respuesta es rotacion (y=1 es si rotación, y=0 es no rotación) y las covariables las 6 seleccionadas en el punto 1. Interprete los coeficientes del modelo y la significancia de los parámetros.
modelo_logistico <- glm(y ~ Genero + Estado_Civil + Cargo + Distancia_Casa + Ingreso_Mensual + Edad , data = rotacion_seleccionada, family = binomial)
summary(modelo_logistico)
##
## Call:
## glm(formula = y ~ Genero + Estado_Civil + Cargo + Distancia_Casa +
## Ingreso_Mensual + Edad, family = binomial, data = rotacion_seleccionada)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.430e+00 1.014e+00 -3.384 0.000715 ***
## GeneroM 1.440e-01 1.559e-01 0.924 0.355659
## Estado_CivilDivorciado -2.060e-01 2.235e-01 -0.922 0.356660
## Estado_CivilSoltero 8.166e-01 1.654e-01 4.938 7.91e-07 ***
## CargoDirector_Manofactura 1.013e+00 8.682e-01 1.166 0.243502
## CargoEjecutivo_Ventas 2.006e+00 8.254e-01 2.430 0.015078 *
## CargoGerente 7.663e-01 8.561e-01 0.895 0.370729
## CargoInvestigador_Cientifico 1.874e+00 9.092e-01 2.061 0.039328 *
## CargoRecursos_Humanos 2.547e+00 9.336e-01 2.728 0.006368 **
## CargoRepresentante_Salud 1.039e+00 8.750e-01 1.187 0.235256
## CargoRepresentante_Ventas 3.027e+00 9.370e-01 3.230 0.001237 **
## CargoTecnico_Laboratorio 2.398e+00 9.066e-01 2.645 0.008178 **
## Distancia_Casa 2.908e-02 8.888e-03 3.272 0.001068 **
## Ingreso_Mensual 1.858e-05 4.378e-05 0.424 0.671352
## Edad -2.530e-02 9.850e-03 -2.569 0.010199 *
## ---
## 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: 1155.9 on 1455 degrees of freedom
## AIC: 1185.9
##
## Number of Fisher Scoring iterations: 6
El modelo de regresión logística se aplicó para analizar factores que influyen en la rotación laboral, considerando variables como género, estado civil, cargo, distancia a la casa, ingreso mensual y edad. A continuación, se resumen los hallazgos más relevantes:
Intercepto: Altamente significativo (-3.430), indicando que la probabilidad del evento es baja en ausencia de otros factores.
Género: El coeficiente para masculino (0.144) no es significativo (p = 0.356).
Estado Civil:
Cargo:
Distancia a la Casa: Aumenta la probabilidad del evento (0.029, p = 0.001).
Ingreso Mensual: No significativo (0.00001858, p = 0.671).
Edad: Disminuye la probabilidad del evento (-0.0253, p = 0.010).
En resumen, las variables significativas que afectan la rotación laboral incluyen el estado civil (ser soltero), ciertos cargos (como ejecutivo de ventas y recursos humanos), la distancia a la casa y la edad. Estos factores deben ser considerados en las estrategias para gestionar la rotación en la organización.
Evaluar el poder predictivo del modelo con base en la curva ROC y el AUC.
pred_probabilidades <- predict(modelo_logistico, type = "response")
library(pROC)
## Warning: package 'pROC' was built under R version 4.3.3
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
curva_roc <- roc(rotacion_seleccionada$y, pred_probabilidades)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
Graficar la Curva ROC:
plot(curva_roc, main="Curva ROC", col="red", lwd=2)
abline(h=0, v=1, col="black")
El AUC es del 71.8%, lo que sugiere que el modelo funciona bien para diferenciar entre los empleados con alta probabilidad de rotación y aquellos que no la tienen. Esto significa que tiene un poder predictivo moderado para distinguir entre las dos categorías de la variable dependiente, ya que es superior a 0.5, que es el umbral que indica predicciones aleatorias. Además, el intervalo de confianza del 95% sugiere que hay una alta probabilidad de que el verdadero AUC se encuentre entre el 68.2% y el 75.4%.
Realiza una predicción la probabilidad de que un individuo (hipotético) rote y defina un corte para decidir si se debe intervenir a este empleado o no (posible estrategia para motivar al empleado).
Predecir un individuo con las siguientes características:
Genero: Hombre Estado civil: “Soltero” Cargo: Ventas Edad: 20 Antiguedad en el cargo: 2 años Ingreso mensual: 5000 Y se hace la predicción con estos valores.
Empleadox <- data.frame(
Genero = "M",
Estado_Civil = "Soltero",
Cargo = "Ejecutivo_Ventas",
Distancia_Casa = 5,
Ingreso_Mensual = 5000,
Edad = 32)
Una vez definidas las variables procedemos a ejecutar nuestro modelo.
prediccion <- predict(modelo_logistico, newdata = Empleadox, type = "response")
print(prediccion)
## 1
## 0.2622282
El resultado indica que el individuo tiene una probabilidad de 26.2% de rotar, es decir las probabilidades son bajas.
Empleadox <- data.frame(
Genero = "F",
Estado_Civil = "Soltero",
Cargo = "Tecnico_Laboratorio",
Distancia_Casa = 5,
Ingreso_Mensual = 5000,
Edad = 32)
prediccion <- predict(modelo_logistico, newdata = Empleadox, type = "response")
print(prediccion)
## 1
## 0.3128199
El resultado indica que el individuo tiene una probabilidad de 31.2% de rotar, es decir las probabilidades son bajas.
Al examinar los resultados relacionados con el estado civil, se observa que las personas solteras tienden a rotar más. Esto se puede atribuir a la búsqueda de nuevas oportunidades y a la falta de responsabilidades personales que les impidan cambiar de trabajo. Muchos jóvenes no permanecen en sus empleos porque no ven un futuro en ellos. Por lo tanto, se sugiere motivar a estos empleados mediante incentivos económicos, oportunidades educativas y otros beneficios que promuevan su desarrollo personal y profesional. Además, es importante ofrecer una ruta de carrera dentro de la empresa que les permita visualizar sus posibilidades de crecimiento según su desempeño
Por otro lado, las variables “Ingreso_Mensual” y “Distancia_Casa” son áreas donde la empresa puede tener un impacto directo. Ajustar los salarios o incentivar la compra de vivienda cercana al trabajo podría ser una estrategia efectiva para reducir la rotación de empleados. Aunque la implementación de estas medidas puede requerir una inversión inicial, es fundamental que la empresa considere los beneficios a largo plazo. La rotación de personal implica costos, como la pérdida de conocimiento especializado, una disminución en la productividad durante la adaptación de los nuevos empleados y el tiempo que necesitan para alcanzar su máximo rendimiento. Por lo tanto, cualquier estrategia que logre disminuir la rotación podría resultar rentable para la organización.
El salario también influye significativamente en la rotación, ya que las personas que ganan hasta dos salarios mínimos son las más propensas a dejar sus trabajos. La empresa debe revisar su estructura salarial y ajustarla si es necesario, además de fomentar que los empleados mejoren su desempeño y continúen su educación para ascender dentro de la organización y obtener mayores ingresos. Otra solución podría ser ofrecer bonos en fechas especiales o recompensar económicamente a aquellos que cumplan ciertas metas.