El Club de R para RRHH es una comunidad de aprendizaje de programación de R, destinada a los profesionales y estudiantes que trabajan o quieren trabajar en el Ôrea.
Somos una comunidad que usa mayormente datos de ejemplo relacionados con RRHH, y que genera contenido en castellano para eliminar las barreras en el aprendizaje y facilitar que mƔs personas adopten las herramientas de anƔlisis de datos en sus trabajos.
Para saber mƔs de nosotros te invitamos a leer este post.
PodƩs acceder a los datos de la encuesta en este link.
library(tidyverse) # Transformar y limpiar datos
library(googlesheets4) # Leer datos desde Google Sheets
library(gargle) # Corregir lectura de sĆmbolos especiales desde Google Sheets
library(gt) # Dar formato a las tablas
library(extrafont) # Permite utilizar otras fuentes en los grƔficos y salidas
library(ggthemes) # AmplĆa las posibilidades estĆ©ticas de ggplot2
library(scales) # Permite cambiar los formatos de decimales, de porcentajes, etc.
library(ggalt) # Nuevos tipos de geom para ggplot2. Para realizar el grƔfico de gap salarial
library(funModeling) # Para explorar datos y modelos
library(forcats)
library(DT)
options(scipen = 999) # Modifica la visualización de los ejes numérico a valores nominales
loadfonts(quiet = TRUE) # Permite cargar en R otros tipos de fuentes.
# Estilo limpio sin lĆneas de fondo
estilo <- theme(panel.grid = element_blank(),
plot.background = element_rect(fill = "#FBFCFC"),
panel.background = element_blank(),
text = element_text(family = "Roboto"))
# Estilo limpio con lĆneas de referencia verticales en gris claro
estilov <- theme(panel.grid = element_blank(),
plot.background = element_rect(fill = "#FBFCFC"),
panel.background = element_blank(),
panel.grid.major.x = element_line(color = "#AEB6BF"),
text = element_text(family = "Roboto"))
# Estilo limpio con lĆneas de referencia horizontales en gris claro
estiloh <- theme(panel.grid = element_blank(),
plot.background = element_rect(fill = "#FBFCFC"),
panel.background = element_blank(),
panel.grid.major.y = element_line(color = "#AEB6BF"),
text = element_text(family = "Roboto"))
genero <- c("#8624F5", "#1FC3AA", "#FFD129", "#75838F") #Violeta - Verde - Amarillo - Gris
genero3 <- c("#8624F5","#FFD129", "#1FC3AA")
colores <- c("#8624F5", "#1FC3AA")
azul <- "#344D7E"
verde <- "#4A9FC7"
rosa1 <- "#B95192"
rosa2 <- "#EE5777"
naranja <- "#FF764C"
amarillo <- "#FFA600"
gris <- "#75838F"
lila <- "#755395"
rojo <- "#943126"
col4 <- c(azul, lila, rosa1, rosa2)
col5 <- c(azul, lila, rosa1, rosa2, naranja)
col6 <- c(azul, lila, rosa1, rosa2, naranja, amarillo)
# Creo un objeto con un texto que se va a repetir mucho a lo largo del anƔlisis
fuente <- "Fuente: Encuesta KIWI de Sueldos de RRHH para Latam"
# Creo objetos para formatear las etiquetas numƩricas de los ejes x e y
eje_x_n <- scale_x_continuous(labels = comma_format(big.mark = ".", decimal.mark = ","))
eje_y_n <- scale_y_continuous(labels = comma_format(big.mark = ".", decimal.mark = ","))
# Carga de datos
original <- sheets_read("1aeuu9dVfN42EjyvbmhEcsf0ilSz2DiXU-0MpnF896ss")
tipo_cambio <- sheets_read("1tEc4-_gXJi4lJ_Bj_ysleC-O01jiVOumOQCxGQ1tShM") %>%
select(pais, tipo_cambio)
# Preprocesamiento
kiwi <- original
limpios <- make.names(colnames(kiwi))
colnames(kiwi) <- limpios
rm(limpios)
kiwi <- kiwi %>%
select(-X.QuerƩs.contestar.mƔs.preguntas....31,
-X.QuerƩs.contestar.mƔs.preguntas....42) %>%
rename(genero = GƩnero,
genero_diverso = X.Te.identificĆ”s.como.LGBT...lesbiana..gay..bisexual..transexual..otra.minorĆa.sexual..,
edad = Edad,
discapacidad = X.TenƩs.alguna.discapacidad.,
nivel_formacion = `MÔximo.nivel.de.formación`,
carrera_grado = X.QuƩ.carrera.de.grado.estudiaste.,
tipo_universidad = X.En.quƩ.tipo.de.universidad.estudiaste.tu.carrera.de.grado.,
pais = PaĆs.en.el.que.trabajas,
provincia = Provincia.donde.trabajas,
trabajo = Trabajo,
rubro = Rubro.de.la.empresa,
dotacion = X.CuƔntos.empleados.tiene.la.empresa.,
origen_capital = Origen.del.capital,
dotacion_rh = X.CuƔntas.personas.integran.el.Ɣrea.de.RRHH.,
puesto = X.En.quƩ.puesto.trabajƔs.,
tipo_contratacion = Tipo.de.contratación,
funcion_rh = X.CuÔl.es.tu.función.principal.en.RRHH.,
personas_a_cargo = "X.CuƔntas.personas.tenƩs.a.cargo...ponƩ.0.si.no.tenƩs.gente.a.cargo.",
anios_en_empresa = "X.Hace.cuƔntos.aƱos.trabajas.en.la.empresa.donde.estƔs...0.para.menos.de.un.aƱo.",
anios_en_puesto = "X.Hace.cuƔntos.aƱos.estƔs.en.tu.puesto.actual...0.para.menos.de.un.aƱo.",
anios_experiencia = X.CuƔntos.aƱos.de.experiencia.tenƩs.en.RRHH.,
sueldo_bruto = X.CuÔl.es.tu.remuneración.BRUTA.MENSUAL.en.tu.moneda.local...antes.de.impuestos.y.deducciones.,
beneficios = X.QuƩ.beneficios.tenƩs.,
bono = X.RecibĆs.bonos.,
ajuste = X.Tuviste.ajustes.por.inflación.en.2020.,
ajuste_porcentaje = X.CuƔl.fue.el.porcentaje.de.aumento.acumulado.que.tuviste.en.2020.,
ajuste_mes = Mes.del.Ćŗltimo.ajuste,
otros_proyectos = X.TrabajƔs.en.proyectos.independientes.ademƔs.de.tu.empleo.,
erp = X.Qué.sistema.de.gestión.de.RRHH.usan.en.tu.empresa.,
nombre_area = X.Cómo.se.llama.el.Ôrea.en.tu.empresa.,
mate = X.Se.podĆa.tomar.mate.en.las.oficinas.de.tu.empresa...antes.del.COVID.19.,
idioma_exigencia = X.Te.exigieron.saber.un.idioma.extranjero..inglƩs..portuguƩs..etc...para.entrar.a.trabajar.en.tu.empresa.,
idioma_porcentaje = X.QuƩ.porcentaje.del.tiempo.usas.el.idioma.extranjero.en.tu.puesto.actual.,
contactos_linkedin = "X.CuƔntos.contactos.tenƩs.en.LinkedIn...ponƩ.0.si.no.tenƩs.cuenta.de.LinkedIn.",
satisfaccion = X.QuƩ.tan.satisfecho.estƔs.con.tu.empresa.,
busqueda = X.EstƔs.buscando.trabajo.,
beneficios_expectativa = X.QuĆ©.beneficios.te.gustarĆa.tener.,
rh_una_palabra = DefinĆ.a.RRHH.con.una.sola.palabra,
pregunta_bizarra = X.CuƔl.es.la.pregunta.mƔs.bizarra.que.te.han.hecho.has.hecho.en.una.entrevista.,
teletrabajo = X.EstƔs.trabajando.desde.tu.casa.,
elementos = X.Qué.elementos.te.proveyó.la.empresa.para.que.puedas.trabajar.desde.tu.casa.,
valoracion_gestion_empresa = X.Cómo.valorarĆas.la.gestión.de.tu.empresa.en.este.nuevo.contexto.,
registro_fiscal = X.Cómo.estÔs.registrado.a.fiscalmente.,
anios_freelance = X.Hace.cuƔntos.aƱos.trabajƔs.como.freelance.,
lugar_trabajo = X.Dónde.trabajÔs.habitualmente...sin.considerar.la.coyuntura.por.COVID.19.,
exporta = X.ExportƔs.tus.servicios.,
medio_pago_exterior = Si.exportĆ”s.servicios...a.travĆ©s.de.quĆ©.medios.de.pago.recibĆs.los.pagos.del.exterior.,
cuotas = X.AceptƔs.pagos.en.cuotas.,
colaboracion_freelance = X.TrabajƔs.con.otros.freelancers.de.tu.mismo.rubro.,
servicio_busqueda = X.Tu.servicio.principal.estÔ.relacionado.con.búsqueda.y.selección.,
busqueda_it = X.Te.dedicĆ”s.principalmente.a.realizar.bĆŗsquedas.de.IT.TecnologĆa.,
trabajo_a_riesgo =X.TrabajƔs.a.riesgo.,
coeficiente = X.CuƔl.es.el.coeficiente.que.cobrƔs.por.tus.servicios.,
base_coeficiente = El.coeficiente.lo.calculƔs.sobre.,
garantia = X.OfrecĆ©s.garantĆa.,
servicio_principal = X.CuĆ”l.es.el.servicio.principal.que.brindas...si.brindĆ”s.mĆ”s.de.un.servicio..elegĆ.el.que.mĆ”s.ingresos.genere.,
valor_hora = X.CuƔl.es.el.valor.hora.promedio.que.ofrecƩs...moneda.local.)
# Base de freelancers
freelo <- kiwi %>%
filter(trabajo == "Freelance")
# Base de empleados en relación de dependencia
rh <- kiwi %>%
filter(trabajo == "Relación de Dependencia",
funcion_rh != "Ninguno",
funcion_rh != "No me desempeƱo en el Ɣrea de RRHH.",
funcion_rh != "Trabajo en el Ɣrea de Sistemas.",
funcion_rh != "No trabajo en el area",
funcion_rh != "No trabajo en recursos humanos",
funcion_rh != "No trabajo en Rrhh",
funcion_rh != "Trabajo en Administración y Finanzas",
funcion_rh != "Aaa",
funcion_rh != "IT") %>%
mutate(sueldo_bruto = as.numeric(unlist(sueldo_bruto)),
puesto = factor(puesto))
rh <- rh %>%
filter(puesto != "Juzgado Civil y Comercial",
puesto != "Programador",
puesto != "Cuidado",
puesto != "Asesor",
puesto != "Jefe de Proyecto") %>%
mutate(puesto = str_trim(puesto, side = "both"), # Elimina espacios vacĆos
puesto = fct_collapse(puesto, "Gerente" = "Superintendente"),
puesto = fct_collapse(puesto, "Director" = "Director ( escalafón municipal)"),
puesto = fct_collapse(puesto, "HRBP" = c("Senior ConsultorĆa", "specialist", "especialista",
"Especialista en selección IT", "Recruiter")),
puesto = fct_collapse(puesto, "Responsable" = c("Coordinación", "Coordinador de Payroll",
"Encargado", "Supervisor")),
puesto = fct_collapse(puesto, "Administrativo" = c("Asistente", "Asistente RRHH", "Aux",
"Capacitador", "Consultor Ejecutivo",
"consultor jr")),
puesto = fct_collapse(puesto, "Analista" = c("Asesoramiento", "Consultor", "Generalista",
"Reclutadora", "Selectora", "Senior"))) %>%
select(Marca.temporal:valoracion_gestion_empresa)
# Pasa los campos de lista a numƩricos
rh <- rh %>%
mutate(anios_en_empresa = as.numeric(unlist(anios_en_empresa)),
anios_en_puesto = as.numeric(unlist(anios_en_puesto)),
anios_experiencia = as.numeric(unlist(anios_experiencia)),
ajuste_porcentaje = as.numeric(unlist(ajuste_porcentaje)))
# Modifica los registros
rh$contactos_linkedin[[150]] <- 800
rh$contactos_linkedin[[214]] <- 500
rh$contactos_linkedin[[222]] <- 1000
rh$contactos_linkedin[[269]] <- 500
rh$contactos_linkedin[[282]] <- 1000
rh$contactos_linkedin[[339]] <- 1000
rh$contactos_linkedin[[382]] <- 30000
rh$contactos_linkedin[[385]] <- 500
rh$contactos_linkedin[[398]] <- 5000
rh$contactos_linkedin[[445]] <- 500
rh$contactos_linkedin[[459]] <- 500
rh$contactos_linkedin[[595]] <- 500
rh$contactos_linkedin[[598]] <- 500
rh <- unnest(data = rh, cols = c(anios_en_empresa, anios_en_puesto, anios_experiencia,
ajuste_porcentaje, contactos_linkedin), keep_empty = TRUE)
# Corregir orden de puestos y simplificar gƩnero
rh <- rh %>%
mutate(puesto = factor(puesto, levels = c("Pasante", "Administrativo", "Analista",
"HRBP", "Responsable","Jefe",
"Gerente", "Director")),
genero = fct_recode(genero, "GĆ©nero Diverso" = "GĆ©nero diverso (gĆ©nero diverso / gĆ©nero fluido /otras minorĆas)"))
rh <- rh %>%
filter(nivel_formacion != "Secundario en curso") %>%
mutate(nivel_formacion = fct_collapse(nivel_formacion, "Universitario completo" = c("MaestrĆa abandonada"),
"Secundario completo" = c("Terciario abandonado", "Terciario en curso",
"Universitario abandonado"),
"MaestrĆa completa" = c("Doctorado en curso")))
# Comparación de sueldos en dólares
rh <- rh %>%
left_join(tipo_cambio, by = "pais") %>%
mutate(multiplicador = if_else(tipo_contratacion == "Part time", 1.5, 1),
sueldo_ft = sueldo_bruto * multiplicador, # Hace la equivalencia de un sueldo part time a full time
sueldo_dolar = sueldo_ft/tipo_cambio, # Convierto los sueldos a dólares
cuenta = 1)
rtas_pais <- rh %>%
select(pais) %>%
distinct(pais) %>%
count() %>%
pull()Como en RRHH trabajamos con datos sensibles, es complejo conseguir datos para practicar cuando estĆ”s aprendiendo sobre People Analytics, especialmente la parte prĆ”ctica. Por eso, e inspirados en la Encuesta de SysArmy, una comunidad de tecnologĆa, que entre otras cosas, organiza eventos como Nerdearla.
Por esta razón hicimos nuestra propia encuesta, relevando datos de profesionales que trabajan tanto bajo relación de dependencia como de manera freelance. El relevamiento de datos lo hicimos entre el 1° y el 31 de octubre de 2020.
Recibimos en total 762 respuestas de 14 paĆses diferentes.
# Respuestas por paĆses
paises <- kiwi %>%
select(pais) %>%
mutate(cuenta = 1) %>%
group_by(pais) %>%
summarise(Cuenta = sum(cuenta)) %>%
arrange(-Cuenta)
gt(paises) %>%
tab_header(title = "Cantidad de respuestas por paĆs") %>%
tab_source_note(source_note = fuente) %>%
cols_label(pais = "PaĆs")| Cantidad de respuestas por paĆs | |
|---|---|
| PaĆs | Cuenta |
| Argentina | 683 |
| Bolivia | 15 |
| Chile | 13 |
| Paraguay | 12 |
| MƩxico | 9 |
| Uruguay | 9 |
| PerĆŗ | 8 |
| Ecuador | 3 |
| Estados Unidos | 2 |
| PanamĆ” | 2 |
| Venezuela | 2 |
| Colombia | 1 |
| Costa Rica | 1 |
| Guatemala | 1 |
| Otro Europa | 1 |
| Fuente: Encuesta KIWI de Sueldos de RRHH para Latam | |
Del total de respuestas, 661 son de personas que trabajan en relación de dependencia en RRHH, y 88 trabajan de manera freelance.
kiwi %>%
select(trabajo) %>%
group_by(trabajo) %>%
count() %>%
ggplot(aes(x = n, y = trabajo)) +
geom_col(fill = azul) +
estilov +
labs(title = "Respuestas por tipo de trabajador",
x = "", y = "",
caption = fuente)La participación según el género entre trabajadores en relación de dependencia:
div <- rh %>%
select(genero) %>%
mutate(genero = factor(genero,
levels = c("Femenino", "Masculino", "GƩnero Diverso",
"Prefiero no responder"))) %>%
group_by(genero) %>%
summarise (n = n()) %>%
mutate(freq = n/sum(n)) %>%
arrange(-n)
# Compute the cumulative percentages (top of each rectangle)
div$ymax <- cumsum(div$freq)
# Compute the bottom of each rectangle
div$ymin <- c(0, head(div$ymax, n=-1))
# Compute label position
div$labelPosition <- (div$ymax + div$ymin) / 2
# Compute a good label
div$label <- paste0(div$genero, "\n Cant: ", div$n)
# Make the plot
ggplot(div, aes(ymax=ymax, ymin=ymin, xmax=4, xmin=3, fill=genero)) +
geom_rect() +
coord_polar(theta="y") + # Try to remove that to understand how the chart is built initially
xlim(c(2, 4)) +# Try to remove that to see how to make a pie chart
scale_fill_manual(values = c("#8624F5", "#1FC3AA", "#FFD129","#75838F")) +
theme_void() +
theme(legend.position = "right",
panel.background = element_blank(),
text = element_text(family = "Roboto")) +
labs(title = "Cantidad de respuestas según género",
fill = "GƩnero",
caption = fuente)En esta sección nos dedicaremos a comparar los sueldos entre los paĆses. En primer lugar, hay que resaltar que los resultados no son representativos de los paĆses, sino que lo son de los datos recolectados.
Por otra parte, la baja cantidad de respuestas recolectaas de otros paĆses fuera de la Argentina, nos hace imposible, hacer un anĆ”lisis comparado representativo de los puestos. Sin embargo, hay algunos datos intresantes para analizar.
Primero, analicemos los sueldos de los trabajadores en relación de dependencia, de cuyos paĆses hayamos recibido al menos 5 respuestas.
sueldos_dolar <- rh %>%
select(puesto, sueldo_dolar, pais, tipo_contratacion) %>%
filter(puesto != "Pasante", tipo_contratacion != "Pasante")
# Eliminamos los sueldos que estƔn dentro del rango entre los percentiles 5 y 95
numericos <- profiling_num(sueldos_dolar)
poda_p05 <- numericos[1,6]
poda_p95 <- numericos[1,10]
# Dado que los percentiles 5 y 95 estƔn en U$400 y 2689 respectivamente,
# podamos todo lo que estƩ fuera de ese rango
media_pais <- sueldos_dolar %>%
filter(pais %in% c("Argentina", "Bolivia", "Chile", "Paraguay", "Uruguay", "PerĆŗ"),
between(sueldo_dolar,poda_p05,poda_p95)) %>%
group_by(pais) %>%
summarise(sueldop = list(mean_se(sueldo_dolar))) %>%
unnest(cols = c(sueldop))
sueldo_dolar_pais <- rh %>%
select(pais, sueldo_dolar) %>%
filter(between(sueldo_dolar, poda_p05, poda_p95),
pais %in% c("Argentina", "Bolivia", "Chile", "Paraguay", "Uruguay", "PerĆŗ"))
# GrƔfico
ggplot(media_pais, aes(x = reorder(pais, -y), y = y))+
geom_col(fill = "#344D7E", alpha = 0.85) +
geom_errorbar(aes(ymin = ymin,ymax = ymax), position = "dodge", color = "#75838F")+
geom_point(data = sueldo_dolar_pais, aes(x = pais, y = sueldo_dolar),
alpha = 0.3, size = 2, color = "#75838F")+
geom_text(aes(label = round(x=y, 0), vjust = 1.5, fontface = "bold"),size = 4, color = "white")+
eje_y_n +
labs(title = "Mediana salarial por paĆs",
subtitle = "Sueldos de RRHH en U$S",
caption = "Fuente: Encuesta KIWI de Sueldos de RRHH para Latam \n PaĆses con 5 respuestas o mĆ”s",
x = "", y = "") +
estilorh %>%
select(puesto, sueldo_dolar) %>%
filter(puesto != "Pasante") %>%
group_by(puesto) %>%
summarise(mediana_salarial = median(sueldo_dolar)) %>%
ggplot(aes(x = mediana_salarial, y = puesto)) +
geom_col(fill = azul) +
estilov +
labs(title = "Mediana salarial por puesto",
subtitle = "Sueldos de RRHH en U$S",
x = "", y = "",
caption = fuente) +
eje_x_nLa razón por la cual la mediana salarial de las personas en puesto de Dirección es menor a la de las personas en puestos de Gerente se explica por el tamaño de la muestra y las respuestas recibidas. En la tabla a continuación incorpora la cantidad de respuestas recibidas para cada uno de estas posiciones.
gt(rh %>%
select(puesto, sueldo_dolar) %>%
filter(puesto != "Pasante") %>%
mutate(puesto = factor(puesto, levels = c("Director", "Gerente", "Jefe",
"Responsable", "HRBP", "Analista",
"Administrativo"))) %>%
group_by(puesto) %>%
summarise(mediana_salarial = median(sueldo_dolar),
cant = n())
) %>%
tab_header(title = "Mediana salarial por puestos",
subtitle = "Sueldos en U$D") %>%
tab_source_note(source_note = fuente) %>%
fmt_currency(columns = "mediana_salarial", decimals = 0,
sep_mark = ".", dec_mark = ",") %>%
cols_label(puesto = "Posición",
mediana_salarial = "Mediana Sueldo",
cant = "Respuestas") | Mediana salarial por puestos | ||
|---|---|---|
| Sueldos en U$D | ||
| Posición | Mediana Sueldo | Respuestas |
| Director | $1.711 | 16 |
| Gerente | $2.217 | 55 |
| Jefe | $1.359 | 89 |
| Responsable | $894 | 145 |
| HRBP | $1.013 | 63 |
| Analista | $775 | 237 |
| Administrativo | $536 | 51 |
| Fuente: Encuesta KIWI de Sueldos de RRHH para Latam | ||
Si dividimos los grĆ”ficos segĆŗn el Origen del Capital, podemos apreciar que en lĆneas generales, la mediana salarial en empresas multinaciones es mayor que en las empresas nacionales.
rh %>%
select(origen_capital, puesto, sueldo_dolar) %>%
filter(puesto != "Pasante",
between(sueldo_dolar, poda_p05, poda_p95)) %>%
group_by(puesto, origen_capital) %>%
summarise(mediana_salarial = median(sueldo_dolar)) %>%
ggplot(aes(x = mediana_salarial, y = puesto, fill = origen_capital)) +
geom_col() +
geom_text(aes(label = round(x=mediana_salarial, 0), hjust = 1.2, fontface = "bold"),size = 3, color = "white") +
scale_fill_manual(values = c(verde, azul)) +
estilov +
eje_x_n +
facet_wrap(~origen_capital) +
labs(title = "Mediana salarial por puesto segĆŗn origen del capital",
subtitle = "Sueldos de RRHH en U$S",
x = "", y = "", fill = "",
caption = fuente) +
theme(legend.position = "bottom")Veamos estos datos de otra manera:
library(CGPfunctions)
slope_df <- rh %>%
select(puesto, sueldo_dolar, origen_capital) %>%
filter(puesto != "Director",
between(sueldo_dolar, poda_p05, poda_p95)) %>%
group_by(puesto, origen_capital) %>%
summarise(mediana_salarial = round(median(sueldo_dolar)))
newggslopegraph(dataframe = slope_df,
Times = origen_capital,
Measurement = mediana_salarial,
Grouping = puesto,
Title = "Diferencias entre sueldos de RRHH en empresas nacionales y multinacionales",
SubTitle = "Mediana Salarial. Sueldos en U$S",
Caption = fuente, WiderLabels = T
)Para el anƔlisis de los rubros de la empresa, vamos a filtrar los 5 rubros que tienen mƔs respuestas. TambiƩn eliminaremos del anƔlisis el puesto de Director porque no se encuentra presente en todos los rubros.
top_5_rubros <- rh %>%
select(rubro) %>%
group_by(rubro) %>%
count(sort = TRUE) %>%
filter(rubro != "Otros", n > 30) %>%
pull(var = rubro)
rh %>%
select(rubro, origen_capital, puesto, sueldo_dolar) %>%
filter(puesto != "Pasante", puesto != "Director",
between(sueldo_dolar, poda_p05, poda_p95),
rubro %in% top_5_rubros) %>%
group_by(rubro, puesto, origen_capital) %>%
summarise(mediana_salarial = median(sueldo_dolar)) %>%
ggplot(aes(x = mediana_salarial, y = puesto, fill = origen_capital)) +
geom_col() +
geom_text(aes(label = round(x=mediana_salarial, 0), hjust = 1.2, fontface = "bold"),size = 3, color = "white") +
scale_fill_manual(values = c(verde, azul)) +
estilo +
eje_x_n +
facet_grid(rubro~origen_capital) +
labs(title = "Mediana salarial por puesto segĆŗn origen del capital",
subtitle = "Sueldos de RRHH en U$S",
x = "", y = "", fill = "",
caption = fuente) +
theme(legend.position = "bottom")rm(top_5_rubros)Para ver las medianas salariales en dólares por rubros, puedes ver esta tabla.
datatable(
rh %>%
select(rubro, sueldo_dolar) %>%
group_by(rubro) %>%
summarise(mediana_salarial = round(median(sueldo_dolar)),
Respuestas = n()) %>%
arrange(-mediana_salarial),
colnames = c("Rubro", "Mediana Salarial", "Respuestas"),
caption = "Mediana salarial por rubro. En U$S"
)Teniendo en cuenta que la cantidad mayoritaria de respuestas corresponde a personas de Argentina, vamos a realizar un anĆ”lisis detallado de los sueldos en este paĆs.
Como primeros pasos, vamos a filtrar los datos correspondientes a Argentina, y luego filtramos los sueldos que estƩn entre los percentiles 5 y 95, para eliminar valores espurios o extremos que ensucien el anƔlisis.
TambiƩn eliminamos el puesto de Director del anƔlisis y las respuestas con GƩnero diverso por la baja cantidad de respuestas.
Otra conversión que hicimos fue pasar los sueldos de las personas que trabajan part-time a una equivalencia full-time multiplicando por 1.5 el sueldo completado en la encuesta.
En esta instancia, tambiƩn simplificamos los nombres de algunos rubros para mejorar las visualizaciones de los resultados.
rh_ar <- rh %>%
filter(pais == "Argentina")
# Poda de sueldos entre percentiles 5 y 95
numericos2 <- rh_ar %>%
select_if(is.numeric) %>%
profiling_num()
p_05 <- numericos2[8,6]
p_95 <-numericos2[8,10]
rh_ar <- rh_ar %>%
filter(between(sueldo_bruto, p_05, p_95),
puesto != "Director", puesto != "Pasante",
genero != "GƩnero Diverso",
anios_experiencia < 50) %>%
mutate(rubro = fct_recode(rubro, "Servicios financieros" = "Servicios financieros; seguros",
"Transporte" = "Transporte (incluyendo aviación civil; ferrocarriles por carretera)",
"Ind. Automotriz y Autopartistas" = "Terminales automotrices, fƔbricas autopartistas, y afines",
"TecnologĆa" = "TecnologĆas de Información, Sistemas, y afines",
"Ind. Petrolera" = "Petróleo y producción de gas; refinación de petróleo"),
multiplicador = if_else(tipo_contratacion == "Part time", 1.5, 1),
sueldo_ft = sueldo_bruto * multiplicador)En el siguiente grÔfico podemos ver la distribución de los sueldos por cada uno de los puestos. En los boxplots podemos ver:
Primer cuartil: La parte inferior de la caja.
Mediana: La lĆnea gruesa dentro de cada rectĆ”ngulo.
Tercer cuartil: La parte superior de la caja
Outliers: son los valores extremos identificados con puntos.
rh_ar %>%
ggplot(aes(x = puesto, y = sueldo_ft, fill = genero)) +
geom_boxplot() +
scale_fill_manual(values = genero) +
eje_y_n +
estiloh +
labs(title = "Distribución de sueldos por género",
subtitle = "Datos de Argentina - en AR$",
x = "", y = "", fill = "GƩnero",
caption = fuente) +
theme(panel.grid.minor.y = element_line(color = "#AEB6BF"))Hay varias cosas interesantes para analizar:
Si miramos las medianas de los puestos, en la mayorĆa de los puestos hay una paridad relativa, como por ejemplo en HRBP, Jefe y Gerentes. Tampoco hay mucha diferencia en la mediana de los Administrativos. En las posiciones de Analista, y Responsable los varones tienen una mediana salarial un poco mĆ”s alta.
Pero lo mƔs interesante son las distribuciones de los sueldos. Miremos por ejemplo los Jefes. La mediana es prƔcticamente la misma, pero el tamaƱo de la parte inferior de la caja es mucho mƔs amplia en el caso de las mujeres, mientras que la parte superior de la caja es mƔs amplia en el caso de los varones.
Esto nos da la pauta que si bien el valor que divide a la mitad la muestra de hombres y mujeres (la mediana) es muy parejo, el rango de los sueldos de las Jefas llega a valores mÔs bajos lo que implica que el piso es mÔs bajo para mujeres que para hombres. Mientras que de la mediana hacia arriba es mÔs amplia en el caso de los hombres en comparación con las mujeres.
En el Ćŗnico puesto que hay una distribución similar entre ambos gĆ©neros es en el caso de los HRBP, pero en el resto de los casos vemos que la asimetrĆa que describimos anteriormente se repite.
Podemos visualizar el gap salarial en este grƔfico:
gap_salarial <- rh_ar %>%
select(genero, puesto, sueldo_ft)
gap_salarial <- gap_salarial %>%
filter(!is.na(puesto)) %>%
mutate(cuenta = 1)
brecha <- gap_salarial %>%
filter(genero %in% c("Femenino", "Masculino"),
puesto %in% c("Director", "Gerente","Jefe", "HRBP","Responsable", "Analista", "Administrativo")) %>%
mutate(puesto = factor(puesto, levels = c("Administrativo","Analista",
"HRBP", "Responsable", "Jefe",
"Gerente","Director" ))) %>%
group_by(genero, puesto) %>%
summarise(media_salarial = mean(sueldo_ft))
brecha_graf <- brecha %>%
pivot_wider(., names_from = genero, values_from = media_salarial) %>%
mutate(brecha = percent((Masculino-Femenino)/Masculino, 1),
x = (Masculino + Femenino)/2)
ggplot(brecha_graf,
aes(x = Femenino, xend = Masculino, y = puesto,
group = puesto, label = brecha)) +
geom_dumbbell(color = "#808080",
size_x = 3, size_xend = 3,
colour_x = colores[1],
colour_xend = colores[2]) +
geom_text(data = brecha_graf,
aes(x, puesto, label = brecha), nudge_y = .2) +
labs(title = "Brecha salarial por puestos de RRHH",
subtitle = "Sueldos promedios en Argentina",
x = "",
y = NULL,
caption = fuente) +
eje_x_n +
scale_color_manual(values = colores) +
theme_minimal()+
theme(plot.background = element_rect(fill = "#fbfcfc"),
text = element_text(family = "Roboto"))Veamos el sueldo promedio en cada uno de los rubros.
En el grÔfico a continuación podemos ver los sueldos promedios por rubro, teniendo en cuenta a los rubros con mÔs de 12 respuestas.
rubro_ar <- rh_ar %>%
select(rubro, sueldo_ft) %>%
group_by(rubro) %>%
summarise(media_sueldo = mean(sueldo_ft),
respuestas = n()) %>%
arrange(-respuestas)
top_rubros <- rubro_ar %>%
filter(rubro != "Otros", respuestas > 15) %>%
pull(rubro)
rubro_ar %>%
filter(respuestas > 12) %>%
ggplot(aes(x = media_sueldo, y = reorder(rubro, media_sueldo))) +
geom_col(fill = azul) +
geom_text(aes(label = round(x=media_sueldo, 0), hjust = 1.5),size = 3, color = "white") +
labs(title = "Promedio salarial por rubro",
subtitle = "Datos de Argentina - en AR$",
x = "", y = "",
caption = fuente) +
estilov +
theme(axis.text.x = element_blank(),
axis.ticks.x = element_blank())Ahora comparemos los sueldos por rubros y géneros. Aquà podremos apreciar las diferencias entre los sueldos promedios de los hombres y mujeres en cada rubro.
rh_ar %>%
filter(rubro %in% top_rubros) %>%
select(rubro, sueldo_ft, genero) %>%
group_by(rubro, genero) %>%
summarise(media_sueldo = mean(sueldo_ft),
respuestas = n()) %>%
arrange(-respuestas) %>%
ggplot(aes(x = media_sueldo, y = reorder(rubro, media_sueldo), fill = genero)) +
geom_col(position = "dodge") +
geom_text(aes(label = round(x=media_sueldo,0), hjust = 1.4, vjust = 0.3),
size = 3, color = "white", position = position_dodge(width = .9)) +
scale_fill_manual(values = genero) +
labs(title = "Promedio salarial por rubro y gƩnero",
subtitle = "Datos de Argentina - en AR$",
x = "", y = "", fill = "GƩnero",
caption = fuente) +
eje_x_n +
estilov +
theme(axis.text.x = element_blank(),
axis.ticks.x = element_blank())Por último, analicemos los sueldos de los 6 rubros con mayor cantidad de respuestas, y visualicemos las distribuciones de los sueldos por puesto y género. En este grÔfico podemos ver los cuartiles delimitando las zonas sombreadas, y la mediana con el punto gris. Los puntos violetas y verdes representan a las mujeres y los hombres respectivamente en cada uno de los puestos.
library(ggeconodist)
rh_ar %>%
filter(genero != "GƩnero Diverso",
puesto != "Director",
rubro %in% c("TecnologĆa", "Servicios de salud", "Comercio",
"Alimentación; bebidas; tabaco",
"Servicios de consultorĆa", "Construcción")) %>%
ggplot(aes(x = puesto, y = sueldo_bruto)) +
geom_econodist(width = 0.5) +
geom_point(aes(y = sueldo_bruto, color = genero), alpha = 0.3,
position = position_jitter(width = 0.25)) +
scale_color_manual(values = genero) +
eje_y_n +
coord_flip() +
facet_wrap(~rubro, ncol = 2) +
estilov +
labs(title = "Distribución salarial por puesto y rubro",
subtitle = "Datos de Argentina - en AR$",
x = "", y = "", color = "GƩnero",
caption = fuente)En esta sección del anÔlisis buscamos identificar cuÔles son los factores que influyen en los ingresos (independientemente de la posición), asà que empezamos a explorar los datos.
La primera pregunta que nos hicimos fue si los años de trayectoria influyen en el sueldo. Nuestra hipótesis es que a mayor cantidad de años de experiencia, mayor iba a ser el ingreso.
Lo que vamos a ver en el siguiente grÔfico de dispersión, es en el eje horizontal, los años de experiencia, y en el eje vertical, el sueldo bruto expresado en pesos argentinos. Luego, vamos a graficar una recta, que nos va a indicar la fuerza de esa relación.
lm_rh <- lm(sueldo_ft ~ anios_experiencia, data = rh_ar)
lm_hr_results <- summary(lm_rh)
lm_rh_r2 <- round(lm_hr_results[["r.squared"]],3)
ggplot(rh_ar, aes(x=anios_experiencia, y = sueldo_ft)) +
geom_point(color = "#1FC3AA", alpha = 0.4, size = 2) +
geom_smooth(method = "lm") +
theme_minimal() +
theme(text = element_text(family = "Roboto")) +
labs(title = "Relación entre sueldo y años de experiencia",
x = "AƱos de Experiencia",
y = "Sueldo bruto (AR$)",
caption = fuente) +
eje_y_n +
geom_text(aes(x=-Inf, y=Inf, hjust=0, vjust=1, label= paste0("R2 = ", lm_rh_r2))) En el grÔfico podemos apreciar una recta que va creciendo efectivamente: a medida que nos movemos mÔs hacia la derecha, la recta va subiendo. Pero el \(R^2\) = 0.179 nos indica cuÔnto explica los años de experiencia sobre el sueldo bruto, o dicho de otra manera, en qué medida influye la variable x (años de experiencia), sobre la variable y (sueldo bruto). Una definición mÔs precisa de este valor conocido como Coeficiente de Determinación es la proporción de la varianza total de la variable explicada por la regresión.
Este valor puede estar entre 0 y 1, mientras mÔs cerca de 0 estÔ menor es la relación, y mientras mÔs cerca de 1 esté el resultado, indica que la regresión explica la variabilidad de la variable de respuesta. Es por eso que este \(R^2\) = 0.179 nos indica que los años de experiencia no tienen mucha influencia en los sueldos.
Dado que en el grÔfico anterior tenemos mezclados los sueldos de administrativos, analistas, jefes y gerentes, decidimos analizar la relación entre los años de experiencia y el sueldo bruto por cada uno de los puestos por separado.
library(ggpmisc)
mi.formula <- y ~ x
ggplot(rh_ar, aes(x=anios_experiencia, y = sueldo_ft)) +
geom_point(color = "#1FC3AA", alpha = 0.4, size = 2) +
geom_smooth(method = "lm", formula = mi.formula, se = FALSE) +
theme_minimal() +
theme(text = element_text(family = "Roboto")) +
labs(title = "Relación entre sueldo y años de experiencia",
x = "AƱos de Experiencia",
y = "",
caption = fuente) +
eje_y_n +
stat_poly_eq(formula = mi.formula,
aes(label = paste(..rr.label.., sep = "~~~")),
parse = TRUE) +
facet_wrap(~puesto)Como podemos apreciar en los \(R^2\) de cada grƔfico. Los aƱos de trayectoria influyen muy poco en los sueldos de cada uno de los puestos.
Ahora bien, la pregunta es, ¿cuÔl es la variable que mÔs influye en el sueldo en Recursos Humanos?. Tristemente, la respuesta no sorprende.
ggplot(rh_ar, aes(x = genero, y = sueldo_ft, fill = genero)) +
geom_boxplot() +
eje_y_n +
scale_fill_manual(values = colores) +
estiloh +
labs(title = "Distribución salarial por género",
x = "", y = "",
fill = "GƩnero",
caption = fuente)En esta sección queremos indagar si hay relación entre la formación y la remuneración, y si impacta tambiĆ©n el tipo de universidad, pĆŗblica o privada, en la remuneración y posición. Primero veamos entre los distintos paĆses como se distribuye la muestra entre profesionales provenientes de universidades pĆŗblicas y privadas.
Dado que tenemos relativamente pocas respuestas de otros paĆses que no sean Argentina, no podemos sacar ninguna conclusión seria, sólo mencionar que en Argentina, hay una virtual paridad entre los estudiantes y graduados de universidades pĆŗblicas y privadas. Posteriormente analizaremos la situación por regiones dentro del paĆs.
Las proporciones de respuestas segĆŗn al tipo de universidad que asistieron los participantes de la encuesta es la siguiente:
rh %>%
select(pais, tipo_universidad) %>%
ggplot(aes(y = pais, fill = tipo_universidad)) +
geom_bar(position = "fill") +
scale_fill_manual(values = c(gris, verde, azul)) +
labs(title = "Distribución de respuestas por tipo de universidad por paĆs",
caption = fuente,
x = "", y = "") +
estilo +
theme(legend.position = "none")
educ <- rh %>%
select(tipo_universidad) %>%
group_by(tipo_universidad) %>%
summarise (n = n()) %>%
mutate(freq = n/sum(n)) %>%
arrange(-n)
# Compute the cumulative percentages (top of each rectangle)
educ$ymax <- cumsum(educ$freq)
# Compute the bottom of each rectangle
educ$ymin <- c(0, head(educ$ymax, n=-1))
# Compute label position
educ$labelPosition <- (educ$ymax + educ$ymin) / 2
# Compute a good label
educ$label <- paste0(educ$tipo_universidad, "\n Cant: ", educ$n)
# Make the plot
ggplot(educ, aes(ymax=ymax, ymin=ymin, xmax=4, xmin=3, fill=tipo_universidad)) +
geom_rect() +
coord_polar(theta="y") + # Try to remove that to understand how the chart is built initially
xlim(c(2, 4)) +# Try to remove that to see how to make a pie chart
scale_fill_manual(values = c(gris, verde, azul)) +
theme_void() +
theme(legend.position = "right",
panel.background = element_blank(),
text = element_text(family = "Roboto")) +
labs(title = "Tipo de Universidad",
fill = "Tipo de Universidad",
caption = fuente) +
theme(legend.position = "left")Las principales carreras de las personas que respondieron son:
carreras <- rh %>%
select(nivel_formacion, carrera_grado, tipo_universidad, trabajo,
sueldo_bruto, puesto, funcion_rh, pais, genero) %>%
mutate(carrera_grado = factor(carrera_grado))
carreras <- carreras %>%
mutate(carrera_grado = fct_collapse(carrera_grado,
"AbogacĆa" = c("AbogacĆa, EscribanĆa, Lic en RRHH")),
carrera_grado = fct_collapse(carrera_grado,
"Administración de Empresas" = c("Lic en Administracion",
"Administración y sistemas", "Lic Administracion - Contador Publico - Abogado en curso")),
carrera_grado = fct_collapse(carrera_grado,
"Contador PĆŗblico" = c("Economia", "EconomĆa", "Contador PĆŗblico/Lic. En Letras", "Economia y RR.HH")),
carrera_grado = fct_collapse(carrera_grado,
"Comunicación Social" = c("Caomunicacion social me especialice en RRHH", "Comunicación","Comunicación social", "Lic. en Ciencias de la Comunicación")),
carrera_grado = fct_collapse(carrera_grado,
"RRHH / RRLL / RRTT" = c("EstudiƩ en la Universidad Analista en Recursos Humanos", "RRHH&Coaching ontologico profesional.", "Graduada en lic rrhh y abogacia")),
carrera_grado = fct_collapse(carrera_grado, "IngenierĆas" = c("Ing en sistemas", "Ing. Financiera", "IngenierĆa Comercial", "ING.sistemas", "Ingenieria Electrónica","IngenierĆa Industrial")),
carrera_grado = fct_collapse(carrera_grado,
"PsicologĆa" = c("Psicologia","PsicologĆa Industrial", "PsicologĆa social", "PsicologĆa Social / Lic. en Dirección de las Organizaciones")),
carrera_grado = fct_collapse(carrera_grado, "No estudiƩ en la Universidad" = "Ninguna"),
carrera_grado = fct_lump(carrera_grado,
prop = 0.02,
other_level = "Otros"),
carrera_grado = factor(carrera_grado,
levels = c("RRHH / RRLL / RRTT", "PsicologĆa", "Administración de Empresas", "Contador PĆŗblico", "Otros")))
ggplot(carreras, aes(x = carrera_grado)) +
geom_bar(position = "dodge", fill = azul) +
theme(axis.text.x = element_text(angle = 90)) +
labs(x="",y="") +
estiloh +
labs(title = "Principales carreras estudiadas",
subtitle = "Trabajadores en relación de dependencia",
caption = fuente)Dada la cantidad de respuestas por paĆs, el anĆ”lisis que haremos desde aquĆ en adelante sólo serĆ” para Argentina.
Luego, podemos analizar en qué tipo de universidad estudiaron las personas que respondieron la encuesta, según el puesto actual que ocupan.
recorte_educacion <- rh %>%
filter(pais == "Argentina") %>%
select(nivel_formacion, carrera_grado,
tipo_universidad, trabajo, sueldo_bruto, puesto, funcion_rh, pais, genero)
ggplot(recorte_educacion, (aes(x = puesto, fill = tipo_universidad))) + #Tipo de universidad y cargo
geom_bar(position = "dodge") +
theme(axis.text.x = element_text(angle = 90)) +
labs(x="",y="") +
estilov +
scale_fill_manual(values = c(gris, verde, azul)) +
coord_flip() +
labs(title = "Cantidad de respuestas segĆŗn puesto y universidad",
subtitle = "Sólo respuestas de Argentina",
x = "", fill = "Tipo de Universidad",
caption = fuente)Reiteremos el anÔlisis pero únicamente para las carreras relacionadas con Recursos Humanos y Relaciones del Trabajo.
recorte_educacion %>%
filter(carrera_grado == "RRHH / RRLL / RRTT") %>%
ggplot(aes(x = puesto, fill = tipo_universidad)) + #Tipo de universidad y cargo
geom_bar(position = "dodge") +
theme(axis.text.x = element_text(angle = 90)) +
labs(x="",y="") +
estilov +
scale_fill_manual(values = c(gris, verde, azul)) +
coord_flip() +
labs(title = "Cantidad de respuestas segĆŗn puesto y universidad",
subtitle = "Sólo respuestas de Argentina - Carreras de RH",
x = "", fill = "Tipo de Universidad",
caption = fuente)Podemos apreciar que a partir de los puestos de jefatura, hay mayor presencia de graduados provenientes de universidades privadas.
En Argentina, podemos ver la siguiente distribución por género y nivel educativo.
ne_salario <- recorte_educacion
ne_salario %>%
select(pais, nivel_formacion, genero, puesto) %>%
filter(genero != "GƩnero Diverso") %>%
mutate(nivel_formacion = factor(nivel_formacion,
levels = c("Secundario completo", "Terciario completo",
"Universitario en curso", "Universitario completo",
"MaestrĆa en curso","MaestrĆa completa"))) %>%
group_by(nivel_formacion) %>%
ggplot(aes (y= nivel_formacion, fill = genero)) +
geom_bar(position = "fill") +
theme(axis.text.x = element_text(angle = 90)) +
labs(x="",y="") +
scale_fill_manual(values = colores) +
estilo +
theme(legend.position = "top") +
labs(title = "MƔximo nivel educativo alcanzado por gƩnero",
subtitle = "Distribución por frecuencias absolutas",
caption = fuente,
fill = "Género")En términos absolutos, las mujeres graduadas representan cerca del 70% de la muestra. Analicemos estos datos en términos relativos. PrÔcticamente el patrón de nivel educativo entre hombres y mujeres es idéntico.
ne_fem <- ne_salario %>%
filter(genero == "Femenino") %>%
group_by(genero, nivel_formacion) %>%
mutate(nivel_formacion = factor(nivel_formacion,
levels = c("MaestrĆa completa", "MaestrĆa en curso",
"Universitario completo", "Universitario en curso",
"Terciario completo", "Secundario completo"))) %>%
group_by(nivel_formacion) %>%
summarise(n = n()) %>%
mutate(frecuencia = round(n/sum(n),2),
genero = "Femenino")
ne_mas <- ne_salario %>%
filter(genero == "Masculino") %>%
group_by(genero, nivel_formacion) %>%
mutate(nivel_formacion = factor(nivel_formacion,
levels = c("MaestrĆa completa", "MaestrĆa en curso",
"Universitario completo", "Universitario en curso",
"Terciario completo", "Secundario completo"))) %>%
group_by(nivel_formacion) %>%
summarise(n = n()) %>%
mutate(frecuencia = round(n/sum(n),2),
genero = "Masculino")
ne_total <- rbind(ne_fem, ne_mas)
ggplot(ne_total, aes(x = nivel_formacion, y = frecuencia, fill = genero)) +
geom_col() +
theme(axis.text.x = element_text(angle = 90),
legend.position = "none") +
labs(x="",y="") +
scale_fill_manual(values = colores) +
facet_wrap(~genero, ncol = 2) +
estiloh +
labs(title = "Proporción de nivel educativo mÔximo por género",
x = "", y = "Proporción",
caption = fuente)Ahora veamos como se distribuyen los puestos según el género y el nivel educativo.
ne_salario %>%
select(pais, nivel_formacion, genero, puesto) %>%
filter(genero %in% c("Femenino", "Masculino"),
puesto != "Pasante", puesto != "Director") %>%
mutate(nivel_formacion = factor(nivel_formacion,
levels = c("Secundario completo", "Terciario completo",
"Universitario en curso", "Universitario completo",
"MaestrĆa en curso","MaestrĆa completa")),
puesto = factor(puesto,
levels = c("Director", "Gerente", "Jefe", "Responsable", "HRBP",
"Analista", "Administrativo"))) %>%
group_by(nivel_formacion) %>%
ggplot(aes (y= nivel_formacion, fill = genero)) +
geom_bar(position = "fill") +
theme(axis.text.x = element_text(angle = 90)) +
labs(x="",y="") +
scale_fill_manual(values = colores) +
estilo +
theme(legend.position = "bottom") +
labs(title = "Nivel educativo por puesto y gƩnero",
subtitle = "Distribución por frecuencias absolutas",
caption = fuente,
fill = "GƩnero") +
facet_wrap(~puesto, ncol = 3)Algunas conclusiones que podemos extraer del grƔfico anterior:
Analicemos las proporciones de hombres y de mujeres en puesto de liderazgo.
div <- rh %>%
filter(pais == "Argentina") %>%
select(genero) %>%
mutate(genero = factor(genero,
levels = c("Femenino", "Masculino",
"No binario", "Prefiero no responder"))) %>%
group_by(genero) %>%
summarise (n = n()) %>%
mutate(freq = n/sum(n)) %>%
arrange(-n)
lideres <- rh %>%
filter(pais == "Argentina") %>%
select(genero, puesto) %>%
mutate(genero = fct_recode(genero,
"No binario" = "GĆ©nero diverso (gĆ©nero diverso / gĆ©nero fluido /otras minorĆas)"))
# Propoción de lĆderes hombres y mujeres
lideres_genero <- lideres %>%
filter(genero %in% c("Masculino","Femenino")) %>%
group_by(genero) %>%
mutate(gente_a_cargo = if_else(puesto %in% c("Responsable", "Jefe", "Gerente",
"Supervisor", "Director"),1,0)) %>%
summarise(lider = sum(gente_a_cargo)) %>%
left_join(div) %>%
select(genero, lider, n) %>%
mutate(proporcion = percent(lider/n))
# Test de hipótesis para validar diferencias de resultados
# Hay que verificar si la proporción de lĆderes hombres es mayor que la proporción de lĆderes mujeres
# Creo un dataframe para analizar proporciones de hombres y de mujeres en puestos de liderazgo y de no-liderazgo
test_lider <- lideres_genero %>%
mutate(no_lider = n - lider) %>% # Columna de no lĆderes
select(genero, lider, no_lider) %>% # selecciono columnas de interƩs
pivot_longer(cols = c(lider, no_lider), # Hago un dataset largo para analizar despuƩs
names_to = "es_lider", values_to = "conteo")
# Del total de respuestas me interesa sólo ver cuÔles son los hombres con puesto de liderazgo
test_lider$cat <- c(0,0,1,0)
# Extraigo el mu para decidir si la diferencia es significativa y pasarlo a la fórmula del test.
prop_mujer_lid <- pull(lideres_genero[1,2]/lideres_genero[1,3])
# Realizo el test de hipótesis.
# H0 = Las proporciones de lĆderes hombres y mujeres son iguales
# H1 = La proporción de hombres lĆderes es mayor que la proporción de mujeres lĆderes.
resultados_test <- broom::tidy(t.test(test_lider$cat, mu = prop_mujer_lid, alternative = "greater"))
valor_test <- if(resultados_test[1,3] > 0.05) {
print("la diferencia es estadĆsticamente significativa, y la proporción de hombres en puestos de liderazgo es mayor que el de las mujeres")
} else {
print("la diferencia no es estadĆsticamente significativa, y la proporción de hombres no es estadĆsticamente mayor que el de las mujeres en puestos de liderazgo")
}# GrƔfico
lideres_genero %>%
mutate(porc_lider = lider/n,
porc_no_lider = 1 - porc_lider) %>%
pivot_longer(cols = c(porc_lider, porc_no_lider),
names_to = "es_lider",
values_to = "valores") %>%
mutate(es_lider = factor(es_lider,
levels = c("porc_no_lider", "porc_lider"),
labels = c("No LĆder", "LĆder"))) %>%
ggplot(aes(x= genero, y = valores, fill = es_lider))+
geom_col(position = "fill")+
estilo +
scale_fill_manual(values = c("#75838F", "#344D7E")) +
labs(title = "Proporción de LĆderes segĆŗn gĆ©nero",
x = "", y = "", fill = "",
caption = fuente)De acuerdo a las respuestas recolectadas 2 de cada 3 participantes son mujeres.
Para los puestos de liderazgo consideramos las personas en los puestos de Director, Gerente, Jefe, y Responsable.
Del total de mujeres, 409 respuestas, 174 ocupan un puesto de liderazgo (42.5%).
Del total de hombres, 186 respuestas, 92 ocupan un puesto de liderazgo (49.5%).
Con un p-value igual a 0.733 podemos afirmar que la diferencia es estadĆsticamente significativa, y la proporción de hombres en puestos de liderazgo es mayor que el de las mujeres.
En esta sección analizaremos los sueldos en comparación con los distintos niveles educativos.
A diferencia de otras secciones, en este caso compararemos la media salarial para poder observar los desvĆos estĆ”ndar en los anĆ”lisis. En primer lugar analicemos cuĆ”l es el sueldo promedio de acuerdo a los distintos niveles educativos.
Primero veamos cuÔl es el sueldo promedio en pesos argentinos, según el nivel educativo.
estudios <- rh %>%
filter(pais == "Argentina") %>%
select(genero, nivel_formacion, sueldo_bruto)
est_ar <- profiling_num(estudios)
es_p05 <- 29320
es_p95 <- 210000
rh %>%
filter(pais == "Argentina",
between(sueldo_bruto, es_p05, es_p95)) %>%
mutate(nivel_formacion = factor(nivel_formacion,
levels = c("Secundario completo", "Terciario completo",
"Universitario en curso", "Universitario completo",
"MaestrĆa en curso","MaestrĆa completa"))) %>%
group_by(nivel_formacion) %>%
summarise(sueldo_promedio = mean(sueldo_bruto)) %>%
ggplot(aes(x = sueldo_promedio, y = nivel_formacion))+
geom_col(fill = azul)+
estilov +
eje_x_n +
labs(title = "Sueldo promedio por nivel de formación",
subtitle = "En AR$",
x="", y="", caption = fuente)Ahora veamos quĆ© pasa si incluimos en el anĆ”lisis el gĆ©nero para analizar los sueldos promedios y sus desvĆos estĆ”ndar.
rh %>%
filter(pais == "Argentina",
between(sueldo_bruto, es_p05, es_p95)) %>%
mutate(nivel_formacion = factor(nivel_formacion,
levels = c("Secundario completo", "Terciario completo",
"Universitario en curso", "Universitario completo",
"MaestrĆa en curso","MaestrĆa completa"))) %>%
group_by(nivel_formacion, genero) %>%
summarise(salarios = list(mean_se(sueldo_bruto))) %>%
unnest(salarios) %>%
ggplot(aes(x = nivel_formacion, y = y, fill = genero)) +
geom_col(position = "dodge")+
geom_errorbar(aes(ymin = ymin,ymax = ymax), position = "dodge")+
coord_flip()+
theme(legend.position = "bottom") +
eje_y_n +
estilov +
scale_fill_manual(values = genero3) +
labs(title = "Sueldo promedio y desvĆo estĆ”ndard por nivel de formación y gĆ©nero",
subtitle = "En AR$",
x = "", y = "",
caption = fuente,
fill = "Género")En esta sección nos proponemos analizar los sueldos según las distintas funciones de Recursos Humanos.
Para realizar este anĆ”lisis tuvimos que unificar varias respuestas y eliminar algunas que no correspondĆan al Ć”rea de RRHH para poder quedarnos con estas Ć”reas de anĆ”lisis.
Los sueldos promedios y la cantidad de respuestas que recibimos de cada función son los siguientes:
# Limpieza de funciones
# Elimino los que no son de RRHH
rh_ar <- rh_ar %>%
filter(funcion_rh != "No me desempeƱo en el Ɣrea de RRHH. Trabajo en el Ɣrea de Sistemas.",
funcion_rh != "No trabajo en el Ɣrea")
# Unifico las funciones de RH
rh_ar <- rh_ar %>%
mutate(funcion_rh = str_trim(funcion_rh, side = "both"),
funcion_rh = fct_collapse(funcion_rh, "Adm. de personal" =
c("Administración de personal", "Administrativa en Ôrea",
"Asistente")),
funcion_rh = fct_collapse(funcion_rh, "Generalista" = c("Generalista", "Al ser HRBP un poco de todo payroll, capacitacion, comunicacion interna,",
"Area integral de RH", "General","HRBP",
"La mayorĆa de los nombrados con iguales condiciones de importancia y prioridad",
"RRHH", "Todas las anteriores", "Todo", "Todo lo anterior", "Todos ellos", "Todos, los descriptos")),
funcion_rh = fct_collapse(funcion_rh, "Capacitación y desarrollo" = c("Capacitación y desarrollo",
"Capacitación y Desarrollo + Bienestar + RSE",
"Desarrollo laboral: procesos Sofi, capacitacion, evaluación, desarrollo",
"Onboarding, clima, cultura, liderazgo")),
funcion_rh = fct_collapse(funcion_rh, "Payroll" = c("Payroll / Liquidación de sueldos",
"payroll y adminsitracion de personal")),
funcion_rh = fct_collapse(funcion_rh, "DiseƱo organizacional" = "DiseƱo organizacional",
"Mejora continua proyectos de innovación"),
funcion_rh = fct_lump(funcion_rh,
n = 10,
other_level = "Otras funciones"))
gt(
rh_ar %>%
group_by(funcion_rh) %>%
summarise("Sueldo Promedio" = round(mean(sueldo_ft)),
Respuestas = n()),
) %>%
tab_header(title = "Sueldo promedio por función",
subtitle = "En AR$") %>%
cols_label(funcion_rh = "Función") %>%
fmt_currency(columns = "Sueldo Promedio", decimals = 0,
sep_mark = ".", dec_mark = ",")| Sueldo promedio por función | ||
|---|---|---|
| En AR$ | ||
| Función | Sueldo Promedio | Respuestas |
| Adm. de personal | $66.531 | 106 |
| Generalista | $90.379 | 204 |
| Capacitación y desarrollo | $74.490 | 32 |
| Compensaciones y beneficios | $100.533 | 9 |
| Comunicación interna | $65.113 | 9 |
| DiseƱo organizacional | $101.543 | 11 |
| Payroll | $76.330 | 56 |
| People Analytics | $105.221 | 13 |
| Reclutamiento y selección | $69.729 | 69 |
| Relaciones laborales | $101.301 | 11 |
| Otras funciones | $124.467 | 6 |
rh_ar %>%
group_by(funcion_rh) %>%
filter(funcion_rh != "Otras funciones") %>%
summarise(sueldo_promedio = mean(sueldo_ft)) %>%
ggplot(aes(y = fct_reorder(funcion_rh, sueldo_promedio),
x = sueldo_promedio)) +
geom_col(fill = azul) +
labs(title = "Sueldo promedio por función",
subtitle = "En AR$",
x = "", y = "",
caption = fuente) +
eje_x_n +
estilovrh_ar %>%
filter(funcion_rh != "Otras funciones") %>%
group_by(funcion_rh, puesto) %>%
summarise(sueldo_medio = mean(sueldo_ft)) %>%
ggplot(aes(x = funcion_rh, y = sueldo_medio)) +
geom_col(fill = azul) +
eje_y_n +
estiloh +
facet_wrap(~puesto) +
labs(title = "Sueldo promedio por puesto y función",
subtitle = "En AR$",
x = "", y = "",
caption = fuente) +
theme(axis.text.x = element_text(angle = 90))funciones_top <- rh_ar %>%
filter(funcion_rh %in% c("People Analytics", "DiseƱo organizacional",
"Relaciones laborales", "Compensaciones y beneficios")) %>%
summarise(promedio = mean(sueldo_ft)) %>%
pull()
funciones_bottom <- rh_ar %>%
filter(funcion_rh %in% c("Payroll", "Reclutamiento y selección",
"Capacitación y desarrollo", "Comunicación interna",
"Adm. de personal")) %>%
summarise(promedio = mean(sueldo_ft)) %>%
pull()
porcentaje_gap <- percent(funciones_top / funciones_bottom - 1)Si bien la cantidad de respuestas influye en el sueldo promedio como para determinar significativamente si algunas funciones se pagan mejor que otras, no llama la atención que las funciones de People Analytics, Diseño Organizacional y Compensaciones y Beneficios estén dentro de las funciones mejores pagas dentro de Recursos Humanos ya que requieren de mayor especialización, anÔlisis, y manejo de información confidencial.
Completa el podio la función de Relaciones Laborales. En este caso creemos que en un paĆs altamente sindicalizado como Argentina, esta función cobra mucha relevancia dado que son los que se encargan de las negociaciones de paritarias salariales y acuerdos colectivos, y son responsables de resolver los conflictos dentro de las organizaciones.
Si hacemos un promedio de los sueldos de las cuatro funciones con los sueldos mƔs altos, y luego hacemos lo mismo con el resto de las funciones mƔs bajas (exceptuando a los que estƔn en roles Generalistas), el gap salarial es de 46%, lo cual es llamativamente alto.
A continuación presentamos un anÔlisis mÔs detallado de los sueldos por funciones y puestos.
datatable(
rh_ar %>%
group_by(funcion_rh, puesto) %>%
summarise("Sueldo Promedio" = round(mean(sueldo_ft))),
colnames = c("Función", "Puesto", "Sueldo Promedio"),
caption = "Sueldo promedio por función y puesto - En AR$"
)En las siguientes secciones exploraremos un poco mÔs en detalle cada una de estas funciones. En función de la cantidad de respuestas recibidas para cada función, podremos profundizar un poco mÔs el anÔlisis, o bien hacer un anÔlisis superficial.
rh_ar <- rh_ar %>%
mutate(nivel_formacion = fct_relevel(nivel_formacion, c("MaestrĆa completa",
"MaestrĆa en curso",
"Universitario completo",
"Universitario en curso",
"Terciario completo",
"Secundario completo")))
funcion_analisis <- "People Analytics"
rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = funcion_rh, fill = genero))+
geom_bar(position = "fill") +
scale_fill_manual(values = colores) +
estilo +
labs(title = "Proporción de Género",
subtitle = funcion_analisis,
x = "", y = "",
fill = "GƩnero",
caption = fuente)rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto) %>%
summarise(sueldo_promedio = mean(sueldo_ft)) %>%
ggplot(aes(x = sueldo_promedio, y = puesto)) +
geom_col(fill = azul) +
geom_text(aes(label = round(x=sueldo_promedio,0), hjust = 1.4, vjust = 0.3),
size = 3, color = "white", position = position_dodge(width = .9)) +
labs(title = "Sueldo promedio por puesto",
subtitle = paste0(funcion_analisis, " - En AR$"),
x = "", y = "",
caption = fuente) +
eje_x_n +
estilovrh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = puesto, fill = nivel_formacion)) +
geom_bar(position = "fill") +
scale_fill_manual(values = col4) +
labs(title = "Nivel de formación por puesto",
subtitle = funcion_analisis,
x = "", y = "",
fill = "Nivel de Formación",
caption = fuente) +
estilofuncion_analisis <- "DiseƱo organizacional"
rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = funcion_rh, fill = genero))+
geom_bar(position = "fill") +
scale_fill_manual(values = c("#8624F5", "#1FC3AA","#FFD129")) +
estilo +
labs(title = "Proporción de Género",
subtitle = funcion_analisis,
x = "", y = "",
fill = "GƩnero",
caption = fuente)rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto) %>%
summarise(sueldo_promedio = mean(sueldo_ft)) %>%
ggplot(aes(x = sueldo_promedio, y = puesto)) +
geom_col(fill = azul) +
geom_text(aes(label = round(x=sueldo_promedio,0), hjust = 1.4, vjust = 0.3),
size = 3, color = "white", position = position_dodge(width = .9)) +
labs(title = "Sueldo promedio por puesto",
subtitle = paste0(funcion_analisis, " - En AR$"),
x = "", y = "", caption = fuente) +
eje_x_n +
estilovrh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = puesto, fill = nivel_formacion)) +
geom_bar(position = "fill") +
scale_fill_manual(values = col4) +
labs(title = "Nivel de formación por puesto",
subtitle = funcion_analisis,
x = "", y = "",
fill = "Nivel de Formación",
caption = fuente) +
estilofuncion_analisis <- "Relaciones laborales"
rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = funcion_rh, fill = genero))+
geom_bar(position = "fill") +
scale_fill_manual(values = colores) +
estilo +
labs(title = "Proporción de Género",
subtitle = funcion_analisis,
x = "", y = "",
fill = "GƩnero",
caption = fuente)rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto) %>%
summarise(sueldo_promedio = mean(sueldo_ft)) %>%
ggplot(aes(x = sueldo_promedio, y = puesto)) +
geom_col(fill = azul) +
geom_text(aes(label = round(x=sueldo_promedio,0), hjust = 1.4, vjust = 0.3),
size = 3, color = "white", position = position_dodge(width = .9)) +
labs(title = "Sueldo promedio por puesto",
subtitle = paste0(funcion_analisis, "- En AR$"),
x = "", y = "", caption = fuente) +
eje_x_n +
estilovrh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = puesto, fill = nivel_formacion)) +
geom_bar(position = "fill") +
scale_fill_manual(values = col6) +
labs(title = "Nivel de formación por puesto",
subtitle = funcion_analisis,
x = "", y = "",
fill = "Nivel de Formación",
caption = fuente) +
estilofuncion_analisis <- "Compensaciones y beneficios"
rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = funcion_rh, fill = genero))+
geom_bar(position = "fill") +
scale_fill_manual(values = colores) +
estilo +
labs(title = "Proporción de Género",
subtitle = funcion_analisis,
x = "", y = "",
fill = "GƩnero",
caption = fuente)rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto) %>%
summarise(sueldo_promedio = mean(sueldo_ft)) %>%
ggplot(aes(x = sueldo_promedio, y = puesto)) +
geom_col(fill = azul) +
geom_text(aes(label = round(x=sueldo_promedio,0), hjust = 1.4, vjust = 0.3),
size = 3, color = "white", position = position_dodge(width = .9)) +
labs(title = "Sueldo promedio por puesto",
subtitle = paste0(funcion_analisis, " - En AR$"),
x = "", y = "", caption = fuente) +
eje_x_n +
estilovrh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = puesto, fill = nivel_formacion)) +
geom_bar(position = "fill") +
scale_fill_manual(values = col4) +
labs(title = "Nivel de formación por puesto",
subtitle = funcion_analisis,
x = "", y = "",
fill = "Nivel de Formación",
caption = fuente) +
estilorh_ar <- rh_ar %>%
mutate(rango_ant_puesto = case_when(
anios_en_puesto < 1 ~ "Menos de 1 aƱo",
anios_en_puesto < 6 ~ "Entre 1 y 5 aƱos",
anios_en_puesto < 11 ~ "Entre 6 y 10 aƱos",
anios_en_puesto = T ~ "MƔs de 10 aƱos"),
rango_ant_puesto = fct_relevel(rango_ant_puesto, c("Menos de 1 aƱo", "Entre 1 y 5 aƱos",
"Entre 6 y 10 aƱos", "MƔs de 10 aƱos")))
funcion_analisis <- "Generalista"
rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = funcion_rh, fill = genero))+
geom_bar(position = "fill") +
scale_fill_manual(values = colores) +
estilo +
labs(title = "Proporción de Género",
subtitle = funcion_analisis,
x = "", y = "",
fill = "GƩnero",
caption = fuente)rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto) %>%
summarise(sueldo_promedio = mean(sueldo_ft)) %>%
ggplot(aes(x = sueldo_promedio, y = puesto)) +
geom_col(fill = azul) +
geom_text(aes(label = round(x=sueldo_promedio,0), hjust = 1.4, vjust = 0.3),
size = 3, color = "white", position = position_dodge(width = .9)) +
labs(title = "Sueldo promedio por puesto",
subtitle = paste0(funcion_analisis, " - En AR$"),
x = "", y = "", caption = fuente) +
eje_x_n +
estilovrh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = puesto, fill = nivel_formacion)) +
geom_bar(position = "fill") +
scale_fill_manual(values = col6) +
labs(title = "Nivel de formación por puesto",
subtitle = funcion_analisis,
x = "", y = "",
fill = "Nivel de Formación",
caption = fuente) +
estilorh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto, rango_ant_puesto) %>%
summarise(media_sueldo = mean(sueldo_ft)) %>%
ggplot(aes(x = rango_ant_puesto, y = media_sueldo)) +
geom_col(fill = azul) +
scale_x_discrete(guide = guide_axis(n.dodge = 2)) +
facet_wrap(~puesto) +
estiloh +
eje_y_n +
labs(title = "Sueldo promedio por puesto y antigüedad",
subtitle = paste0(funcion_analisis, " - En AR$"),
x = "", y = "",
caption = fuente)funcion_analisis <- "Payroll"
rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = funcion_rh, fill = genero))+
geom_bar(position = "fill") +
scale_fill_manual(values = colores) +
estilo +
labs(title = "Proporción de Género",
subtitle = funcion_analisis,
x = "", y = "",
fill = "GƩnero",
caption = fuente)rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto) %>%
summarise(sueldo_promedio = mean(sueldo_ft)) %>%
ggplot(aes(x = sueldo_promedio, y = puesto)) +
geom_col(fill = azul) +
geom_text(aes(label = round(x=sueldo_promedio,0), hjust = 1.4, vjust = 0.3),
size = 3, color = "white", position = position_dodge(width = .9)) +
labs(title = "Sueldo promedio por puesto",
subtitle = paste0(funcion_analisis, " - En AR$"),
x = "", y = "", caption = fuente) +
eje_x_n +
estilovrh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = puesto, fill = nivel_formacion)) +
geom_bar(position = "fill") +
scale_fill_manual(values = col6) +
labs(title = "Nivel de formación por puesto",
subtitle = funcion_analisis,
x = "", y = "",
fill = "Nivel de Formación",
caption = fuente) +
estilorh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto, rango_ant_puesto) %>%
summarise(media_sueldo = mean(sueldo_ft)) %>%
ggplot(aes(x = rango_ant_puesto, y = media_sueldo)) +
geom_col(fill = azul) +
scale_x_discrete(guide = guide_axis(n.dodge = 2)) +
facet_wrap(~puesto) +
estiloh +
eje_y_n +
labs(title = "Sueldo promedio por puesto y antigüedad",
subtitle = paste0(funcion_analisis, " - En AR$"),
x = "", y = "",
caption = fuente)funcion_analisis <- "Capacitación y desarrollo"
rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = funcion_rh, fill = genero))+
geom_bar(position = "fill") +
scale_fill_manual(values = colores) +
estilo +
labs(title = "Proporción de Género",
subtitle = funcion_analisis,
x = "", y = "",
fill = "GƩnero",
caption = fuente)rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto) %>%
summarise(sueldo_promedio = mean(sueldo_ft)) %>%
ggplot(aes(x = sueldo_promedio, y = puesto)) +
geom_col(fill = azul) +
geom_text(aes(label = round(x=sueldo_promedio,0), hjust = 1.4, vjust = 0.3),
size = 3, color = "white", position = position_dodge(width = .9)) +
labs(title = "Sueldo promedio por puesto",
subtitle = paste0(funcion_analisis, " - En AR$"),
x = "", y = "", caption = fuente) +
eje_x_n +
estilovrh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = puesto, fill = nivel_formacion)) +
geom_bar(position = "fill") +
scale_fill_manual(values = col6) +
labs(title = "Nivel de formación por puesto",
subtitle = funcion_analisis,
x = "", y = "",
fill = "Nivel de Formación",
caption = fuente) +
estilorh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto, rango_ant_puesto) %>%
summarise(media_sueldo = mean(sueldo_ft)) %>%
ggplot(aes(x = rango_ant_puesto, y = media_sueldo)) +
geom_col(fill = azul) +
scale_x_discrete(guide = guide_axis(n.dodge = 2)) +
facet_wrap(~puesto) +
estiloh +
eje_y_n +
labs(title = "Sueldo promedio por puesto y antigüedad",
subtitle = paste0(funcion_analisis, " - En AR$"),
x = "", y = "",
caption = fuente)funcion_analisis <- "Reclutamiento y selección"
rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = funcion_rh, fill = genero))+
geom_bar(position = "fill") +
scale_fill_manual(values = colores) +
estilo +
labs(title = "Proporción de Género",
subtitle = funcion_analisis,
x = "", y = "",
fill = "GƩnero",
caption = fuente)rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto) %>%
summarise(sueldo_promedio = mean(sueldo_ft)) %>%
ggplot(aes(x = sueldo_promedio, y = puesto)) +
geom_col(fill = azul) +
geom_text(aes(label = round(x=sueldo_promedio,0), hjust = 1.4, vjust = 0.3),
size = 3, color = "white", position = position_dodge(width = .9)) +
labs(title = "Sueldo promedio por puesto",
subtitle = paste0(funcion_analisis, " - En AR$"),
x = "", y = "", caption = fuente) +
eje_x_n +
estilovrh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = puesto, fill = nivel_formacion)) +
geom_bar(position = "fill") +
scale_fill_manual(values = col6) +
labs(title = "Nivel de formación por puesto",
subtitle = funcion_analisis,
x = "", y = "",
fill = "Nivel de Formación",
caption = fuente) +
estilorh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto, rango_ant_puesto) %>%
summarise(media_sueldo = mean(sueldo_ft)) %>%
ggplot(aes(x = rango_ant_puesto, y = media_sueldo)) +
geom_col(fill = azul) +
scale_x_discrete(guide = guide_axis(n.dodge = 2)) +
facet_wrap(~puesto) +
estiloh +
eje_y_n +
labs(title = "Sueldo promedio por puesto y antigüedad",
subtitle = paste0(funcion_analisis, " - En AR$"),
x = "", y = "",
caption = fuente)funcion_analisis <- "Adm. de personal"
rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = funcion_rh, fill = genero))+
geom_bar(position = "fill") +
scale_fill_manual(values = colores) +
estilo +
labs(title = "Proporción de Género",
subtitle = funcion_analisis,
x = "", y = "",
fill = "GƩnero",
caption = fuente)rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto) %>%
summarise(sueldo_promedio = mean(sueldo_ft)) %>%
ggplot(aes(x = sueldo_promedio, y = puesto)) +
geom_col(fill = azul) +
geom_text(aes(label = round(x=sueldo_promedio,0), hjust = 1.4, vjust = 0.3),
size = 3, color = "white", position = position_dodge(width = .9)) +
labs(title = "Sueldo promedio por puesto",
subtitle = paste0(funcion_analisis, " - En AR$"),
x = "", y = "", caption = fuente) +
eje_x_n +
estilovrh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = puesto, fill = nivel_formacion)) +
geom_bar(position = "fill") +
scale_fill_manual(values = col6) +
labs(title = "Nivel de formación por puesto",
subtitle = funcion_analisis,
x = "", y = "",
fill = "Nivel de Formación",
caption = fuente) +
estilorh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto, rango_ant_puesto) %>%
summarise(media_sueldo = mean(sueldo_ft)) %>%
ggplot(aes(x = rango_ant_puesto, y = media_sueldo)) +
geom_col(fill = azul) +
scale_x_discrete(guide = guide_axis(n.dodge = 2)) +
facet_wrap(~puesto) +
estiloh +
eje_y_n +
labs(title = "Sueldo promedio por puesto y antigüedad",
subtitle = paste0(funcion_analisis, " - En AR$"),
x = "", y = "",
caption = fuente)funcion_analisis <- "Comunicación interna"
rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = funcion_rh, fill = genero))+
geom_bar(position = "fill") +
scale_fill_manual(values = colores) +
estilo +
labs(title = "Proporción de Género",
subtitle = funcion_analisis,
x = "", y = "",
fill = "GƩnero",
caption = fuente)rh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
group_by(puesto) %>%
summarise(sueldo_promedio = mean(sueldo_ft)) %>%
ggplot(aes(x = sueldo_promedio, y = puesto)) +
geom_col(fill = azul) +
geom_text(aes(label = round(x=sueldo_promedio,0), hjust = 1.4, vjust = 0.3),
size = 3, color = "white", position = position_dodge(width = .9)) +
labs(title = "Sueldo promedio por puesto",
subtitle = paste0(funcion_analisis, "- En AR$"),
x = "", y = "", caption = fuente) +
eje_x_n +
estilovrh_ar %>%
filter(funcion_rh == funcion_analisis) %>%
ggplot(aes(y = puesto, fill = nivel_formacion)) +
geom_bar(position = "fill") +
scale_fill_manual(values = col4) +
labs(title = "Nivel de formación por puesto",
subtitle = funcion_analisis,
x = "", y = "",
fill = "Nivel de Formación",
caption = fuente) +
estiloāĀæPensĆ”s tener hijos?ā/āĀæPor quĆ© no estĆ”s casada?ā
Cuando diseƱamos esta encuesta, nos pareció una buena idea preguntar sobre cuĆ”les fueron las preguntas mĆ”s desubicadas o bizarras realizadas en una entrevista laboral. Pero nunca nos imaginamos que Ćbamos a necesitar filtrar por chongo (para saber a quĆ© llamamos āchongoā en Argentina entra en este link).
preg <- kiwi[,c("genero","pregunta_bizarra")]
names(preg) <- c("genero", "pregunta")
listado_preg <- preg %>%
filter(str_detect(pregunta, "hijo[s]")|
str_detect(pregunta, "casad[ao]|casar")|
str_detect(pregunta,"novio")|
str_detect(pregunta,"chongo"))Al respecto quisimos saber a cuĆ”ntas mujeres y hombres les habĆan hecho preguntas desubicadas sobre si tendrĆan hijos, o si tenĆan planes de casamiento. En 42 respuestas esto es lo que encontramos:
gt(preg %>%
filter(str_detect(pregunta, "hijo[s]")|
str_detect(pregunta, "casad[ao]|casar")|
str_detect(pregunta,"novio")|
str_detect(pregunta,"chongo")) %>%
group_by(genero) %>%
summarise (n = n()) %>%
mutate(freq = percent(n/sum(n)))) %>%
cols_label(genero = "GƩnero",
n = "Cantidad",
freq = "Porcentaje")| GƩnero | Cantidad | Porcentaje |
|---|---|---|
| Femenino | 33 | 79% |
| Masculino | 9 | 21% |
preg %>%
filter(str_detect(pregunta, "hijo[s]")|
str_detect(pregunta, "casad[ao]|casar")|
str_detect(pregunta,"novio")|
str_detect(pregunta,"chongo")) %>%
group_by(genero) %>%
summarise (n = n()) %>%
mutate(freq = percent(n/sum(n))) %>%
ggplot(aes(x = genero, y = n, fill = genero)) +
geom_col() +
scale_fill_manual(values = c("#8624F5", "#1FC3AA")) +
estilo + theme(legend.position = "none") +
labs(title = "Mujeres y hombres a los que les preguntaron si pensaban tener hijos \n o si planeaban casarse en una entrevista laboral",
x = "", y= "", fill = "",
caption = fuente) Para este anÔlisis nos preguntamos si hay relación entre el nivel salarial y la satisfacción.
Para responder a esta pregunta, cruzamos los sueldos brutos de Argentina, contra los niveles de satisfacción con la actual empresa donde trabajan las personas que respondieron la encuesta.
Los pasos que seguimos fueron los siguientes:
library(ggalluvial)
satisf <- rh %>%
filter(!is.na(satisfaccion),
genero %in% c("Femenino", "Masculino"),
pais == "Argentina") %>%
select(genero, sueldo_bruto, satisfaccion)
p25 <- profiling_num(satisf)[1,7]
p50 <- profiling_num(satisf)[1,8]
p75 <- profiling_num(satisf)[1,9]
satisf <- satisf %>%
mutate(cuartil = factor(case_when(
sueldo_bruto < p25 ~ "1Q",
sueldo_bruto > p25 & sueldo_bruto < p50 ~ "2Q",
sueldo_bruto > p50 & sueldo_bruto < p75 ~ "3Q",
TRUE ~ "4Q")),
satisfaccion = factor(satisfaccion,
levels = c("1","2","3","4","5")),
cuenta = 1)
satisf <- satisf %>%
group_by(genero, satisfaccion, cuartil) %>%
summarise(cant = n())
ggplot(as.data.frame(satisf), aes(y = cant, axis1 = cuartil, axis2 = satisfaccion)) +
geom_alluvium(aes(fill = genero), width = 1/12, alpha = 0.4) +
geom_stratum(width = 1/12, fill = "#8882F7") +
geom_label(stat = "stratum", aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Sueldo Bruto por Cuartil", "Nivel de Satisfacción"), expand = c(.05, .05)) +
scale_fill_manual(values = colores) +
estilo +
labs(title = "Relación entre nivel salarial y satisfacción con la empresa",
y = "", caption = fuente, fill = "GĆ©nero")Dentro de los diversos anĆ”lisis que podĆamos hacer con los datos recolectados algo sobre lo que indagamos fue sobre cómo se llama el Ć”rea.
nombres <- kiwi[ , "nombre_area"]
nombres <- nombres %>%
filter(!is.na(nombre_area))
distintos <- distinct(.data = nombres) %>% count() %>% pull()
nombres <- nombres %>%
mutate(nombre = str_to_title(nombre_area, locale = "es")) %>%
group_by(nombre) %>%
count(sort = T, name = "rtas") %>%
head(10) %>%
ungroup()
ggplot(nombres, aes(x = rtas, y = reorder(nombre,rtas))) +
geom_col(fill = "#344D7E") +
geom_text(aes(label = round(x=rtas, 0),
hjust = -.5,
fontface = "bold"),
size = 4,
color = "darkgrey")+
estilov +
labs(title = "Top 10 de nombres para el Ɣrea de RRHH",
x = "", y = "",
caption = fuente) +
scale_x_continuous(limits = c(0, 430), breaks = c(100, 200, 300, 400))En total, encontramos 58 formas diferentes de llamar al Ôrea. Tristemente nos sorprende la cantidad de veces que encontramos que el Ôrea aún se llama Oficina De Personal.