Esta página resume la información correspondiente a la fecha 4/8/2021 (último periodo publicado) sobre cantidad de puestos de trabajo y salarios brutos (expresados en pesos corrientes) según nivel educativo y género para todos los escalafones registrados en la Base Integrada de Empleo Público de la Subsecretaría de Empleo Público de la Nación. Además, se incluye la desagregación por organismos de las mismas variables para el escalafón SINEP.
Volver a Inicio
Fecha: 4/8/2021
BIEP_EDUCA %>%
summarise(
"Cantidad de Puestos de Trabajo comprendidos" = sum(Puestos),
"Masa Salarial Total (pesos corrientes)" = sum(Puestos*SBP),
"Cantidad de Escalafones comprendidos" = n_distinct(BIEP_EDUCA$ESCALAFÓN),
"Cantidad de Jurisdicciones comprendidas" = n_distinct(BIEP_EDUCA$Jurisdiccion),
"Cantidad de Organismos comprendidos" = n_distinct(BIEP_EDUCA$Organismo)
) %>%
reshape2::melt() %>%
knitr::kable(format = "html", col.names = c("Variable","Total"), format.args = list(big.mark = ",")) %>%
kableExtra::kable_styling(bootstrap_options = c("striped", "hover", "responsive"))
| Variable | Total |
|---|---|
| Cantidad de Puestos de Trabajo comprendidos | 478,807 |
| Masa Salarial Total (pesos corrientes) | 63,266,539,182 |
| Cantidad de Escalafones comprendidos | 122 |
| Cantidad de Jurisdicciones comprendidas | 24 |
| Cantidad de Organismos comprendidos | 138 |
Puestos de trabajo, porcentaje del total de puestos de trabajo, masa salarial, porcentaje del total de masa salarial, salario bruto promedio y desviación estándar del salario bruto promedio por escalafón. Fecha: 4/8/2021
tab2 <- BIEP_EDUCA %>%
group_by(ESCALAFÓN) %>%
summarise(
"Puestos de Trabajo" = sum(Puestos),
"% del total de Puestos de Trabajo" = round(100*sum(Puestos)/totalPuestosTrabajo, 4),
"Masa Salarial (miles de pesos corrientes)" = round(sum(Puestos*SBP)/1000, 0),
"% del total de Masa Salarial" = round(100*sum(Puestos*SBP)/totalMasaSalarial,4),
"Salario Bruto Promedio (pesos corrientes)" = round(weighted.mean(SBP, Puestos), 0),
"Desviación Estándar del Salario Bruto (pesos corrientes)" = round(sqrt(Hmisc::wtd.var(SBP, weights = Puestos)), 0) )
tab2 %>%
DT::datatable(filter = "top", options = list(
lengthMenu = c(10, 25, 50, 100)))
Cada columna indica el percentil expresados, los valores correspondientes están en pesos corrientes. Fecha: 4/8/2021
#creo un vector con los nombres de los escalafones
escalafones <- unique(BIEP_EDUCA$ESCALAFÓN)
#creo una tabla con los puestos de trabajo por escalafon
Puestos_escalafon <- BIEP_EDUCA %>%
group_by(., ESCALAFÓN) %>%
summarise(., Puestos = sum(Puestos))
#creo una tabla y listas vacías para usar en el loop for siguiente
rqEscalafones <- list()
for (i in escalafones) {
dummy <- BIEP_EDUCA %>%
filter(., ESCALAFÓN==i) %>%
group_by(., SBP) %>%
summarise(., Puestos = sum(Puestos))
#la función rq no permite trabajar con matrices con una sola observación o sin observaciones
#por eso uso IF para evitar que salga del loop
if (sum(dummy[[2]])!=0) {
rqEscalafones[i] <- rq(dummy[[1]] ~ 1, tau = 1:20/20, weights=unlist(dummy[[2]]))
} else {
rqEscalafones[i] <- ("nodata")
}
}
indiceEscalafones <- tibble(Escalafones = unique(BIEP_EDUCA$ESCALAFÓN)) %>%
separate(Escalafones, sep = "-", into = "indexEscalafon", remove = F)
enframe(unlist(rqEscalafones)) %>%
add_column(tau =rep(seq(5,100, by = 5), times = length(rqEscalafones))) %>%
separate(name, sep = "-", into = "indexEscalafon") %>%
mutate(value = round(value, 0)) %>%
left_join(indiceEscalafones) %>%
select(-indexEscalafon) %>%
pivot_wider(names_from = tau) %>%
DT::datatable(filter = "top", options = list(
lengthMenu = c(10, 25, 50, 100)))
Puestos de trabajo, porcentaje de puestos de trabajo del escalafón, salario bruto promedio y desviación estándar del salario bruto por nivel educativo según escalafón. Fecha: 4/8/2021
BIEP_EDUCA %>%
group_by(ESCALAFÓN, nvlEduca) %>%
summarise( n = sum(Puestos),
"Salario Bruto Promedio (pesos corrientes)" = round(weighted.mean(SBP, Puestos), 0),
"Desviación Estándar del Salario Bruto (pesos corrientes)" = round(sqrt(Hmisc::wtd.var(SBP, weights = Puestos)), 0)) %>%
left_join(tab2,by = "ESCALAFÓN") %>%
mutate("% de los puestos del escalafón" = round(100*n/`Puestos de Trabajo`,2)) %>%
select(1,2,3,12,4,5) %>%
rename("Puestos de Trabajo" = n,
"Nivel Educativo" = nvlEduca,
"Salario Bruto Promedio (pesos corrientes)" = `Salario Bruto Promedio (pesos corrientes).x`,
"Desviación Estándar del Salario Bruto (pesos corrientes)" = `Desviación Estándar del Salario Bruto (pesos corrientes).x`) %>%
DT::datatable(filter = "top", options = list(
lengthMenu = c(10, 25, 50, 100)))
Puestos de trabajo, porcentaje de puestos de trabajo del escalafón, salario bruto promedio y desviación estándar del salario bruto por género según escalafón. Fecha: 4/8/2021
BIEP_EDUCA %>%
group_by(ESCALAFÓN, SEXO) %>%
summarise("Puestos De Trabajo" = sum(Puestos),
"Salario Bruto Promedio (pesos corrientes)" = round(weighted.mean(SBP, Puestos),0),
"Desviación Estándar del Salario Bruto (pesos corrientes)" = round(sqrt(Hmisc::wtd.var(SBP, weights = Puestos)),0)) %>%
left_join(tab2,by = "ESCALAFÓN") %>%
mutate("% de los puestos del escalafón" = round(100*`Puestos De Trabajo`/`Puestos de Trabajo`,2)) %>%
select(1,2,3,12,4,5) %>%
rename("Salario Bruto Promedio (pesos corrientes)" = `Salario Bruto Promedio (pesos corrientes).x`,
"Desviación Estándar del Salario Bruto (pesos corrientes)" = `Desviación Estándar del Salario Bruto (pesos corrientes).x`) %>%
DT::datatable(filter = "top", options = list(
lengthMenu = c(10, 25, 50, 100)))
La Brecha Salarial se calcula como la diferencia entre el salario bruto promedio femenino y salario bruto promedio masculino, expresada como puntos porcentuales de salario bruto promedio masculino. \(100*(SBP_{f}-SBP_{m})/SBP_{m}\) Aquí fue calculada para cada nivel educativo dentro de cada escalafón, puede haber valores faltantes debido a inexistencia de puestos de trabajo en alguna categoría o ausencia de su registro. Fecha: 4/8/2021
BIEP_EDUCA %>%
group_by(ESCALAFÓN, SEXO, nvlEduca) %>%
summarise(SBPi = round(weighted.mean(SBP,Puestos),0)) %>%
pivot_wider(names_from = SEXO, values_from = SBPi, names_prefix = "g" ) %>%
mutate(Brecha = round(100*(gF-gM)/gM,2)) %>%
rename("Nivel Educativo" = nvlEduca,
"Salario Bruto Promedio femenino (pesos)" = gF,
"Salario Bruto Promedio masculino (pesos)" = gM,
"Brecha Salarial de género" = Brecha) %>%
DT::datatable(filter = "top", options = list(
lengthMenu = c(10, 25, 50, 100)))
Volver a Inicio
Fecha: 4/8/2021
sinep1 <- BIEP_EDUCA %>%
filter(ESCALAFÓN == "303 - SINEP") %>%
group_by(Jurisdiccion, Organismo) %>%
summarise(
PuestosOrganismos = sum(Puestos),
Mínimo = round(min(SBP),0),
Media = round(weighted.mean(SBP, Puestos),0),
SD = round(sqrt(Hmisc::wtd.var(SBP, weights = Puestos)),0),
Máximo = round(max(SBP),0)
)
sinep1 %>%
rename("Puestos de Trabajo" = PuestosOrganismos,
"Salario Bruto Mínimo (pesos corrientes)" = Mínimo,
"Salario Bruto Promedio (pesos corrientes)" = Media,
"Desviación Estándar del Salario Bruto (pesos corrientes)" = SD,
"Salario Bruto Máximo (pesos corrientes)" = Máximo) %>%
DT::datatable(filter = "top", options = list(
lengthMenu = c(10, 25, 50, 125)))
Fecha: 4/8/2021
sinep2 <- BIEP_EDUCA %>%
filter(ESCALAFÓN == "303 - SINEP") %>%
group_by(Jurisdiccion, Organismo, SEXO) %>%
summarise(
PuestosGenero = sum(Puestos),
Minimo = round(min(SBP),0),
Media = round(weighted.mean(SBP, Puestos),0),
SD = round(sqrt(Hmisc::wtd.var(SBP, weights = Puestos)),0),
Maximo = round(max(SBP),0)
) %>%
right_join(sinep1[2:3], by = c("Organismo")) %>%
mutate(PuestosGenero_pp = round(100*PuestosGenero/PuestosOrganismos,1))
sinep2 %>%
mutate(SEXO = recode(SEXO, `F` = "Femenino", `M`= "Masculino")) %>%
select(1,2,3,4,10,5,6,7,8) %>%
rename("Puestos de Trabajo" = PuestosGenero,
"Mínimo del Salario Bruto (pesos corrientes)" = Minimo,
"Salario Bruto Promedio (pesos corrientes)" = Media,
"Desviación Estándar del Salario Bruto (pesos corrientes)" = SD,
"Máximo del Salario Bruto (pesos corrientes)" = Maximo,
"% de los Puestos de Trabajo" = PuestosGenero_pp
) %>%
DT::datatable(filter = "top", options = list(
lengthMenu = c(10, 25, 50, 125, 175)))
Fecha: 4/8/2021
sinep3 <- BIEP_EDUCA %>%
filter(ESCALAFÓN == "303 - SINEP") %>%
group_by(Jurisdiccion,Organismo, nvlEduca) %>%
summarise( n = sum(Puestos),
"Salario Bruto Promedio (pesos corrientes)" = round(weighted.mean(SBP, Puestos), 0),
"Desviación Estándar (pesos corrientes)" = round(sqrt(Hmisc::wtd.var(SBP, weights = Puestos)), 0)) %>%
right_join(sinep1[2:3], by = c("Organismo")) %>%
mutate("% de los puestos del escalafón" = round(100*n/PuestosOrganismos,2)) %>%
select(1,2,3,4,8,5,6)
sinep3 %>%
rename("Puestos de Trabajo" = n,
"Nivel Educativo" = nvlEduca) %>%
DT::datatable(filter = "top", options = list(
lengthMenu = c(10, 25, 50, 100,200)))
Fecha: 4/8/2021
sinep4 <- BIEP_EDUCA %>%
filter(ESCALAFÓN == "303 - SINEP") %>%
group_by(Jurisdiccion, Organismo, TIPO_CONTRATACION) %>%
summarise( n = sum(Puestos),
"Salario Bruto Promedio (pesos corrientes)" = round(weighted.mean(SBP, Puestos), 0),
"Desviación Estándar" = round(sqrt(Hmisc::wtd.var(SBP, weights = Puestos)), 0)) %>%
right_join(sinep1[2:3], by = c("Organismo")) %>%
mutate("% de los puestos del escalafón" = round(100*n/PuestosOrganismos,2)) %>%
select(1,2,3,4,8,5,6)
sinep4 %>%
rename("Puestos de Trabajo" = n) %>%
DT::datatable(filter = "top", options = list(
lengthMenu = c(10, 25, 50, 100,200)))
Volver a Inicio
Fecha: 4/8/2021
gsinep1 <- sinep1 %>%
mutate(Puestos_pp = 100*PuestosOrganismos/totalPuestosSinep) %>%
filter(Puestos_pp >= 1) %>%
ggplot(aes(x= reorder(Organismo, Media), y = Media, fill = Organismo))+
geom_col()+
scale_fill_viridis_d()+
guides(fill = F)+
labs(caption = paste(round(porcentaje, 1),"% del total de puestos de trabajo"))+
theme_minimal()+
coord_flip()+
xlab("")+
ylab("Salario Bruto Promedio")
ggplotly(gsinep1,
tooltip = c("Media")) %>%
layout(showlegend = FALSE)
Fecha: 4/8/2021
gsinep2 <- sinep4 %>%
filter(TIPO_CONTRATACION == "Contratado") %>%
semi_join(filtroSinep) %>%
ggplot(aes(x= reorder(Organismo, `% de los puestos del escalafón`), y = `% de los puestos del escalafón`, fill = Organismo))+
geom_col()+
scale_fill_viridis_d()+
guides(fill = F)+
labs(caption = "Organismos con más del 1% de los puestos de trabajo del SINEP")+
theme_minimal()+
coord_flip()+
ylab("% de Puestos de Trabajo")+
xlab("")
ggplotly(gsinep2,
tooltip = c("y")) %>%
layout(showlegend = FALSE)
Aqui la Brecha Salarial se calcula como la diferencia entre el salario bruto promedio de puestos de trabajo contratados y el salario bruto promedio de los puestos de trabajo permanentes, expresada como puntos porcentuales de salario bruto promedio masculino. \(100*(SBP_{c}-SBP_{p})/SBP_{p}\) Fecha: 4/8/2021
gsinep3 <- sinep4 %>%
select(2,3,6) %>%
pivot_wider(names_from = TIPO_CONTRATACION, values_from = `Salario Bruto Promedio (pesos corrientes)`) %>%
semi_join(filtroSinep) %>%
mutate(Brecha = round(100*(Contratado-Permanente)/Permanente,2)) %>%
ggplot(aes(x = reorder(Organismo, Brecha), y = Brecha, fill = Brecha, label = Organismo))+
geom_col()+
scale_fill_viridis_c()+
coord_flip()+
guides(fill = F)+
xlab("")+
ylab("% del Salario Bruto Promedio para Permanente")+
theme_minimal()
ggplotly(gsinep3,
tooltip = c("y", "label"))
Fecha: 4/8/2021
gsinep4 <- sinep2 %>%
filter(SEXO == "F") %>%
semi_join(filtroSinep, by = "Organismo") %>%
rename("% de Puestos de Trabajo femeninos" = PuestosGenero_pp) %>%
ggplot(aes(x= reorder(Organismo,`% de Puestos de Trabajo femeninos`), y = `% de Puestos de Trabajo femeninos`, fill = Organismo))+
geom_col()+
scale_fill_viridis_d()+
guides(fill = F)+
labs(caption = "Organismos con más del 1% de los puestos de trabajo del SINEP")+
theme_minimal()+
coord_flip()+
ylab("% de Puestos de Trabajo")+
xlab("")
ggplotly(gsinep4,
tooltip = c("y")) %>%
layout(showlegend = FALSE)
La Brecha Salarial se calcula como la diferencia entre el salario bruto promedio femenino y salario bruto promedio masculino, expresada como puntos porcentuales de salario bruto promedio masculino. \(100*(SBP_{f}-SBP_{m})/SBP_{m}\) Fecha:4/8/2021
gsinep5 <- sinep2 %>%
select(2,3,6) %>%
pivot_wider(names_from = SEXO, values_from = Media) %>%
semi_join(filtroSinep) %>%
mutate(Brecha = round(100*(`F`-M)/M,2)) %>%
ggplot(aes(x = reorder(Organismo, Brecha), y = Brecha, fill = Brecha, label = Organismo))+
geom_col()+
scale_fill_viridis_c()+
coord_flip()+
guides(fill = F)+
xlab("")+
ylab("% del Salario Bruto Promedio masculino")+
theme_minimal()
ggplotly(gsinep5,
tooltip = c("y", "label"))
Volver a Inicio
g1 <- tab2 %>%
filter(tab2[5] >= 1) %>%
ggplot(aes(x = reorder(ESCALAFÓN, `Salario Bruto Promedio (pesos corrientes)`), y = `Salario Bruto Promedio (pesos corrientes)`, color = ESCALAFÓN))+
geom_point(size=2)+
geom_segment(aes(x = ESCALAFÓN, xend = ESCALAFÓN, y = 0, yend = `Salario Bruto Promedio (pesos corrientes)`), size=2)+
scale_color_viridis_d()+
scale_y_continuous(labels = scales::comma, breaks = c(50000,100000,200000,400000,600000))+
theme_minimal()+
guides(color = F)+
xlab("")+
ylab("pesos corrientes")+
coord_flip()
ggplotly(g1,
tooltip = c("y")) %>%
layout(showlegend = FALSE)
escalafonesSeleccionados <- tab2 %>%
filter(tab2[5] >= 1)
g2 <- BIEP_EDUCA %>%
group_by(ESCALAFÓN, nvlEduca) %>%
summarise(PT = sum(Puestos),
MS = sum(Puestos*SBP)) %>%
inner_join(escalafonesSeleccionados, by = "ESCALAFÓN") %>%
mutate("% de Puestos de Trabajo" = round(100*PT/`Puestos de Trabajo`,2)) %>%
ggplot(aes(x = nvlEduca, y = `% de Puestos de Trabajo`, fill = nvlEduca)) +
geom_col() +
scale_fill_viridis_d() +
facet_wrap(vars(ESCALAFÓN), ncol = 4)+
scale_y_continuous(breaks = c(0,25,50,75,100))+
coord_flip()+
theme_minimal()
g2 <- g2+theme(legend.position = "top",strip.text.x = element_text(hjust = 0)) +
guides(fill = F) +
ylab("% de puestos de trabajo del escalafón") +
xlab("")
ggplotly(g2,
tooltip = c("y")) %>%
layout(legend = list(orientation = "h",
xanchor = "left",
y = 10,
x = 0))
La Brecha Salarial se calcula como la diferencia entre el salario bruto promedio femenino y salario bruto promedio masculino, expresada como puntos porcentuales de salario bruto promedio masculino. \(100*(SBP_{f}-SBP_{m})/SBP_{m}\) Fecha: 4/8/2021
a <- BIEP_EDUCA %>%
filter(SEXO == "F") %>%
group_by(ESCALAFÓN) %>%
summarise( SBP = weighted.mean(SBP, Puestos))
b <- BIEP_EDUCA %>%
filter(SEXO == "M") %>%
group_by( ESCALAFÓN) %>%
summarise( SBP = weighted.mean(SBP, Puestos))
c <- left_join(a, b, by = "ESCALAFÓN") %>%
mutate( Brecha = round(100*(SBP.x - SBP.y)/SBP.y,2)) %>%
semi_join(escalafonesSeleccionados)
g3 <- c %>%
ggplot(aes(
x = reorder(ESCALAFÓN, Brecha),
y = Brecha,
fill = Brecha,
label = ESCALAFÓN
)) +
geom_col() +
scale_y_continuous(labels = scales::comma, breaks = c(-20,-15,-10,-5,0,5)) +
scale_fill_viridis_c()+
theme_minimal()
g3 <- g3 +
ylab("% del salario promedio masculino") +
xlab("") +
guides(fill=F)+
coord_flip()
ggplotly(g3,
tooltip = c("y","label"))
Volver a Inicio
Este gráfico representa el nivel del salario real para cada escalafón tomando como base igual a 100 noviembre del año 2017. Para el calculo de esta variable primero se calcula el salario real de cada año como el cociente entre el promedio de los conceptos fijos percibidos y el indice de precios al consumidor nacional de nivel general. Se toma el salario real del año 2017 como base igual a 100 y el resto de los años se expresa como porcentaje en relación a ese año base.
#datos de año base 2017
ipc <- ipc %>%
mutate(`PERIODO_FECHA` =
case_when(
indice_tiempo == "2016-12-01" ~ lubridate::ymd("2016-11-01"),
TRUE ~ lubridate::ymd(indice_tiempo)
))
#datos de año base 2017
base_BIEP_EDUCA <- BIEP_EDUCA_temp %>%
left_join(escalafonesSeleccionados) %>%
group_by(`PERIODO_FECHA`, ESCALAFÓN) %>%
summarise(base2017 = weighted.mean(CFP, Puestos)) %>%
filter(`PERIODO_FECHA` == "2017-11-01") %>%
left_join(ipc) %>%
mutate(
salarioRealbase = base2017/ipc_nivel_general_nacional
) %>%
select(2,6)
serie_variacion_CFP <-
BIEP_EDUCA_temp %>%
semi_join(ipc) %>%
semi_join(escalafonesSeleccionados) %>%
group_by(`PERIODO_FECHA`, ESCALAFÓN) %>%
summarise(CFP = weighted.mean(CFP,Puestos)) %>%
left_join(ipc) %>%
mutate(salarioReal = CFP/ipc_nivel_general_nacional) %>%
inner_join(base_BIEP_EDUCA, by = c("ESCALAFÓN")) %>%
mutate(nivelSalarioReal = round(100*salarioReal/salarioRealbase,2))
cfp_timeGraf <- serie_variacion_CFP %>%
ggplot(aes(x = `PERIODO_FECHA.x`, y = nivelSalarioReal, color = ESCALAFÓN, label = ESCALAFÓN))+
geom_line()+
geom_point()+
scale_color_viridis_d()+
theme_minimal()+
scale_x_date(breaks = unique(serie_variacion_CFP$`PERIODO_FECHA.x`))+
xlab("Año")+
ylab("Nivel del Salario Real")+
guides(color = F)
ggplotly(cfp_timeGraf,
tooltip = c("label","y")) %>%
layout(legend = list(orientation = "h",
xanchor = "left",
y = 10,
x = 0))
genero_civil <- BIEP_EDUCA_temp %>%
filter(SEXO != "O") %>%
group_by(`PERIODO_FECHA`, ESCALAFÓN, SEXO) %>%
summarise(
SBPwm = weighted.mean(SBP, Puestos),
PuestosSum = sum(Puestos)
) %>%
pivot_wider(names_from = SEXO, values_from = c("SBPwm","PuestosSum") ) %>%
mutate(
Brecha = round(100*(SBPwm_F-SBPwm_M)/SBPwm_M,2),
PuestosFem_pp = round(100*PuestosSum_F/(PuestosSum_F+PuestosSum_M))
) %>%
semi_join(escalafonesSeleccionados)
#ver tema eje x con fechas, quedan mal las proporciones sino
pp_fem <- genero_civil %>%
ggplot(aes(x = `PERIODO_FECHA`,
y = PuestosFem_pp, color = ESCALAFÓN, label = ESCALAFÓN))+
geom_line()+
geom_point()+
scale_x_date(breaks = unique(genero_civil$`PERIODO_FECHA`))+
theme_minimal()+
theme(legend.position = "bottom")+
xlab("Año")+
ylab("% de puestos de trabajo femeninos")
ggplotly(pp_fem,
tooltip = c("label","y")) %>%
layout(legend = list(orientation = "h",
xanchor = "left",
y = 10,
x = 0))
La Brecha Salarial se calcula como la diferencia entre el salario bruto promedio femenino y salario bruto promedio masculino, expresada como puntos porcentuales de salario bruto promedio masculino.
brecha_timegraf <- genero_civil %>%
ggplot(aes(x = `PERIODO_FECHA`,
y = Brecha, color = ESCALAFÓN, label = ESCALAFÓN))+
geom_point()+
geom_line()+
scale_x_date(breaks = unique(genero_civil$`PERIODO_FECHA`))+
theme_minimal()+
theme(legend.position = "bottom")+
xlab("Año")+
ylab("brecha como % del \n salario bruto promedio masculino")
ggplotly(brecha_timegraf,
tooltip = c("label","y")) %>%
layout(legend = list(orientation = "h",
xanchor = "left",
y = 10,
x = 0))