#install.packages("devtools") # solo la primera vez
#install.packages("corrplot")
#install.packages("plotly")
#install.packages("CGPfunctions")
#install.packages("lessR")
#devtools::install_github("centromagis/paqueteMODELOS", force =TRUE)
library(paqueteMODELOS)
library(dplyr)
library(PerformanceAnalytics)
library(plotly)
library(CGPfunctions)
library(lessR)
library(tidyverse)

data("rotacion")
head(rotacion)

Analisis de los datos.

Iniciaremos el analisis con una revision de los datos y limpieza de los mismos.

  1. Primero consultaremos la dimension de la matriz de datos
dim(rotacion)
## [1] 1470   24

Contamos con 1470 filas y 24 variables o columnas.

  1. Validación de nulos en cada variable
colSums(is.na(rotacion))
##                    Rotación                        Edad 
##                           0                           0 
##           Viaje de Negocios                Departamento 
##                           0                           0 
##              Distancia_Casa                   Educación 
##                           0                           0 
##             Campo_Educación      Satisfacción_Ambiental 
##                           0                           0 
##                      Genero                       Cargo 
##                           0                           0 
##         Satisfación_Laboral                Estado_Civil 
##                           0                           0 
##             Ingreso_Mensual         Trabajos_Anteriores 
##                           0                           0 
##                 Horas_Extra Porcentaje_aumento_salarial 
##                           0                           0 
##         Rendimiento_Laboral            Años_Experiencia 
##                           0                           0 
##              Capacitaciones     Equilibrio_Trabajo_Vida 
##                           0                           0 
##                  Antigüedad            Antigüedad_Cargo 
##                           0                           0 
##       Años_ultima_promoción  Años_acargo_con_mismo_jefe 
##                           0                           0

No existen valores nulos

Para iniciar el analisis de las variables, primero conocemos sus tipos.

str(rotacion)
## tibble [1,470 × 24] (S3: tbl_df/tbl/data.frame)
##  $ Rotación                   : chr [1:1470] "Si" "No" "Si" "No" ...
##  $ Edad                       : num [1:1470] 41 49 37 33 27 32 59 30 38 36 ...
##  $ Viaje de Negocios          : chr [1:1470] "Raramente" "Frecuentemente" "Raramente" "Frecuentemente" ...
##  $ Departamento               : chr [1:1470] "Ventas" "IyD" "IyD" "IyD" ...
##  $ Distancia_Casa             : num [1:1470] 1 8 2 3 2 2 3 24 23 27 ...
##  $ Educación                  : num [1:1470] 2 1 2 4 1 2 3 1 3 3 ...
##  $ Campo_Educación            : chr [1:1470] "Ciencias" "Ciencias" "Otra" "Ciencias" ...
##  $ Satisfacción_Ambiental     : num [1:1470] 2 3 4 4 1 4 3 4 4 3 ...
##  $ Genero                     : chr [1:1470] "F" "M" "M" "F" ...
##  $ Cargo                      : chr [1:1470] "Ejecutivo_Ventas" "Investigador_Cientifico" "Tecnico_Laboratorio" "Investigador_Cientifico" ...
##  $ Satisfación_Laboral        : num [1:1470] 4 2 3 3 2 4 1 3 3 3 ...
##  $ Estado_Civil               : chr [1:1470] "Soltero" "Casado" "Soltero" "Casado" ...
##  $ Ingreso_Mensual            : num [1:1470] 5993 5130 2090 2909 3468 ...
##  $ Trabajos_Anteriores        : num [1:1470] 8 1 6 1 9 0 4 1 0 6 ...
##  $ Horas_Extra                : chr [1:1470] "Si" "No" "Si" "Si" ...
##  $ Porcentaje_aumento_salarial: num [1:1470] 11 23 15 11 12 13 20 22 21 13 ...
##  $ Rendimiento_Laboral        : num [1:1470] 3 4 3 3 3 3 4 4 4 3 ...
##  $ Años_Experiencia           : num [1:1470] 8 10 7 8 6 8 12 1 10 17 ...
##  $ Capacitaciones             : num [1:1470] 0 3 3 3 3 2 3 2 2 3 ...
##  $ Equilibrio_Trabajo_Vida    : num [1:1470] 1 3 3 3 3 2 2 3 3 2 ...
##  $ Antigüedad                 : num [1:1470] 6 10 0 8 2 7 1 1 9 7 ...
##  $ Antigüedad_Cargo           : num [1:1470] 4 7 0 7 2 7 0 0 7 7 ...
##  $ Años_ultima_promoción      : num [1:1470] 0 1 0 3 2 3 0 0 1 7 ...
##  $ Años_acargo_con_mismo_jefe : num [1:1470] 5 7 0 0 2 6 0 0 8 7 ...

Solicitud 1:

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

Análisis de variables categóricas.

1. Genero

Segun información de la OIT, existe una brecha entre los salarios de hombre y mujeres, de igual forma los hombres tienden a ganar más dinero desarrollando los mismos trabajos que las mujeres, es importante analizar si esta tendencia pueda verse reflejada en una mayor rotacion de los hombres por la facilidad de conseguir nuevos empleos.

2. Estado civil

Se espera que las personas en estado civil casado, pueden tener tendencia a la conservación y busqueda de una mayor estabilidad laboral, por las responsabilidades adquiridas y porque es más probable que tengan hijos. Las persona solteras pueden tener un grado de responsabilidad menor y facilidad para asumir riesgos en los cambios de empleos.

3. Horas extras

Las personas que realizan horas extras pueden presentar un agotamiento mayor y por lo tanto decantarse por la rotación, sin embargo, se debe analizar la remuneracion de las mismas, ya que en ocasiones esto le puede representar a las personas incluso un incentivo economico muy atractivo, siempre y cuando no sea muy continuo.

Análisis de variables cuantitativas

1. Edad

Es valido pensar que las personas más jovenes tienden a tener una mayor rotación, principalmente porque sus salarios pueden ser más bajos y tambien tienen mayores posibilidades de conseguir nuevas oportunidades laborales.

2. Ingreso mensual

Consideramos la hipotesis de que las personas con mejores remuneraciones tienden a rotar menos, una persona que reciba una compensacion justa por el trabajo que realiza, probablemente no busque cambiar de empleo constantemente.

3. Años de experiencia

Finalmente es valido pensar que las personas con una mayor experiencia roten menos, puede ser que logren una mejor a adaptación a la cultura organizacional y encontraron un balance en sus vidas.

Solicitud 2:

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

Analisis univariado de la variable Genero

data.frame(table(rotacion$Genero))
count_genero <- c(882, 588)

etiquetas_genero <- paste0(count_genero, " = ", round(100 * count_genero/sum(count_genero), 2), "%")

pie(count_genero, labels = etiquetas_genero)

legend("topleft", legend = c("Hombres", "Mujeres"),
       fill =  c("white", "lightblue"))

Nuestra base de datos cuenta con una mayoria de hombres (882) y mujeres (588).

Analisis univariado de la variable Estado Civil

data.frame(table(rotacion$Estado_Civil))
count_ecivil <- c(673, 327, 470)

etiquetas_ecivil <- paste0(count_ecivil, " = ", round(100 * count_ecivil/sum(count_ecivil), 2), "%")

pie(count_ecivil, labels = etiquetas_ecivil)

legend("topleft", legend = c("Casado", "Divorciado", "Soltero"),
       fill =  c("white", "lightblue", "mistyrose"))

La base de datos cuenta con una mayoria de personas casadas (673) que representan el 45.78%, seguido de personas solteras (470) representando el 31.97% y finalmente los divorciados son (327) representando el 22.24%.

Analisis univariado de la variable Horas Extras

data.frame(table(rotacion$Horas_Extra))
count_hextras <- c(1054, 416)

etiquetas_hextras <- paste0(count_hextras, " = ", round(100 * count_hextras/sum(count_hextras), 2), "%")

pie(count_hextras, labels = etiquetas_hextras)

legend("topleft", legend = c("No", "si"),
       fill =  c("white", "lightblue"))

En la base de datos encontramos que 1054 personas, es decir, el 71.7% no realizan horas extras, mientras que 416 o el 28.3% si las realizan.

Analisis univariado de la variable Edad

#Analizar el comportamiento de la variable Edad en la base de datos
hist(rotacion$Edad, main = "Edades en la base de datos general", xlab = "Años", ylab = "Cantidad",col = "#00868B")

summarytools::descr(rotacion$Edad)
## Descriptive Statistics  
## rotacion$Edad  
## N: 1470  
## 
##                        Edad
## ----------------- ---------
##              Mean     36.92
##           Std.Dev      9.14
##               Min     18.00
##                Q1     30.00
##            Median     36.00
##                Q3     43.00
##               Max     60.00
##               MAD      8.90
##               IQR     13.00
##                CV      0.25
##          Skewness      0.41
##       SE.Skewness      0.06
##          Kurtosis     -0.41
##           N.Valid   1470.00
##         Pct.Valid    100.00

Explorando la base de datos completa, encontramos que la edad media es de 36.9 años, un minimo de 18 años y la persona de mayor edad tiene 60 años.

Ahora bien, si analizamos las edades solo de las personas que han rotado.

rotacion_si <- subset(rotacion, Rotación == "Si")
hist(rotacion_si$Edad, main = "Edades de las personas que han rotado", xlab = "Años", ylab = "Cantidad",col = "#1A7332")

summarytools::descr(rotacion_si$Edad)
## Descriptive Statistics  
## rotacion_si$Edad  
## N: 237  
## 
##                       Edad
## ----------------- --------
##              Mean    33.61
##           Std.Dev     9.69
##               Min    18.00
##                Q1    28.00
##            Median    32.00
##                Q3    39.00
##               Max    58.00
##               MAD     8.90
##               IQR    11.00
##                CV     0.29
##          Skewness     0.71
##       SE.Skewness     0.16
##          Kurtosis    -0.11
##           N.Valid   237.00
##         Pct.Valid   100.00

La edad media dismunuye un poco, ubicandose en una media de 33.6 años, un minimo de 18 años y un maximo de 58 años.

Analisis univariado de la variable Ingresos mensuales

#Analizar el comportamiento de la variable Ingresos_Mensual en la base de datos
hist(rotacion$Ingreso_Mensual, main = "Ingresos mensuales", xlab = "Ingreso", ylab = "Cantidad",col = "#00868B")

summarytools::descr(rotacion$Ingreso_Mensual)
## Descriptive Statistics  
## rotacion$Ingreso_Mensual  
## N: 1470  
## 
##                     Ingreso_Mensual
## ----------------- -----------------
##              Mean           6502.93
##           Std.Dev           4707.96
##               Min           1009.00
##                Q1           2911.00
##            Median           4919.00
##                Q3           8380.00
##               Max          19999.00
##               MAD           3260.24
##               IQR           5468.00
##                CV              0.72
##          Skewness              1.37
##       SE.Skewness              0.06
##          Kurtosis              0.99
##           N.Valid           1470.00
##         Pct.Valid            100.00

En la base de datos general encontramos con respecto a los ingresos mensuales que la media es de $6502, el minimo se ubica en $1009 y el ingreso más alto es de $19999.

Ahora con respecto a los ingresos de las personas que han rotado, los datos son los siguientes.

hist(rotacion_si$Ingreso_Mensual, main = "Ingresos mensuales de las personas que han rotado", xlab = "Ingreso", ylab = "Cantidad",col = "#1A7332")

summarytools::descr(rotacion_si$Ingreso_Mensual)
## Descriptive Statistics  
## rotacion_si$Ingreso_Mensual  
## N: 237  
## 
##                     Ingreso_Mensual
## ----------------- -----------------
##              Mean           4787.09
##           Std.Dev           3640.21
##               Min           1009.00
##                Q1           2373.00
##            Median           3202.00
##                Q3           5916.00
##               Max          19859.00
##               MAD           1672.37
##               IQR           3543.00
##                CV              0.76
##          Skewness              1.90
##       SE.Skewness              0.16
##          Kurtosis              4.01
##           N.Valid            237.00
##         Pct.Valid            100.00

Encontramos que las personas que han rotado tienen unos ingresos mensuales por debajo de la media general, ubicandose en $4787, un minimo de $1009 y un salario maximo de $19859.

Analisis univariado de la variable Años de experiencia

#Analizar el comportamiento de la variable Años de experiencia en la base de datos
hist(rotacion$Años_Experiencia, main = "Años de experiencia en la base de datos", xlab = "Años", ylab = "Cantidad",col = "#00868B")

summarytools::descr(rotacion$Años_Experiencia)
## Descriptive Statistics  
## rotacion$Años_Experiencia  
## N: 1470  
## 
##                     Años_Experiencia
## ----------------- ------------------
##              Mean              11.28
##           Std.Dev               7.78
##               Min               0.00
##                Q1               6.00
##            Median              10.00
##                Q3              15.00
##               Max              40.00
##               MAD               5.93
##               IQR               9.00
##                CV               0.69
##          Skewness               1.11
##       SE.Skewness               0.06
##          Kurtosis               0.91
##           N.Valid            1470.00
##         Pct.Valid             100.00

En la compañia se encuentra una media de años de experiencia de 11.2 años y un maximo de 40 años de experiencia.

Ahora analizamos la experiencia en el conjunto de personas que han rotado.

hist(rotacion_si$Años_Experiencia, main = "Años de experiencia de las personas que han rotado", xlab = "Años", ylab = "Cantidad",col = "#1A7332")

summarytools::descr(rotacion_si$Años_Experiencia)
## Descriptive Statistics  
## rotacion_si$Años_Experiencia  
## N: 237  
## 
##                     Años_Experiencia
## ----------------- ------------------
##              Mean               8.24
##           Std.Dev               7.17
##               Min               0.00
##                Q1               3.00
##            Median               7.00
##                Q3              10.00
##               Max              40.00
##               MAD               4.45
##               IQR               7.00
##                CV               0.87
##          Skewness               1.67
##       SE.Skewness               0.16
##          Kurtosis               3.62
##           N.Valid             237.00
##         Pct.Valid             100.00

Encontramos una media menor a la general, de 8.2 años de experiencia y un maximo de 40 años.

Solicitud 3:

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.

Realizamos la codificacion de 0=no y 1=si para la variable rotación.

rotacion$Rotación <- factor(ifelse(rotacion$Rotación == "Si", 1, 0))
head(rotacion$Rotación)
## [1] 1 0 1 0 0 0
## Levels: 0 1

Analisis bivariado de las variables Rotación y Genero

graficogenero=PlotXTabs2(rotacion,Genero, Rotación,plottype = "percent")+ theme(axis.text.x = element_text(angle = 0, hjust = 1))
graficogenero

Aunque la diferencia es pequeña, se confirma la hipotesis del punto 1, donde indicamos que los hombre tienden a tener una mayor rotacion que las mujeres, en este caso los hombres presentan un 17% de la rotacion y las mujeres un 15%.

Analisis bivariado de las variables Rotación y Estado civil

graficoecivil=PlotXTabs2(rotacion,Estado_Civil, Rotación,plottype = "percent")+ theme(axis.text.x = element_text(angle = 0, hjust = 1))
graficoecivil

Confirmamos la hipotesis del punto 1, donde indicamos que las personas solteras podrian tener una rotacion mayor, sin embargo, las persona divorciadas tienen menor rotacion que los casados, distinto a lo indicado en la hipotesis.

Analisis bivariado de las variables Rotación y Horas extras

graficohextras=PlotXTabs2(rotacion,Horas_Extra, Rotación,plottype = "percent")+ theme(axis.text.x = element_text(angle = 0, hjust = 1))
graficohextras

COnfirmamos lo indicado en la hipotesis donde se indico que las personas que hacen horas extras tienden a tener una mayor rotacion, del conjunto de personas que hicieron horas extras, el 31% presento rotación.

Analisis bivariado de las variables Rotación y Edad

cajasedad=ggplot(rotacion,aes(x=Rotación,y=Edad,fill=Rotación))+geom_boxplot()+theme_bw()
ggplotly(cajasedad)

Con respecto a la edad, confirmamos que la rotacion tiende a presentarse en personas de menor edad, en el grafico anterior vemos que la media es de 32 años mientras que las personas que no rotan tienen una media de 36 años.

Analisis bivariado de las variables Rotación e Ingreso Mensual

cajasIngresos=ggplot(rotacion,aes(x=Rotación,y=Ingreso_Mensual,fill=Rotación))+geom_boxplot()+theme_bw()
ggplotly(cajasIngresos)

Confirmamos tambien que las personas que presentaron rotación tenian una media de salarios menor a las personas que no rotaron, la media de las personas que no rotaron se ubica en $5204 y las que si lo hicieron en 3202. Lo que se podria traducir en la busqueda de mejores oportunidades laborales mejor remuneradas.

Analisis bivariado de las variables Rotación y Años de Experiencia

cajasExperiencia=ggplot(rotacion,aes(x=Rotación,y=Años_Experiencia,fill=Rotación))+geom_boxplot()+theme_bw()
ggplotly(cajasExperiencia)

Se observa una mayor rotacion en las personas con menos años de experiencia, la media de las personas que no rotaron tienen una media de 10 años de experiencia y las que si lo hicieron tienen una media de 7 años.