Actividad 1 - Datos Rotación

En este documento se desarrollaran las diferetentes competenencias en la Asignatura Metodos y Simulacion Estadistica

Cargar Base de datos desde Excel

library(readxl)

datos <- read_excel("G:/Mi unidad/Maestría/Semestre 1/Metodos y Simulación Estadistica/Datos_Rotacion.xlsx")

Exploracion de datos y selección de variables

Se realiza exploración de base de datos para conocer la composición del dataset

names(datos) # Para observar el nombre de las variables de la base de datos.
##  [1] "Rotacion"                    "Edad"                       
##  [3] "Viaje de Negocios"           "Departamento"               
##  [5] "Distancia_Casa"              "Educacion"                  
##  [7] "Campo_Educacion"             "Satisfaccion_Ambiental"     
##  [9] "Genero"                      "Cargo"                      
## [11] "Satisfacion_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_promocion"       "Años_acargo_con_mismo_jefe"
str(datos) # Para observar los tipos de la variables (numericas o categoricas)
## tibble [1,470 x 24] (S3: tbl_df/tbl/data.frame)
##  $ Rotacion                   : 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 ...
##  $ Educacion                  : num [1:1470] 2 1 2 4 1 2 3 1 3 3 ...
##  $ Campo_Educacion            : chr [1:1470] "Ciencias" "Ciencias" "Otra" "Ciencias" ...
##  $ Satisfaccion_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" ...
##  $ Satisfacion_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_promocion      : 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 ...
head(datos) # Para observar las primeras 6 filas de la base de datos.
## # A tibble: 6 x 24
##   Rotacion  Edad `Viaje de Negocios` Departamento Distancia_Casa Educacion
##   <chr>    <dbl> <chr>               <chr>                 <dbl>     <dbl>
## 1 Si          41 Raramente           Ventas                    1         2
## 2 No          49 Frecuentemente      IyD                       8         1
## 3 Si          37 Raramente           IyD                       2         2
## 4 No          33 Frecuentemente      IyD                       3         4
## 5 No          27 Raramente           IyD                       2         1
## 6 No          32 Frecuentemente      IyD                       2         2
## # ... with 18 more variables: Campo_Educacion <chr>,
## #   Satisfaccion_Ambiental <dbl>, Genero <chr>, Cargo <chr>,
## #   Satisfacion_Laboral <dbl>, Estado_Civil <chr>, Ingreso_Mensual <dbl>,
## #   Trabajos_Anteriores <dbl>, Horas_Extra <chr>,
## #   Porcentaje_aumento_salarial <dbl>, Rendimiento_Laboral <dbl>,
## #   Años_Experiencia <dbl>, Capacitaciones <dbl>,
## #   Equilibrio_Trabajo_Vida <dbl>, Antigüedad <dbl>, ...
dim(datos) # Para observar la dimensión de la base de datos (total de observaciones y total de variables)
## [1] 1470   24

Nueva base de datos

Se realiza la selección de las variables de interes en una nueva base de datos, de las cuales se escogen 3 variables categorica y 3 cuantitativas, para ello se discriminan las siguientes variables:

Variable Categorica Descripción
Cargo Se plantea que está variable influye en la rotación de los empleados de una entidad, identificando que hay algunos cargos que generan mayor rotación que otros.
Estado Civil Se plantea que está variable influye en la rotación de los empleados de una entidad, identificando si las personas solteras tienen mayor rotación que aquellas que están casadas.
Satisfación Laboral Se plantea que está variable influye en la rotación de los empleados de una entidad debido a que las personas que tengan menos satisfacción que otros tienden a rotar.
Variable Cuantitativa Descripción
Edad Se quiere saber el comportamiento de las personas que laboran en la entidad e identifiar si la edad incide en la rotación
Porcentaje de Aumento Salarial Se plantea que las personas con menor aumento tienden a rotar más.
Ingreso Menssual Est variable como aquella que tiene gran impacto en la rotación de una persona. aquellos que menos ganan tienden a rotar más
library(dplyr) #para seleccionar variables

df <- select(datos,Rotacion,Edad,Estado_Civil,Cargo,Satisfacion_Laboral,Porcentaje_aumento_salarial,Ingreso_Mensual)

Analisis descriptivos de Variables

#antes de realizar estos analisis se debe convertir variables de interes a factor (categoricas) y numericas (numericas)

df$Rotacion = as.factor(df$Rotacion)
df$Edad = as.numeric(df$Edad)
df$Estado_Civil = as.factor(df$Estado_Civil)
df$Cargo = as.factor(df$Cargo)
df$Satisfacion_Laboral = as.factor(df$Satisfacion_Laboral)
df$Porcentaje_aumento_salarial = as.numeric(df$Porcentaje_aumento_salarial)
df$Ingreso_Mensual = as.numeric(df$Ingreso_Mensual)


library(table1) #Genera una tabla de descripciones de variables, teniendo en cuenta la Rotación como variable dependiente

#Se generan primero etiquetas para la descripción de cada variable

table1::label(df$Edad) <- "Edad"
table1::label(df$Estado_Civil) <- "Estado Civil"
table1::label(df$Cargo) <- "Cargo"
table1::label(df$Satisfacion_Laboral) <- "Satisfacción Laboral"
table1::label(df$Porcentaje_aumento_salarial) <- "Porcentaje Salario"
table1::label(df$Ingreso_Mensual) <- "Ingreso Mensual"

Descrip = table1::table1( ~ Edad + Estado_Civil + Cargo + Satisfacion_Laboral +
                  Porcentaje_aumento_salarial + Ingreso_Mensual | Rotacion, data = df )

Descrip
No
(N=1233)
Si
(N=237)
Overall
(N=1470)
Edad
Mean (SD) 37.6 (8.89) 33.6 (9.69) 36.9 (9.14)
Median [Min, Max] 36.0 [18.0, 60.0] 32.0 [18.0, 58.0] 36.0 [18.0, 60.0]
Estado Civil
Casado 589 (47.8%) 84 (35.4%) 673 (45.8%)
Divorciado 294 (23.8%) 33 (13.9%) 327 (22.2%)
Soltero 350 (28.4%) 120 (50.6%) 470 (32.0%)
Cargo
Director_Investigacion 78 (6.3%) 2 (0.8%) 80 (5.4%)
Director_Manofactura 135 (10.9%) 10 (4.2%) 145 (9.9%)
Ejecutivo_Ventas 269 (21.8%) 57 (24.1%) 326 (22.2%)
Gerente 97 (7.9%) 5 (2.1%) 102 (6.9%)
Investigador_Cientifico 245 (19.9%) 47 (19.8%) 292 (19.9%)
Recursos_Humanos 40 (3.2%) 12 (5.1%) 52 (3.5%)
Representante_Salud 122 (9.9%) 9 (3.8%) 131 (8.9%)
Representante_Ventas 50 (4.1%) 33 (13.9%) 83 (5.6%)
Tecnico_Laboratorio 197 (16.0%) 62 (26.2%) 259 (17.6%)
Satisfacción Laboral
1 223 (18.1%) 66 (27.8%) 289 (19.7%)
2 234 (19.0%) 46 (19.4%) 280 (19.0%)
3 369 (29.9%) 73 (30.8%) 442 (30.1%)
4 407 (33.0%) 52 (21.9%) 459 (31.2%)
Porcentaje Salario
Mean (SD) 15.2 (3.64) 15.1 (3.77) 15.2 (3.66)
Median [Min, Max] 14.0 [11.0, 25.0] 14.0 [11.0, 25.0] 14.0 [11.0, 25.0]
Ingreso Mensual
Mean (SD) 6830 (4820) 4790 (3640) 6500 (4710)
Median [Min, Max] 5200 [1050, 20000] 3200 [1010, 19900] 4920 [1010, 20000]
library(ggplot2)
library(plotly)

ggplot(df, aes(Estado_Civil, Edad))+
  stat_summary()

# Se genera diagrama de cajas para identificar el estado civily y la edad
  
table1
## function (x, ...) 
## {
##     UseMethod("table1")
## }
## <bytecode: 0x0000000020991c08>
## <environment: namespace:table1>

Analisis bivariado

Se realizan graficas para conocer el la tendencia de los datos y la relación de las variables categoricas con el impacto de aquellos que rotan en la entidad de igual manera el analisis de la diferencias entre el desenlace de Rotación y salario mensual

# Se genera diagrama de cajas para identificar los cargos que más ganan
  
plot_ly(df, x=df$Cargo, y=df$Ingreso_Mensual, name = "Cargo",type = 'box')
# Se genera diagrama de puntos para identificar las edades con relación a los salarios

plot_ly(df, x=df$Edad, y=df$Ingreso_Mensual, name = "Cargo",type = 'scatter')
# Se genera grafico de barras para identificar de acuerdo al estado civil quienes son los que más rotan

ggplot(data = df, mapping = aes(x = Estado_Civil, y =  Ingreso_Mensual, fill= Rotacion)) + 
    geom_bar(stat = "identity",position = "stack")

t.test(df$Ingreso_Mensual~df$Rotacion) # t.test para identificar si hay diferencias salariales entre aquellos que rotan y los que no rotan
## 
##  Welch Two Sample t-test
## 
## data:  df$Ingreso_Mensual by df$Rotacion
## t = 7.4826, df = 412.74, p-value = 4.434e-13
## alternative hypothesis: true difference in means between group No and group Si is not equal to 0
## 95 percent confidence interval:
##  1508.244 2583.050
## sample estimates:
## mean in group No mean in group Si 
##         6832.740         4787.093

Análisis de diferencia de medias T-test

Ho α t-tes Df p-value CI:95% Mean
No hay diferencias salariales entre las personas que rotan y las que no 0.05 7.4826 412.74 4.434e-13 1508.2: 2583

No: 6832.7

Yes: 4787

Dif: 2045.7

Se obtuvo un resultado un estadistico t de 7.4826 con un p-value < 0.05, por lo que se rechaza la Ho, estimando que hay diferencias significativas entre los salarios de quienes realizan rotaciones y quienes no. Dicha diferencia es de 2045.7

Se realizar analisis de la relación entre el desenlace de Rotación y Estado Civil

chisq.test(df$Estado_Civil, df$Rotacion) # se implementa prueba Chi2 para identificar si existe relación entre la rotación con el estado civil de las personas. 
## 
##  Pearson's Chi-squared test
## 
## data:  df$Estado_Civil and df$Rotacion
## X-squared = 46.164, df = 2, p-value = 9.456e-11
#install.packages("CGPfunctions") #se instala paquete CGPfunctions, para realizar test Chi2 y gráfica de proporciones 

library(CGPfunctions)

PlotXTabs2(data = df,x = Estado_Civil,y = Rotacion)

PlotXTabs2(data = df,x = Cargo,y = Rotacion)

Se identifica relaciones estadisticamente significativas entre la variable de rotación y estado civil al obtener un estadistico Chi2 = 46.16 y un p-value < 0.001. Se observa una mayor proporción para personas solteras que rotan del 26%, Divorciados del 10% y Casados del 12%

Conclusión:

Como conclusión se identifica que la eda de rotación está en 33 años,los que m{as rotan son los solteros con un 50% y que el cargo con mayor rotación dentro de la comparía son los ejecutivos de ventas y los tecnicos de laboratorio esto con relación a sus ingresos salariales.

Se identifica que el aréa con mayor tendencia a rotar en la compañía es el area de ventas debido a que presenta gran tendencia de empleados que rotan.

Este ejercicio permite conocer el comportamiento de los datos de una empresa a partir de análsis de autocorrelación de datos y análisis bibariados identificar su comportamiento para predecir y reconocer falencias en la compañia y lograr a partir de cifras realizar un plan de mejora para tomar las decisiones más adecuadas para la empresa.