#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)
Iniciaremos el analisis con una revision de los datos y limpieza de los mismos.
dim(rotacion)
## [1] 1470 24
Contamos con 1470 filas y 24 variables o columnas.
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 ...
Seleccione 3 variables categóricas (distintas de rotación) y 3 variables cuantitativas, que se consideren estén relacionadas con la rotación.
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.
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.
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.
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.