# Cargar los datos
data("rotacion")
# Visión general de los datos
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)) %>% as.data.frame()
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, 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.
Nuestra base de datos cuenta con una mayoria de hombres (882) y mujeres (588).
library(plotly)
summarytools::freq(rotacion$Genero)
## Frequencies
## rotacion$Genero
## Type: Character
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
## F 588 40.00 40.00 40.00 40.00
## M 882 60.00 100.00 60.00 100.00
## <NA> 0 0.00 100.00
## Total 1470 100.00 100.00 100.00 100.00
# Calcular las frecuencias y los porcentajes
frecuencia_genero <- table(rotacion$Genero)
porcentajes <- prop.table(frecuencia_genero) * 100
# Crear el gráfico de torta con plotly
fig <- plot_ly(
labels = names(porcentajes), # Etiquetas de cada sección
values = porcentajes, # Valores porcentuales
type = "pie", # Tipo de gráfico
textinfo = 'label+percent', # Información mostrada en el gráfico
hoverinfo = 'text', # Información mostrada al pasar el mouse
text = paste(names(porcentajes), ": ", format(porcentajes, digits = 2), "%") # Texto personalizado al pasar el mouse
)
# Personalizar el título del gráfico
fig <- fig %>% layout(title = "Distribución por Género")
# Mostrar el gráfico
fig
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%.
library(plotly)
summarytools::freq(rotacion$Estado_Civil)
## Frequencies
## rotacion$Estado_Civil
## Type: Character
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ---------------- ------ --------- -------------- --------- --------------
## Casado 673 45.78 45.78 45.78 45.78
## Divorciado 327 22.24 68.03 22.24 68.03
## Soltero 470 31.97 100.00 31.97 100.00
## <NA> 0 0.00 100.00
## Total 1470 100.00 100.00 100.00 100.00
# Calcular las frecuencias y los porcentajes
frecuencia_ecivil <- table(rotacion$Estado_Civil)
porcentajes2 <- prop.table(frecuencia_ecivil) * 100
# Crear el gráfico de torta con plotly
fig <- plot_ly(
labels = names(porcentajes2), # Etiquetas de cada sección
values = porcentajes2, # Valores porcentuales
type = "pie", # Tipo de gráfico
textinfo = 'label+percent', # Información mostrada en el gráfico
hoverinfo = 'text', # Información mostrada al pasar el mouse
text = paste(names(porcentajes2), ": ", format(porcentajes2, digits = 2), "%") # Texto personalizado al pasar el mouse
)
# Personalizar el título del gráfico
fig <- fig %>% layout(title = "Distribución por Estado Civil")
# Mostrar el gráfico
fig
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.
library(plotly)
summarytools::freq(rotacion$Horas_Extra)
## Frequencies
## rotacion$Horas_Extra
## Type: Character
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------- ------ --------- -------------- --------- --------------
## No 1054 71.70 71.70 71.70 71.70
## Si 416 28.30 100.00 28.30 100.00
## <NA> 0 0.00 100.00
## Total 1470 100.00 100.00 100.00 100.00
# Calcular las frecuencias y los porcentajes
frecuencia_hextra <- table(rotacion$Horas_Extra)
porcentajes3 <- prop.table(frecuencia_hextra) * 100
# Crear el gráfico de torta con plotly
fig <- plot_ly(
labels = names(porcentajes3), # Etiquetas de cada sección
values = porcentajes3, # Valores porcentuales
type = "pie", # Tipo de gráfico
textinfo = 'label+percent', # Información mostrada en el gráfico
hoverinfo = 'text', # Información mostrada al pasar el mouse
text = paste(names(porcentajes3), ": ", format(porcentajes3, digits = 2), "%") # Texto personalizado al pasar el mouse
)
# Personalizar el título del gráfico
fig <- fig %>% layout(title = "Distribución por Horas Extra")
# Mostrar el gráfico
fig
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.
# Descripción estadística de Edad
descr_edad <- descr(rotacion$Edad)
print(descr_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
# Histograma de Edad
hist_edad <- plot_ly(data = rotacion, x = ~Edad, type = 'histogram', name = 'Edad') %>%
layout(title = "Histograma de Edad", xaxis = list(title = "Edad"), yaxis = list(title = "Frecuencia"))
# Boxplot de Edad
box_edad <- plot_ly(data = rotacion, y = ~Edad, type = 'box', name = 'Edad') %>%
layout(title = "Boxplot de Edad", yaxis = list(title = "Edad"))
# Mostrar gráficos
subplot(hist_edad, box_edad, nrows = 1, titleX = TRUE, titleY = TRUE) %>%
layout(title = "Análisis de la Variable Edad")
En la base de datos general encontramos con respecto a los ingresos mensuales que la media es de $6.502, el minimo se ubica en $1.009 y el ingreso más alto es de $19.999.
# Descripción estadística de Ingreso_Mensual
descr_ingreso <- descr(rotacion$Ingreso_Mensual)
print(descr_ingreso)
## 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
# Histograma de Ingreso_Mensual
hist_ingreso <- plot_ly(data = rotacion, x = ~Ingreso_Mensual, type = 'histogram', name = 'Ingreso Mensual') %>%
layout(title = "Histograma de Ingreso Mensual", xaxis = list(title = "Ingreso Mensual"), yaxis = list(title = "Frecuencia"))
# Boxplot de Ingreso_Mensual
box_ingreso <- plot_ly(data = rotacion, y = ~Ingreso_Mensual, type = 'box', name = 'Ingreso Mensual') %>%
layout(title = "Boxplot de Ingreso Mensual", yaxis = list(title = "Ingreso Mensual"))
# Mostrar gráficos
subplot(hist_ingreso, box_ingreso, nrows = 1, titleX = TRUE, titleY = TRUE) %>%
layout(title = "Análisis de la Variable Ingreso Mensual")
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.
# Descripción estadística de Años_Experiencia
descr_experiencia <- descr(rotacion$Años_Experiencia)
print(descr_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
# Histograma de Años_Experiencia
hist_experiencia <- plot_ly(data = rotacion, x = ~Años_Experiencia, type = 'histogram', name = 'Años de Experiencia') %>%
layout(title = "Histograma de Años de Experiencia", xaxis = list(title = "Años de Experiencia"), yaxis = list(title = "Frecuencia"))
# Boxplot de Años_Experiencia
box_experiencia <- plot_ly(data = rotacion, y = ~Años_Experiencia, type = 'box', name = 'Años de Experiencia') %>%
layout(title = "Boxplot de Años de Experiencia", yaxis = list(title = "Años de Experiencia"))
# Mostrar gráficos
subplot(hist_experiencia, box_experiencia, nrows = 1, titleX = TRUE, titleY = TRUE) %>%
layout(title = "Análisis de la Variable Años de Experiencia")
Ajuste del Modelo: residuos.