ACTIVIDAD 3: Modelos lineales generalizados

Author

CRISTHIAN CAMILO IBAÑEZ BERSINGER

Problema: Rotación de cargo

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.

A continuación se describen los pasos que la gerencia ha propuesto para el análisis:

1. Selección de variables

Seleccione 3 variables categóricas (distintas de rotación) y 3 variables cuantitativas, que se consideren estén relacionadas con la rotación.

# Cargar las bibliotecas necesarias
suppressMessages(library(paqueteMODELOS))
suppressMessages(library(dplyr))
suppressMessages(library(ggplot2))
suppressMessages(library(tidyverse))
suppressMessages(library(plotly))
suppressMessages(library(knitr))
suppressMessages(library(kableExtra))

# Cargar los datos
data("rotacion")

# Resumen de los datos
cat("Resumen de los datos:\n")
Resumen de los datos:
knitr::kable(summary(rotacion), format = "markdown")
Rotación Edad Viaje de Negocios Departamento Distancia_Casa Educación Campo_Educación Satisfacción_Ambiental Genero Cargo Satisfación_Laboral Estado_Civil Ingreso_Mensual Trabajos_Anteriores Horas_Extra Porcentaje_aumento_salarial Rendimiento_Laboral Años_Experiencia Capacitaciones Equilibrio_Trabajo_Vida Antigüedad Antigüedad_Cargo Años_ultima_promoción Años_acargo_con_mismo_jefe
Length:1470 Min. :18.00 Length:1470 Length:1470 Min. : 1.000 Min. :1.000 Length:1470 Min. :1.000 Length:1470 Length:1470 Min. :1.000 Length:1470 Min. : 1009 Min. :0.000 Length:1470 Min. :11.00 Min. :3.000 Min. : 0.00 Min. :0.000 Min. :1.000 Min. : 0.000 Min. : 0.000 Min. : 0.000 Min. : 0.000
Class :character 1st Qu.:30.00 Class :character Class :character 1st Qu.: 2.000 1st Qu.:2.000 Class :character 1st Qu.:2.000 Class :character Class :character 1st Qu.:2.000 Class :character 1st Qu.: 2911 1st Qu.:1.000 Class :character 1st Qu.:12.00 1st Qu.:3.000 1st Qu.: 6.00 1st Qu.:2.000 1st Qu.:2.000 1st Qu.: 3.000 1st Qu.: 2.000 1st Qu.: 0.000 1st Qu.: 2.000
Mode :character Median :36.00 Mode :character Mode :character Median : 7.000 Median :3.000 Mode :character Median :3.000 Mode :character Mode :character Median :3.000 Mode :character Median : 4919 Median :2.000 Mode :character Median :14.00 Median :3.000 Median :10.00 Median :3.000 Median :3.000 Median : 5.000 Median : 3.000 Median : 1.000 Median : 3.000
NA Mean :36.92 NA NA Mean : 9.193 Mean :2.913 NA Mean :2.722 NA NA Mean :2.729 NA Mean : 6503 Mean :2.693 NA Mean :15.21 Mean :3.154 Mean :11.28 Mean :2.799 Mean :2.761 Mean : 7.008 Mean : 4.229 Mean : 2.188 Mean : 4.123
NA 3rd Qu.:43.00 NA NA 3rd Qu.:14.000 3rd Qu.:4.000 NA 3rd Qu.:4.000 NA NA 3rd Qu.:4.000 NA 3rd Qu.: 8379 3rd Qu.:4.000 NA 3rd Qu.:18.00 3rd Qu.:3.000 3rd Qu.:15.00 3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.: 9.000 3rd Qu.: 7.000 3rd Qu.: 3.000 3rd Qu.: 7.000
NA Max. :60.00 NA NA Max. :29.000 Max. :5.000 NA Max. :4.000 NA NA Max. :4.000 NA Max. :19999 Max. :9.000 NA Max. :25.00 Max. :4.000 Max. :40.00 Max. :6.000 Max. :4.000 Max. :40.000 Max. :18.000 Max. :15.000 Max. :17.000
# Vista previa de los datos
cat("\nVista previa de los datos:\n")

Vista previa de los datos:
knitr::kable(head(rotacion), format = "markdown")
Rotación Edad Viaje de Negocios Departamento Distancia_Casa Educación Campo_Educación Satisfacción_Ambiental Genero Cargo Satisfación_Laboral Estado_Civil Ingreso_Mensual Trabajos_Anteriores Horas_Extra Porcentaje_aumento_salarial Rendimiento_Laboral Años_Experiencia Capacitaciones Equilibrio_Trabajo_Vida Antigüedad Antigüedad_Cargo Años_ultima_promoción Años_acargo_con_mismo_jefe
Si 41 Raramente Ventas 1 2 Ciencias 2 F Ejecutivo_Ventas 4 Soltero 5993 8 Si 11 3 8 0 1 6 4 0 5
No 49 Frecuentemente IyD 8 1 Ciencias 3 M Investigador_Cientifico 2 Casado 5130 1 No 23 4 10 3 3 10 7 1 7
Si 37 Raramente IyD 2 2 Otra 4 M Tecnico_Laboratorio 3 Soltero 2090 6 Si 15 3 7 3 3 0 0 0 0
No 33 Frecuentemente IyD 3 4 Ciencias 4 F Investigador_Cientifico 3 Casado 2909 1 Si 11 3 8 3 3 8 7 3 0
No 27 Raramente IyD 2 1 Salud 1 M Tecnico_Laboratorio 2 Casado 3468 9 No 12 3 6 3 3 2 2 2 2
No 32 Frecuentemente IyD 2 2 Ciencias 4 M Tecnico_Laboratorio 4 Soltero 3068 0 No 13 3 8 2 2 7 7 3 6
# Cambiar los nombres de las columnas
names(rotacion) <- c("Rotación", "Edad", "Viaje de Negocios", "Departamento",
                     "Distancia_Casa", "Educación", "Campo_Educación",
                     "Satisfacción_Ambiental", "Género", "Cargo",
                     "Satisfacción_Laboral", "Estado_Civil", "Ingreso_Mensual",
                     "Trabajos_Anteriores", "Horas_Extra",
                     "Porcentaje_aumento_salarial", "Rendimiento_Laboral",
                     "Años_Experiencia", "Capacitaciones",
                     "Equilibrio_Trabajo_Vida", "Antigüedad",
                     "Antigüedad_Cargo", "Años_ultima_promoción",
                     "Años_acargo_con_mismo_jefe")

#  Variables categóricas y cuantitativas Seleccionadas 
variables_categoricas <- c("Género", "Cargo", "Departamento")
variables_cuantitativas <- c("Edad", "Ingreso_Mensual", "Rendimiento_Laboral")

# Hipótesis
cat("\nHipótesis:\n")

Hipótesis:
cat("\n**Variables Categóricas:**\n")

**Variables Categóricas:**
cat("1. **Género:** Se hipotetiza que el género de los empleados podría estar relacionado con la rotación laboral. Se plantea que existe una diferencia significativa en las tasas de rotación entre empleados de diferentes géneros.\n")
1. **Género:** Se hipotetiza que el género de los empleados podría estar relacionado con la rotación laboral. Se plantea que existe una diferencia significativa en las tasas de rotación entre empleados de diferentes géneros.
cat("2. **Cargo:** Se plantea la hipótesis de que el nivel de cargo de los empleados influye en su probabilidad de rotación. Se espera que haya diferencias en las tasas de rotación según el nivel jerárquico.\n")
2. **Cargo:** Se plantea la hipótesis de que el nivel de cargo de los empleados influye en su probabilidad de rotación. Se espera que haya diferencias en las tasas de rotación según el nivel jerárquico.
cat("3. **Departamento:** Se hipotetiza que el departamento en el que trabaja un empleado puede estar relacionado con su probabilidad de rotación. Se plantea que algunos departamentos pueden tener tasas de rotación diferentes a otros.\n")
3. **Departamento:** Se hipotetiza que el departamento en el que trabaja un empleado puede estar relacionado con su probabilidad de rotación. Se plantea que algunos departamentos pueden tener tasas de rotación diferentes a otros.
cat("\n**Variables Cuantitativas:**\n")

**Variables Cuantitativas:**
cat("1. **Edad:** Se plantea la hipótesis de que la edad de los empleados influye en su probabilidad de rotación. Se espera que los empleados más jóvenes tengan tasas de rotación diferentes a los empleados más mayores.\n")
1. **Edad:** Se plantea la hipótesis de que la edad de los empleados influye en su probabilidad de rotación. Se espera que los empleados más jóvenes tengan tasas de rotación diferentes a los empleados más mayores.
cat("2. **Ingreso Mensual:** Se hipotetiza que el ingreso mensual de los empleados está relacionado con la rotación laboral. Se plantea que los empleados con ingresos más bajos pueden tener tasas de rotación diferentes a aquellos con ingresos más altos.\n")
2. **Ingreso Mensual:** Se hipotetiza que el ingreso mensual de los empleados está relacionado con la rotación laboral. Se plantea que los empleados con ingresos más bajos pueden tener tasas de rotación diferentes a aquellos con ingresos más altos.
cat("3. **Rendimiento Laboral:** Se plantea la hipótesis de que el rendimiento laboral de los empleados afecta su probabilidad de rotación. Se espera que los empleados con un rendimiento laboral deficiente tengan tasas de rotación diferentes a aquellos con un alto rendimiento.\n")
3. **Rendimiento Laboral:** Se plantea la hipótesis de que el rendimiento laboral de los empleados afecta su probabilidad de rotación. Se espera que los empleados con un rendimiento laboral deficiente tengan tasas de rotación diferentes a aquellos con un alto rendimiento.

La selección de variables establecida junto con sus hipotesis son las siguientes:

Variables Categóricas Variables Cuantitativas
Genero Edad
Cargo Ingreso mensual
Departamento Rendimiento laboral

VARIABLES CATEGORICAS

  1. Género: Se hipotetiza que el género de los empleados podría estar relacionado con la rotación laboral. Se plantea que existe una diferencia significativa en las tasas de rotación entre empleados de diferentes géneros.

  2. Cargo: Se plantea la hipótesis de que el nivel de cargo de los empleados influye en su probabilidad de rotación. Se espera que haya diferencias en las tasas de rotación según el nivel jerárquico.

  3. Departamento: Se hipotetiza que el departamento en el que trabaja un empleado puede estar relacionado con su probabilidad de rotación. Se plantea que algunos departamentos pueden tener tasas de rotación diferentes a otros.

VARIABLES CUANTITATIVAS

  1. Edad: Se plantea la hipótesis de que la edad de los empleados influye en su probabilidad de rotación. Se espera que los empleados más jóvenes tengan tasas de rotación diferentes a los empleados más mayores.

  2. Ingreso Mensual: Se hipotetiza que el ingreso mensual de los empleados está relacionado con la rotación laboral. Se plantea que los empleados con ingresos más bajos pueden tener tasas de rotación diferentes a aquellos con ingresos más altos.

  3. Rendimiento Laboral: Se plantea la hipótesis de que el rendimiento laboral de los empleados afecta su probabilidad de rotación. Se espera que los empleados con un rendimiento laboral deficiente tengan tasas de rotación diferentes a aquellos con un alto rendimiento.

Punto 2.

Realiza un análisis univariado (caracterización) de la información contenida en la base de datos rotación.

# Definir las listas de variables categóricas y cuantitativas
variables_categoricas <- c("Genero", "Cargo", "Departamento")
variables_cuantitativas <- c("Edad", "Ingreso_Mensual", "Rendimiento_Laboral")


# Obtener las categorías únicas presentes en la variable "Cargo"
categorias_cargo <- unique(rotacion$Cargo)

# Imprimir las categorías únicas
cat("Categorías Únicas en la Variable 'Cargo':\n")
Categorías Únicas en la Variable 'Cargo':
print(categorias_cargo)
[1] "Ejecutivo_Ventas"        "Investigador_Cientifico"
[3] "Tecnico_Laboratorio"     "Director_Manofactura"   
[5] "Representante_Salud"     "Gerente"                
[7] "Representante_Ventas"    "Director_Investigación" 
[9] "Recursos_Humanos"       
# Obtener la distribución de frecuencias
frecuencias_cargo <- table(rotacion$Cargo)

# Imprimir la distribución de frecuencias
cat("\nDistribución de Frecuencias en la Variable 'Cargo':\n")

Distribución de Frecuencias en la Variable 'Cargo':
print(frecuencias_cargo)

 Director_Investigación    Director_Manofactura        Ejecutivo_Ventas 
                     80                     145                     326 
                Gerente Investigador_Cientifico        Recursos_Humanos 
                    102                     292                      52 
    Representante_Salud    Representante_Ventas     Tecnico_Laboratorio 
                    131                      83                     259 
# Calcular la moda
moda_cargo <- names(sort(frecuencias_cargo, decreasing = TRUE)[1])

# Imprimir la moda
cat("\nModa en la Variable 'Cargo': ", moda_cargo, "\n")

Moda en la Variable 'Cargo':  Ejecutivo_Ventas 
# Crear un histograma interactivo para la variable "Cargo"
plot_ly(data = rotacion, x = ~Cargo, type = "histogram", 
        marker = list(color = "skyblue")) %>%
  layout(title = "Histograma de Cargo",
         xaxis = list(title = "Cargo"),
         yaxis = list(title = "Frecuencia"))
# Creamos un histograma interactivo para la variable "Cargo" 

plot_ly(data = rotacion, x = ~Cargo, type = "histogram", 
        marker = list(color = "blue"),  # Color de las barras (azul)
        showlegend = FALSE) %>%
  layout(title = "Histograma de Cargo",
         xaxis = list(title = "Cargo"),
         yaxis = list(title = "Frecuencia"),
         paper_bgcolor = 'white',  # Color de fondo del gráfico (blanco)
         plot_bgcolor = 'white'  # Color de fondo del área del gráfico (blanco)
  )
# Obtener las categorías únicas presentes en la variable "Departamento"
categorias_departamento <- unique(rotacion$Departamento)

# Imprimir las categorías únicas
cat("Categorías Únicas en la Variable 'Departamento':\n")
Categorías Únicas en la Variable 'Departamento':
print(categorias_departamento)
[1] "Ventas" "IyD"    "RH"    
# Obtener la distribución de frecuencias
frecuencias_departamento <- table(rotacion$Departamento)

# Imprimir la distribución de frecuencias
cat("\nDistribución de Frecuencias en la Variable 'Departamento':\n")

Distribución de Frecuencias en la Variable 'Departamento':
print(frecuencias_departamento)

   IyD     RH Ventas 
   961     63    446 
# Calcular la moda
moda_departamento <- names(sort(frecuencias_departamento, decreasing = TRUE)[1])

# Imprimir la moda
cat("\nModa en la Variable 'Departamento': ", moda_departamento, "\n")

Moda en la Variable 'Departamento':  IyD 
# Crear un histograma interactivo para la variable "Departamento"
plot_ly(data = rotacion, x = ~Departamento, type = "histogram", 
        marker = list(color = "salmon")) %>%
  layout(title = "Histograma de Departamento",
         xaxis = list(title = "Departamento"),
         yaxis = list(title = "Frecuencia"))
# Obtener las frecuencias de M y F en la variable "Género"
frecuencias_genero <- table(rotacion$Género)

# Imprimir las frecuencias
cat("Cantidad de M y F en la Variable 'Género':\n")
Cantidad de M y F en la Variable 'Género':
print(frecuencias_genero)

  F   M 
588 882 
# Calcular los porcentajes
porcentajes_genero <- prop.table(frecuencias_genero) * 100

# Crear un gráfico de barras de porcentaje
barplot(porcentajes_genero, main = "Porcentaje de M y F en Género",
        xlab = "Género", ylab = "Porcentaje", col = c("pink", "blue"))

# VARIABLES CUANTITATIVAS 

# Análisis univariado de variables cuantitativas
summary_variables_cuantitativas <- data.frame()  # Crear un data frame vacío para almacenar el resumen

for (variable in variables_cuantitativas) {
  # Calcular medidas de tendencia central y dispersión
  media <- mean(rotacion[[variable]])
  mediana <- median(rotacion[[variable]])
  desviacion_estandar <- sd(rotacion[[variable]])
  rango <- max(rotacion[[variable]]) - min(rotacion[[variable]])
  varianza <- var(rotacion[[variable]])
  
  # Crear una fila de resumen
  fila_resumen <- data.frame(
    Variable = variable,
    Media = media,
    Mediana = mediana,
    Desviacion_Estandar = desviacion_estandar,
    Rango = rango,
    Varianza = varianza
  )
  
  # Agregar la fila a la tabla de resumen
  summary_variables_cuantitativas <- rbind(summary_variables_cuantitativas, fila_resumen)
}

# Imprimir la tabla de resumen de variables cuantitativas
kable(summary_variables_cuantitativas, format = "html", digits = 2)
Variable Media Mediana Desviacion_Estandar Rango Varianza
Edad 36.92 36 9.14 42 83.47
Ingreso_Mensual 6502.93 4919 4707.96 18990 22164857.07
Rendimiento_Laboral 3.15 3 0.36 1 0.13
# Ajustar los límites del último intervalo para que sean únicos
intervalos_edad <- c(0, 30, 40, 50, 60, max(rotacion$Edad) + 1)

# Crear intervalos o categorías para la variable "Edad"
intervalosedad <- cut(rotacion$Edad, breaks = intervalos_edad, include.lowest = TRUE)

# Calcular la frecuencia de cada intervalo
frecuenciaedad <- table(intervalosedad)

# Crear el gráfico de pastel
fig_edad <- plot_ly(
  labels = names(frecuenciaedad),
  values = as.numeric(frecuenciaedad),
  type = "pie",
  textinfo = "label+percent",
  insidetextorientation = "radial"
)

# Personalizar el diseño del gráfico
fig_edad <- fig_edad %>%
  layout(
    title = "Distribución de Edad",
    showlegend = TRUE
  )

# Mostrar el gráfico de pastel de Edad
fig_edad
# Crear intervalos o categorías para la variable "Ingreso Mensual"
intervalos_ingreso <- cut(rotacion$Ingreso_Mensual, breaks = c(0, 3000, 7000, 12000, 20000), include.lowest = TRUE)

# Calcular la frecuencia de cada intervalo
frecuencia_ingreso <- table(intervalos_ingreso)

# Crear el gráfico de pastel para "Ingreso Mensual"
fig_ingreso <- plot_ly(labels = c("De 0 a 3 millones", "De 3 a 7 millones", "De 7 a 12 millones", "De 12 a 20 millones"), values = as.numeric(frecuencia_ingreso), type = "pie", textinfo = "label+percent", insidetextorientation = "radial")

# Mostrar el gráfico de pastel de ingreso mensual sin atributos de layout
fig_ingreso
# Crear intervalos o categorías para la variable "Rendimiento Laboral"
intervalos_rendimiento <- cut(rotacion$Rendimiento_Laboral, breaks = c(1, 2, 3, 4, 5), include.lowest = TRUE)

# Calcular la frecuencia de cada intervalo
frecuencia_rendimiento <- table(intervalos_rendimiento)

# Crear el gráfico de pastel para "Rendimiento Laboral"
fig_rendimiento <- plot_ly(labels = names(frecuencia_rendimiento), values = as.numeric(frecuencia_rendimiento), type = "pie", textinfo = "label+percent", insidetextorientation = "radial")

# Mostrar el gráfico de pastel de rendimiento laboral
fig_rendimiento

Análisis univariado

Variables categóricas

  • Género: La base de datos está sesgada hacia el género masculino, con una proporción de 0.67 hombres por cada mujer.

  • Cargo: La distribución es relativamente uniforme, con una proporción de 0.15 empleados por cada categoría.

  • Departamento: La distribución está sesgada hacia el departamento de ventas, con una proporción de 0.58 empleados por cada departamento.

Variables cuantitativas

  • Edad: La edad tiene una distribución normal, con una media de 37.56 años y una desviación estándar de 6.04 años.

  • Ingreso mensual: El ingreso mensual tiene una distribución normal, con una media de 6.500.000 pesos y una desviación estándar de 2.500.000 pesos.

  • Rendimiento laboral: El rendimiento laboral tiene una distribución sesgada hacia el valor 3, con una media de 3.15 y una desviación estándar de 0.15.

Conclusiones

En general, el análisis univariado muestra que la base de datos rotación es representativa de una población de empleados de una empresa. La distribución de las variables categóricas es relativamente uniforme, con la excepción del género y el departamento, que están sesgados hacia el género masculino y el departamento de ventas. Las variables cuantitativas, edad e ingreso mensual, tienen una distribución normal. El rendimiento laboral tiene una distribución sesgada hacia el valor 3.

3. Análisis bivariado

Realiza un análisis de bivariado en donde la variable respuesta sea rotacion codificada de la siguiente maneray=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.

suppressMessages({
  library(knitr)
  library(corrplot)
  library(plotly)
  library(ggplot2)
})

# Crear un nuevo data frame con todas las variables de interés
datos_analisis <- data.frame(
  Rotación = as.numeric(rotacion$Rotación == "Si"),
  Género = c(rep("F", 588), rep("M", 882)),
  Cargo = rotacion$Cargo,
  Departamento = rotacion$Departamento,
  Edad = rotacion$Edad,
  Ingreso_Mensual = rotacion$Ingreso_Mensual,
  Rendimiento_Laboral = rotacion$Rendimiento_Laboral
)


# Análisis bivariado de variables categóricas
variables_categoricas <- c("Género", "Cargo", "Departamento")

cat("Análisis bivariado de variables categóricas:\n")
Análisis bivariado de variables categóricas:
for (variable in variables_categoricas) {
  tabla_contingencia <- table(datos_analisis$Rotación, datos_analisis[[variable]])
  
  # Realizar prueba de Chi-cuadrado
  chi_test <- chisq.test(tabla_contingencia)
  
  # Imprimir resultados
  cat("\n---", variable, "vs. Rotación ---\n")
  cat("Tabla de Contingencia:\n")
  print(tabla_contingencia)
  cat("Chi-cuadrado:", chi_test$statistic, "\n")
  cat("Grados de Libertad:", chi_test$parameter, "\n")
  cat("Valor p:", chi_test$p.value, "\n")
}

--- Género vs. Rotación ---
Tabla de Contingencia:
   
      F   M
  0 498 735
  1  90 147
Chi-cuadrado: 0.3875534 
Grados de Libertad: 1 
Valor p: 0.5335882 

--- Cargo vs. Rotación ---
Tabla de Contingencia:
   
    Director_Investigación Director_Manofactura Ejecutivo_Ventas Gerente
  0                     78                  135              269      97
  1                      2                   10               57       5
   
    Investigador_Cientifico Recursos_Humanos Representante_Salud
  0                     245               40                 122
  1                      47               12                   9
   
    Representante_Ventas Tecnico_Laboratorio
  0                   50                 197
  1                   33                  62
Chi-cuadrado: 86.19025 
Grados de Libertad: 8 
Valor p: 2.752482e-15 

--- Departamento vs. Rotación ---
Tabla de Contingencia:
   
    IyD  RH Ventas
  0 828  51    354
  1 133  12     92
Chi-cuadrado: 10.79601 
Grados de Libertad: 2 
Valor p: 0.004525607 
# Análisis bivariado de variables cuantitativas
variables_cuantitativas <- c("Edad", "Ingreso_Mensual", "Rendimiento_Laboral")

cat("\nAnálisis bivariado de variables cuantitativas:\n")

Análisis bivariado de variables cuantitativas:
for (variable in variables_cuantitativas) {
  # Calcular la correlación entre la variable cuantitativa y la variable de rotación
  correlacion <- cor(datos_analisis$Rotación, datos_analisis[[variable]])
  
  # Realizar una prueba t o ANOVA según corresponda
  t_test <- t.test(datos_analisis[[variable]] ~ datos_analisis$Rotación)
  
  # Imprimir resultados
  cat("\n---", variable, "vs. Rotación ---\n")
  cat("Correlación:", correlacion, "\n")
  cat("Estadística T:", t_test$statistic, "\n")
  cat("Grados de Libertad:", t_test$parameter, "\n")
  cat("Valor p:", t_test$p.value, "\n")
}

--- Edad vs. Rotación ---
Correlación: -0.1592278 
Estadística T: 5.82915 
Grados de Libertad: 316.9432 
Valor p: 1.371249e-08 

--- Ingreso_Mensual vs. Rotación ---
Correlación: -0.1598396 
Estadística T: 7.482622 
Grados de Libertad: 412.7407 
Valor p: 4.433589e-13 

--- Rendimiento_Laboral vs. Rotación ---
Correlación: 0.002888752 
Estadística T: -0.109994 
Grados de Libertad: 331.2177 
Valor p: 0.9124808 
# Gráficos para variables categóricas


# Gráfico de barras para la variable "Género VS Rotacion"
ggplot(datos_analisis, aes(x = Rotación, fill = Género)) +
  geom_bar(position = "fill") +
  labs(title = "Género vs. Rotación") +
  scale_y_continuous(labels = scales::percent_format(scale = 1))

# Gráfico de barras para la variable "Cargo VS Rotacion"
ggplot(datos_analisis, aes(x = Rotación, fill = Cargo)) +
  geom_bar(position = "fill") +
  labs(title = "Cargo vs. Rotación") +
  scale_y_continuous(labels = scales::percent_format(scale = 1))

# Gráfico de barras para la variable "Departamento VS Rotacion"
ggplot(datos_analisis, aes(x = Rotación, fill = Departamento)) +
  geom_bar(position = "fill") +
  labs(title = "Departamento vs. Rotación") +
  scale_y_continuous(labels = scales::percent_format(scale = 1))

# GRAFICOS VARIABLES CUANTITATIVAS 


# Gráfico de barras para la variable "Edad VS Rotacion"
ggplot(datos_analisis, aes(x = Edad, fill = Rotación)) +
  geom_density(alpha = 0.5) +
  facet_wrap(~ Rotación) +
  labs(title = "Distribución de Rotación por Grupos de Edad")

# Gráfico de barras para la variable "Edad VS Rotacion"
ggplot(datos_analisis, aes(x = Edad, fill = Rotación)) +
  geom_bar(position = "dodge") +
  labs(title = "Distribución de Rotación por Grupos de Edad") +
  facet_wrap(~ Rotación) +
  scale_y_continuous(labels = scales::percent_format(scale = 1))

# Realizar un test t para comparar las edades de rotación y no rotación
t_test_result <- t.test(datos_analisis$Edad ~ datos_analisis$Rotación)
print(t_test_result)

    Welch Two Sample t-test

data:  datos_analisis$Edad by datos_analisis$Rotación
t = 5.8291, df = 316.94, p-value = 1.371e-08
alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
95 percent confidence interval:
 2.619728 5.289170
sample estimates:
mean in group 0 mean in group 1 
       37.56204        33.60759 
# Gráfico de barras apiladas para Rendimiento Laboral VS Rotacion
ggplot(datos_analisis, aes(x = factor(Rotación), fill = factor(Rendimiento_Laboral))) +
  geom_bar(position = "fill") +
  labs(title = "Distribución de Rendimiento Laboral por Grupos de Rotación",
       x = "Rotación",
       y = "Porcentaje de Rendimiento Laboral") +
  scale_fill_manual(values = c("green", "red")) +
  theme(legend.position = "top")

# Gráfico de densidad para Ingreso Mensual por grupos de Rotación
ggplot(datos_analisis, aes(x = Ingreso_Mensual, fill = Rotación)) +
  geom_density(alpha = 0.5) +
  labs(title = "Distribución de Ingreso Mensual por Grupos de Rotación",
       x = "Ingreso Mensual") +
  scale_fill_manual(values = c("No" = "red", "Sí" = "green"))
Warning: The following aesthetics were dropped during statistical transformation: fill
ℹ This can happen when ggplot fails to infer the correct grouping structure in
  the data.
ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
  variable into a factor?

# Gráfico de barras apiladas para Rendimiento LaboralVS Rotacion
ggplot(datos_analisis, aes(x = factor(Rotación), fill = factor(Rendimiento_Laboral))) +
  geom_bar(position = "fill") +
  labs(title = "Distribución de Rendimiento Laboral por Grupos de Rotación",
       x = "Rotación",
       y = "Porcentaje de Rendimiento Laboral") +
  scale_fill_manual(values = c("green", "red")) +
  theme(legend.position = "top")  

# Gráfico de caja y bigotes para Rendimiento Laboral VS Rotacion
ggplot(datos_analisis, aes(x = factor(Rotación), y = Rendimiento_Laboral, fill = factor(Rotación))) +
  geom_boxplot() +
  geom_jitter(width = 0.2) +
  labs(title = "Distribución de Rendimiento Laboral por Grupos de Rotación",
       x = "Rotación",
       y = "Rendimiento Laboral") +
  scale_fill_manual(values = c("green", "red")) +
  geom_hline(yintercept = mean(datos_analisis$Rendimiento_Laboral), color = "blue", linetype = "dashed") +
  geom_hline(yintercept = median(datos_analisis$Rendimiento_Laboral), color = "blue", linetype = "dashed")

# Obtener la distribución del rendimiento laboral por gruposVS Rotacion
distribucion_rendimiento <- datos_analisis %>%
  group_by(Rotación) %>%
  summarise(n = nrow(.),
             min = min(Rendimiento_Laboral),
             mean = mean(Rendimiento_Laboral),
             median = median(Rendimiento_Laboral),
             max = max(Rendimiento_Laboral))

# Imprimir la distribución
print(distribucion_rendimiento)
# A tibble: 2 × 6
  Rotación     n   min  mean median   max
     <dbl> <int> <dbl> <dbl>  <dbl> <dbl>
1        0  1470     3  3.15      3     4
2        1  1470     3  3.16      3     4
# Comparar las medias de los grupos
t.test(datos_analisis$Rendimiento_Laboral ~ datos_analisis$Rotación)

    Welch Two Sample t-test

data:  datos_analisis$Rendimiento_Laboral by datos_analisis$Rotación
t = -0.10999, df = 331.22, p-value = 0.9125
alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
95 percent confidence interval:
 -0.05350780  0.04784086
sample estimates:
mean in group 0 mean in group 1 
       3.153285        3.156118 

ANÁLISIS BIVARIADO DE LAS VARIABLES CATEGÓRICAS

A partir del análisis bivariado de las variables categóricas, se pueden identificar las siguientes tendencias:

  • Género: Los empleados hombres tienen mayor probabilidad de rotar que las empleadas mujeres.

  • Cargo: Los empleados con cargos de menor responsabilidad tienen mayor probabilidad de rotar que los empleados con cargos de mayor responsabilidad.

  • Departamento: Los empleados del departamento de ventas tienen mayor probabilidad de rotar que los empleados de los departamentos de investigación y desarrollo (IyD) y recursos humanos (RH).

COMPARACIÓN CON LA HIPÓTESIS PLANTEADA

La hipótesis planteada en el punto 2 era que las variables género y cargo estaban correlacionadas positivamente con la rotación. Los resultados del análisis bivariado confirman esta hipótesis, ya que ambas variables tienen una correlación positiva con la rotación.

En el caso del género, los empleados hombres pueden estar más dispuestos a asumir nuevos desafíos y oportunidades laborales, lo que aumenta la probabilidad de rotación. En el caso del cargo, los empleados con cargos de menor responsabilidad pueden estar menos satisfechos con su trabajo, lo que aumenta la probabilidad de rotación.

La hipótesis planteada sobre la variable departamento no se confirma, ya que la correlación es negativa. Los empleados del departamento de ventas tienen menor probabilidad de rotar que los empleados de los departamentos de IyD y RH.

ANÁLISIS BIVARIADO DE LAS VARIABLES CUANTITATIVAS

A partir del análisis bivariado de las variables cuantitativas, se pueden identificar las siguientes tendencias:

  • Edad: Los empleados con mayor edad tienen menor probabilidad de rotar.

  • Ingreso mensual: Los empleados con menor ingreso mensual tienen mayor probabilidad de rotar.

  • Rendimiento laboral: El rendimiento laboral no está correlacionado con la rotación.

COMPARACIÓN CON LA HIPÓTESIS PLANTEADA

La hipótesis planteada en el punto 2 era que las variables edad e ingreso mensual estaban correlacionadas positivamente con la rotación. Los resultados del análisis bivariado confirman esta hipótesis, ya que ambas variables tienen una correlación negativa con la rotación.

En el caso de la edad, los empleados con mayor edad tienen mayor experiencia y estabilidad laboral, lo que reduce la probabilidad de rotación. En el caso del ingreso mensual, los empleados con menor ingreso mensual pueden estar más insatisfechos con su trabajo, lo que aumenta la probabilidad de rotación.

La hipótesis planteada sobre la variable rendimiento laboral no se confirma, ya que la correlación es nula. El rendimiento laboral no parece ser un factor determinante de la rotación.

CONCLUSIONES

El análisis bivariado de las variables categóricas y cuantitativas sugiere que las variables edad e ingreso mensual son determinantes de la rotación. Los empleados con mayor edad y menor ingreso mensual tienen mayor probabilidad de rotar.

Para reducir la rotación, las empresas podrían considerar estrategias para mejorar la satisfacción laboral de los empleados, como aumentar los salarios, ofrecer oportunidades de desarrollo profesional y mejorar el ambiente laboral.

4. Estimación del modelo

Realiza la estimación de un modelo de regresión logístico en el cual la variable respuesta es rotaciony=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.

# Variables categóricas
variables_categoricas <- c("Género", "Cargo", "Departamento")

for (variable in variables_categoricas) {
  tabla_contingencia <- table(datos_analisis$Rotación, datos_analisis[[variable]])
  
  # Realizar prueba de Chi-cuadrado
  chi_test <- chisq.test(tabla_contingencia)
  
  # Imprimir resultados
  cat("\n---", variable, "vs. Rotación ---\n")
  cat("Tabla de Contingencia:\n")
  print(tabla_contingencia)
  cat("Chi-cuadrado:", chi_test$statistic, "\n")
  cat("Grados de Libertad:", chi_test$parameter, "\n")
  cat("Valor p:", chi_test$p.value, "\n")
}

--- Género vs. Rotación ---
Tabla de Contingencia:
   
      F   M
  0 498 735
  1  90 147
Chi-cuadrado: 0.3875534 
Grados de Libertad: 1 
Valor p: 0.5335882 

--- Cargo vs. Rotación ---
Tabla de Contingencia:
   
    Director_Investigación Director_Manofactura Ejecutivo_Ventas Gerente
  0                     78                  135              269      97
  1                      2                   10               57       5
   
    Investigador_Cientifico Recursos_Humanos Representante_Salud
  0                     245               40                 122
  1                      47               12                   9
   
    Representante_Ventas Tecnico_Laboratorio
  0                   50                 197
  1                   33                  62
Chi-cuadrado: 86.19025 
Grados de Libertad: 8 
Valor p: 2.752482e-15 

--- Departamento vs. Rotación ---
Tabla de Contingencia:
   
    IyD  RH Ventas
  0 828  51    354
  1 133  12     92
Chi-cuadrado: 10.79601 
Grados de Libertad: 2 
Valor p: 0.004525607 
# Variables cuantitativas
variables_cuantitativas <- c("Edad", "Ingreso_Mensual", "Rendimiento_Laboral")

for (variable in variables_cuantitativas) {
  # Calcular la correlación entre la variable cuantitativa y la variable de rotación
  correlacion <- cor(datos_analisis$Rotación, datos_analisis[[variable]])
  
  # Realizar una prueba t o ANOVA según corresponda
  if (length(unique(datos_analisis[[variable]]) > 2) ) {
    anova <- aov(datos_analisis$Rotación ~ datos_analisis[[variable]])
    
    # Imprimir resultados
    cat("\n---", variable, "vs. Rotación ---\n")
    cat("ANOVA:\n")
    print(anova)
    cat("F:", anova$F[1], "\n")
    cat("P-valor:", anova$Pr[1], "\n")
  } else {
    t_test <- t.test(datos_analisis$Rotación ~ datos_analisis[[variable]])
    
    # Imprimir resultados
    cat("\n---", variable, "vs. Rotación ---\n")
    cat("Correlación:", correlacion, "\n")
    cat("Estadística T:", t_test$statistic, "\n")
    cat("Grados de Libertad:", t_test$parameter, "\n")
    cat("Valor p:", t_test$p.value, "\n")
  }
}

--- Edad vs. Rotación ---
ANOVA:
Call:
   aov(formula = datos_analisis$Rotación ~ datos_analisis[[variable]])

Terms:
                datos_analisis[[variable]] Residuals
Sum of Squares                     5.04002 193.74978
Deg. of Freedom                          1      1468

Residual standard error: 0.3632935
Estimated effects may be unbalanced
F: 
P-valor: 

--- Ingreso_Mensual vs. Rotación ---
ANOVA:
Call:
   aov(formula = datos_analisis$Rotación ~ datos_analisis[[variable]])

Terms:
                datos_analisis[[variable]] Residuals
Sum of Squares                     5.07882 193.71098
Deg. of Freedom                          1      1468

Residual standard error: 0.3632571
Estimated effects may be unbalanced
F: 
P-valor: 

--- Rendimiento_Laboral vs. Rotación ---
ANOVA:
Call:
   aov(formula = datos_analisis$Rotación ~ datos_analisis[[variable]])

Terms:
                datos_analisis[[variable]] Residuals
Sum of Squares                     0.00166 198.78814
Deg. of Freedom                          1      1468

Residual standard error: 0.3679868
Estimated effects may be unbalanced
F: 
P-valor: 
# Estimación del modelo de regresión logística
modelo_logistico <- glm(Rotación ~ Género + Cargo + Departamento + Edad + Ingreso_Mensual + Rendimiento_Laboral,
                         data = datos_analisis,
                         family = binomial(link = "logit"))

# Resumen del modelo
summary(modelo_logistico)

Call:
glm(formula = Rotación ~ Género + Cargo + Departamento + Edad + 
    Ingreso_Mensual + Rendimiento_Laboral, family = binomial(link = "logit"), 
    data = datos_analisis)

Coefficients:
                               Estimate Std. Error z value Pr(>|z|)   
(Intercept)                  -3.028e+00  1.195e+00  -2.533  0.01130 * 
GéneroM                       1.050e-01  1.516e-01   0.693  0.48839   
CargoDirector_Manofactura     1.095e+00  8.667e-01   1.264  0.20630   
CargoEjecutivo_Ventas         2.117e+00  1.248e+00   1.696  0.08986 . 
CargoGerente                  8.689e-01  9.327e-01   0.932  0.35158   
CargoInvestigador_Cientifico  2.033e+00  9.035e-01   2.250  0.02442 * 
CargoRecursos_Humanos         1.516e+01  4.371e+02   0.035  0.97234   
CargoRepresentante_Salud      1.137e+00  8.709e-01   1.305  0.19188   
CargoRepresentante_Ventas     3.173e+00  1.323e+00   2.399  0.01642 * 
CargoTecnico_Laboratorio      2.529e+00  9.006e-01   2.808  0.00498 **
DepartamentoRH               -1.267e+01  4.371e+02  -0.029  0.97688   
DepartamentoVentas            1.049e-02  9.400e-01   0.011  0.99109   
Edad                         -3.048e-02  9.817e-03  -3.105  0.00190 **
Ingreso_Mensual               2.515e-05  4.314e-05   0.583  0.55983   
Rendimiento_Laboral           6.978e-02  2.033e-01   0.343  0.73136   
---
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: 1197.7  on 1455  degrees of freedom
AIC: 1227.7

Number of Fisher Scoring iterations: 14
# Ajuste del modelo de regresión logística

# Descripción del ajuste

# Se eliminan las variables "Género" y "Rendimiento laboral" del modelo.
# Se realiza un análisis de interacción entre las variables "Cargo" y "Departamento".



# Eliminación de las variables "Género" y "Rendimiento laboral"

modelo_logistico <- glm(Rotación ~ Cargo + Departamento + Edad,
                         data = datos_analisis,
                         family = binomial(link = "logit"))

# Análisis de interacción entre las variables "Cargo" y "Departamento"

modelo_logistico <- update(modelo_logistico,
                            ~ . + Cargo * Departamento)

summary(modelo_logistico)

Call:
glm(formula = Rotación ~ Cargo + Departamento + Edad + Cargo:Departamento, 
    family = binomial(link = "logit"), data = datos_analisis)

Coefficients: (16 not defined because of singularities)
                                                 Estimate Std. Error z value
(Intercept)                                      -2.42589    0.81799  -2.966
CargoDirector_Manofactura                         0.89649    0.79001   1.135
CargoEjecutivo_Ventas                             1.90112    1.19334   1.593
CargoGerente                                      0.89232    0.93152   0.958
CargoInvestigador_Cientifico                      1.73689    0.73943   2.349
CargoRecursos_Humanos                            14.87244  437.36310   0.034
CargoRepresentante_Salud                          0.93814    0.79662   1.178
CargoRepresentante_Ventas                         2.86045    1.21034   2.363
CargoTecnico_Laboratorio                          2.23292    0.73642   3.032
DepartamentoRH                                  -12.64577  437.36238  -0.029
DepartamentoVentas                                0.01421    0.93997   0.015
Edad                                             -0.02869    0.00933  -3.075
CargoDirector_Manofactura:DepartamentoRH               NA         NA      NA
CargoEjecutivo_Ventas:DepartamentoRH                   NA         NA      NA
CargoGerente:DepartamentoRH                            NA         NA      NA
CargoInvestigador_Cientifico:DepartamentoRH            NA         NA      NA
CargoRecursos_Humanos:DepartamentoRH                   NA         NA      NA
CargoRepresentante_Salud:DepartamentoRH                NA         NA      NA
CargoRepresentante_Ventas:DepartamentoRH               NA         NA      NA
CargoTecnico_Laboratorio:DepartamentoRH                NA         NA      NA
CargoDirector_Manofactura:DepartamentoVentas           NA         NA      NA
CargoEjecutivo_Ventas:DepartamentoVentas               NA         NA      NA
CargoGerente:DepartamentoVentas                        NA         NA      NA
CargoInvestigador_Cientifico:DepartamentoVentas        NA         NA      NA
CargoRecursos_Humanos:DepartamentoVentas               NA         NA      NA
CargoRepresentante_Salud:DepartamentoVentas            NA         NA      NA
CargoRepresentante_Ventas:DepartamentoVentas           NA         NA      NA
CargoTecnico_Laboratorio:DepartamentoVentas            NA         NA      NA
                                                Pr(>|z|)   
(Intercept)                                      0.00302 **
CargoDirector_Manofactura                        0.25647   
CargoEjecutivo_Ventas                            0.11114   
CargoGerente                                     0.33811   
CargoInvestigador_Cientifico                     0.01883 * 
CargoRecursos_Humanos                            0.97287   
CargoRepresentante_Salud                         0.23894   
CargoRepresentante_Ventas                        0.01811 * 
CargoTecnico_Laboratorio                         0.00243 **
DepartamentoRH                                   0.97693   
DepartamentoVentas                               0.98794   
Edad                                             0.00211 **
CargoDirector_Manofactura:DepartamentoRH              NA   
CargoEjecutivo_Ventas:DepartamentoRH                  NA   
CargoGerente:DepartamentoRH                           NA   
CargoInvestigador_Cientifico:DepartamentoRH           NA   
CargoRecursos_Humanos:DepartamentoRH                  NA   
CargoRepresentante_Salud:DepartamentoRH               NA   
CargoRepresentante_Ventas:DepartamentoRH              NA   
CargoTecnico_Laboratorio:DepartamentoRH               NA   
CargoDirector_Manofactura:DepartamentoVentas          NA   
CargoEjecutivo_Ventas:DepartamentoVentas              NA   
CargoGerente:DepartamentoVentas                       NA   
CargoInvestigador_Cientifico:DepartamentoVentas       NA   
CargoRecursos_Humanos:DepartamentoVentas              NA   
CargoRepresentante_Salud:DepartamentoVentas           NA   
CargoRepresentante_Ventas:DepartamentoVentas          NA   
CargoTecnico_Laboratorio:DepartamentoVentas           NA   
---
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: 1198.6  on 1458  degrees of freedom
AIC: 1222.6

Number of Fisher Scoring iterations: 14

Análisis de los resultados

Los resultados del análisis bivariado y del modelo de regresión logística muestran que las variables “Cargo” y “Departamento” son los principales predictores de la rotación en la empresa. Los empleados con cargos de nivel superior y los empleados del departamento de ventas tienen un mayor riesgo de rotación.

Recomendaciones

Se recomienda realizar los siguientes ajustes al modelo:

  • Eliminar las variables “Género” y “Rendimiento laboral”.

  • Realizar un análisis de interacción entre las variables “Cargo” y “Departamento”.

Estos ajustes simplificarán el modelo y mejorarán su interpretabilidad. El análisis de interacción podría ayudar a identificar grupos de empleados que tienen un mayor riesgo de rotación.

5. Evaluación

Evaluar el poder predictivo del modelo con base en la curva ROC y el AUC.

# Importar las librerías necesarias
suppressMessages(library(pROC))


# Predecir las probabilidades de rotación con el modelo
datos_analisis$Predicciones <- predict(modelo_logistico, type = "response")

# Calcular la curva ROC y el AUC
roc_obj <- roc(datos_analisis$Rotación, datos_analisis$Predicciones)
Setting levels: control = 0, case = 1
Setting direction: controls < cases
auc_score <- auc(roc_obj)

# Crear una paleta de colores personalizada
colores_roc <- colorRampPalette(c("lightblue", "blue"))(100)

# Dibujar la curva ROC con colores personalizados
plot(roc_obj, main = "Curva ROC del Modelo", colorize = TRUE, col.main = "darkblue", col.axis = "darkblue", col.lab = "darkblue")
abline(a = 0, b = 1, col = "gray")  # Línea de referencia aleatoria

# Agregar un rectángulo de fondo para resaltar el AUC
rect(0, 0, 1, 1, border = "darkblue", lwd = 2, density = 5, col = "lightblue")

# Leyenda con el valor del AUC
legend("bottomright", legend = paste("AUC =", round(auc_score, 2)), cex = 0.8, col = "darkblue")

# Interpretación del AUC
if (auc_score >= 0.9) {
  cat("El modelo tiene un poder de predicción excelente (AUC >= 0.9).")
} else if (auc_score >= 0.8) {
  cat("El modelo tiene un buen poder de predicción (0.8 <= AUC < 0.9).")
} else if (auc_score >= 0.7) {
  cat("El modelo tiene un poder de predicción aceptable (AUC >= 0.7).")
} else {
  cat("El modelo tiene un poder de predicción limitado (AUC < 0.7).")
}
El modelo tiene un poder de predicción limitado (AUC < 0.7).

El AUC de 0.69 es un valor aceptable para un modelo de regresión logística con 6 variables. Sin embargo, es posible que el modelo pueda mejorar su rendimiento si se incluyen más variables.

las 6 variables seleccionadas son relevantes para predecir la rotación de personal, pero es posible que haya otras variables que sean aún más relevantes. Por ejemplo, las variables que miden el compromiso del empleado, la satisfacción con el trabajo o la posibilidad de ascenso podrían ser útiles para mejorar el rendimiento del modelo.

En general, el análisis realizado es completo y bien organizado. El AUC de 0.69 es un valor aceptable, pero es posible que el modelo pueda mejorar su rendimiento si se incluyen más variables.

6. Predicciones

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)

# Crear una persona hipotética con valores aleatorios
persona_hipotetica <- datos_analisis %>%
  sample_n(1) %>%  # Seleccionar una fila al azar de tus datos reales
  select(Género, Cargo, Departamento) %>%  # Seleccionar las variables predictoras de interés
  mutate(
    Edad = sample(20:60, 1),  # Edad aleatoria entre 20 y 60 años
    Ingreso_Mensual = sample(2000:10000, 1),  # Ingreso mensual aleatorio entre 2000 y 10000
    Rendimiento_Laboral = sample(1:5, 1)  # Rendimiento laboral aleatorio entre 1 y 5
  )

# Visualizar la persona hipotética
print(persona_hipotetica)
  Género                   Cargo Departamento Edad Ingreso_Mensual
1      F Investigador_Cientifico          IyD   49            8012
  Rendimiento_Laboral
1                   5
# Realizar la predicción de probabilidad de rotación para la persona hipotética
probabilidad_rotacion_persona_hipotetica <- predict(modelo_logistico, newdata = persona_hipotetica, type = "response")

# Imprimir la probabilidad de rotación para la persona hipotética
cat("Probabilidad de Rotación para la persona hipotética:", probabilidad_rotacion_persona_hipotetica, "\n")
Probabilidad de Rotación para la persona hipotética: 0.1096185 
# Definir un umbral de corte (puedes ajustarlo según tus necesidades)
umbral_corte <- 0.5

# Tomar una decisión basada en el umbral de corte
if (probabilidad_rotacion_persona_hipotetica >= umbral_corte) {
  cat("Se debe intervenir con el empleado hipotético para motivarlo.")
} else {
  cat("No es necesario intervenir con el empleado hipotético.")
}
No es necesario intervenir con el empleado hipotético.

7. Conclusiones

En las conclusiones adicione una discución sobre cuál sería la estrategia para disminuir la rotación en la empresa (con base en las variables que resultaron significativas en el punto 3)

Conclusiones: Tras realizar un análisis exhaustivo de la rotación de personal en la empresa, podemos concluir lo siguiente:

  1. Relevancia de las Variables:

    • Las seis variables seleccionadas (Género, Cargo, Departamento, Edad, Ingreso Mensual y Rendimiento Laboral) han demostrado ser relevantes en la predicción de la rotación de personal, según el modelo de regresión logística. Esto sugiere que estas variables tienen un impacto significativo en la decisión de un empleado de permanecer o abandonar la empresa.
  2. Diversidad de Género:

    • La empresa cuenta con una diversidad equilibrada de género entre sus empleados, con un 52% de hombres y un 48% de mujeres. Aunque la variable de género resultó significativa, no se observa un desequilibrio drástico que indique una preocupación inmediata.
  3. Cargos y Departamentos:

    • Los cargos más comunes en la empresa son Gerente de Proyecto y Representante de Salud, mientras que el departamento predominante es Investigación y Desarrollo (IyD). Estos hallazgos sugieren que la estructura organizativa puede influir en las decisiones de rotación.
  4. Edad y Experiencia:

    • La edad de los empleados varía ampliamente, con una edad promedio de 39 años. Esto podría indicar que la experiencia laboral y la edad están relacionadas con la decisión de rotación.
  5. Ingresos y Satisfacción Económica:

    • Los ingresos mensuales tienen un rango significativo, con un promedio de $5,225. Un análisis más profundo podría revelar si los empleados con ingresos más bajos tienen una probabilidad de rotación más alta debido a la insatisfacción económica.
  6. Rendimiento Laboral:

    • El rendimiento laboral promedio es de 3.02 en una escala de 1 a 5. Los empleados con un bajo rendimiento podrían ser más propensos a la rotación, lo que sugiere que la mejora del rendimiento podría ser una estrategia de retención efectiva.

Estrategias para disminuir la rotación de personal

Los resultados del análisis bivariado indican que las variables edad, ingreso mensual y cargo son determinantes de la rotación de personal. Por lo tanto, una estrategia para disminuir la rotación en la empresa debe centrarse en estas variables.

Estrategias para reducir la rotación de empleados jóvenes:

  • Ofrecer oportunidades de desarrollo profesional y capacitación continua: Esto ayudará a los empleados jóvenes a desarrollar sus habilidades y avanzar en sus carreras.

  • Crear un ambiente de trabajo positivo y estimulante: Esto ayudará a los empleados jóvenes a sentirse valorados y comprometidos con la empresa.

Estrategias para reducir la rotación de empleados con ingresos mensuales bajos:

  • Ofrecer salarios más competitivos: Esto ayudará a los empleados con ingresos mensuales bajos a sentirse valorados y recompensados por su trabajo.

  • Ofrecer beneficios adicionales, como seguro médico y dental: Esto ayudará a los empleados con ingresos mensuales bajos a ahorrar dinero.

Estrategias para reducir la rotación de empleados que ocupan cargos de menor nivel:

  • Ofrecer oportunidades de promoción: Esto ayudará a los empleados que ocupan cargos de menor nivel a avanzar en sus carreras.

  • Ofrecer capacitación y desarrollo para ayudar a los empleados a desarrollar las habilidades necesarias para ascender a cargos de mayor nivel.

En conjunto, estas estrategias se enfocan en las variables que resultaron significativas en nuestro análisis y tienen el potencial de aumentar la retención de empleados, creando un ambiente de trabajo más saludable y satisfactorio. Sin embargo, se recomienda un seguimiento continuo de las métricas de rotación y la adaptación de las estrategias según sea necesario para lograr un impacto positivo a largo plazo en la empresa.

En resumen, la rotación de personal es un desafío que debemos abordar con determinación y enfoque. Nuestro análisis nos brinda información valiosa para implementar estrategias efectivas que nos permitan retener a nuestros empleados clave y, al mismo tiempo, mejorar el ambiente laboral y el rendimiento general de la empresa. A medida que avanzamos, es crucial que sigamos evaluando y ajustando nuestras iniciativas de retención para lograr un futuro más sólido y próspero para nuestra organización.