El artículo de @maldonado2021brechas busca visibilizar y analizar la desigualdad de género en la composición del empleo público de la Administración Pública Nacional (APN). El trabajo se basa en datos del año 2020 de la Base Integrada de Empleo Público elaborada por la Secretaría de Gestión y Empleo Público de la Jefatura de Gabinete de Ministros a partir de registros administrativos. A partir esta se realiza una aproximación cuantitativa de la cantidad de empleados y empleadas en los organismos de la APN e identifica salarios, si se trata de personal civil y el tipo de administración, jurisdicción y escalafón al que pertenecen. Debe señalarse que la BIEP utiliza una codificación binaria del género de los y las empleadas. Si bien los derechos de las mujeres se encuentran vulnerados de distintas maneras dentro del mercado de trabajo, en este ensayo tomaremos tres de las principales: la segregación horizontal, los “techos de cristal” y la brecha salarial. El primero refiere a la existencia de trabajos con mayor presencia de mujeres/varones en algunos sectores, el segundo a la menor presencia de mujeres en puestos jerárquicos y el tercero a la diferencia de ingresos respecto a sus pares varones.
# librerias necesarias
#install.packages(dplyr, tidyverse)
library(dplyr)
library(tidyverse)
library(data.table)
library(readr)
# variables=c("anio", "mes","descripcionEntidad" , "codigoPersona", "sexo", "fechaIngreso", "tipoPersonal", "lugar","montoPresupuestado")
#
# FP2015ene=fread( "D:/FUNPUBLICOS/nomina_2015-01.csv", select=variables )
# FP2015feb=fread( "D:/FUNPUBLICOS/nomina_2015-02.csv", select=variables )
# FP2015mar=fread( "D:/FUNPUBLICOS/nomina_2015-03.csv", select=variables )
# FP2015abr=fread( "D:/FUNPUBLICOS/nomina_2015-04.csv", select=variables )
# FP2015may=fread( "D:/FUNPUBLICOS/nomina_2015-05.csv", select=variables )
# FP2015jun=fread( "D:/FUNPUBLICOS/nomina_2015-06.csv", select=variables )
# FP2015jul=fread( "D:/FUNPUBLICOS/nomina_2015-07.csv", select=variables )
# FP2015ago=fread( "D:/FUNPUBLICOS/nomina_2015-08.csv", select=variables )
# FP2015sep=fread( "D:/FUNPUBLICOS/nomina_2015-09.csv", select=variables )
# FP2015oct=fread( "D:/FUNPUBLICOS/nomina_2015-10.csv", select=variables )
# FP2015nov=fread( "D:/FUNPUBLICOS/nomina_2015-11.csv", select=variables )
# FP2015dic=fread( "D:/FUNPUBLICOS/nomina_2015-12.csv", select=variables )
#
# FP2016ene=fread( "D:/FUNPUBLICOS/nomina_2016-01.csv", select=variables )
# FP2016feb=fread( "D:/FUNPUBLICOS/nomina_2016-02.csv", select=variables )
# FP2016mar=fread( "D:/FUNPUBLICOS/nomina_2016-03.csv", select=variables )
# FP2016abr=fread( "D:/FUNPUBLICOS/nomina_2016-04.csv", select=variables )
# FP2016may=fread( "D:/FUNPUBLICOS/nomina_2016-05.csv", select=variables )
# FP2016jun=fread( "D:/FUNPUBLICOS/nomina_2016-06.csv", select=variables )
# FP2016jul=fread( "D:/FUNPUBLICOS/nomina_2016-07.csv", select=variables )
# FP2016ago=fread( "D:/FUNPUBLICOS/nomina_2016-08.csv", select=variables )
# FP2016sep=fread( "D:/FUNPUBLICOS/nomina_2016-09.csv", select=variables )
# FP2016oct=fread( "D:/FUNPUBLICOS/nomina_2016-10.csv", select=variables )
# FP2016nov=fread( "D:/FUNPUBLICOS/nomina_2016-11.csv", select=variables )
# FP2016dic=fread( "D:/FUNPUBLICOS/nomina_2016-12.csv", select=variables )
#
# FP2017ene=fread( "D:/FUNPUBLICOS/nomina_2017-01.csv", select=variables )
# FP2017feb=fread( "D:/FUNPUBLICOS/nomina_2017-02.csv", select=variables )
# FP2017mar=fread( "D:/FUNPUBLICOS/nomina_2017-03.csv", select=variables )
# FP2017abr=fread( "D:/FUNPUBLICOS/nomina_2017-04.csv", select=variables )
# FP2017may=fread( "D:/FUNPUBLICOS/nomina_2017-05.csv", select=variables )
# FP2017jun=fread( "D:/FUNPUBLICOS/nomina_2017-06.csv", select=variables )
# FP2017jul=fread( "D:/FUNPUBLICOS/nomina_2017-07.csv", select=variables )
# FP2017ago=fread( "D:/FUNPUBLICOS/nomina_2017-08.csv", select=variables )
# FP2017sep=fread( "D:/FUNPUBLICOS/nomina_2017-09.csv", select=variables )
# FP2017oct=fread( "D:/FUNPUBLICOS/nomina_2017-10.csv", select=variables )
# FP2017nov=fread( "D:/FUNPUBLICOS/nomina_2017-11.csv", select=variables )
# FP2017dic=fread( "D:/FUNPUBLICOS/nomina_2017-12.csv", select=variables )
#
# FP2018ene=fread( "D:/FUNPUBLICOS/nomina_2018-01.csv", select=variables )
# FP2018feb=fread( "D:/FUNPUBLICOS/nomina_2018-02.csv", select=variables )
# FP2018mar=fread( "D:/FUNPUBLICOS/nomina_2018-03.csv", select=variables )
# FP2018abr=fread( "D:/FUNPUBLICOS/nomina_2018-04.csv", select=variables )
# FP2018may=fread( "D:/FUNPUBLICOS/nomina_2018-05.csv", select=variables )
# FP2018jun=fread( "D:/FUNPUBLICOS/nomina_2018-06.csv", select=variables )
# FP2018jul=fread( "D:/FUNPUBLICOS/nomina_2018-07.csv", select=variables )
# FP2018ago=fread( "D:/FUNPUBLICOS/nomina_2018-08.csv", select=variables )
# FP2018sep=fread( "D:/FUNPUBLICOS/nomina_2018-09.csv", select=variables )
# FP2018oct=fread( "D:/FUNPUBLICOS/nomina_2018-10.csv", select=variables )
# FP2018nov=fread( "D:/FUNPUBLICOS/nomina_2018-11.csv", select=variables )
# FP2018dic=fread( "D:/FUNPUBLICOS/nomina_2018-12.csv", select=variables )
#
# FP2019ene=fread( "D:/FUNPUBLICOS/nomina_2019-01.csv", select=variables )
# FP2019feb=fread( "D:/FUNPUBLICOS/nomina_2019-02.csv", select=variables )
# FP2019mar=fread( "D:/FUNPUBLICOS/nomina_2019-03.csv", select=variables )
# FP2019abr=fread( "D:/FUNPUBLICOS/nomina_2019-04.csv", select=variables )
# FP2019may=fread( "D:/FUNPUBLICOS/nomina_2019-05.csv", select=variables )
# FP2019jun=fread( "D:/FUNPUBLICOS/nomina_2019-06.csv", select=variables )
# FP2019jul=fread( "D:/FUNPUBLICOS/nomina_2019-07.csv", select=variables )
# FP2019ago=fread( "D:/FUNPUBLICOS/nomina_2019-08.csv", select=variables )
# FP2019sep=fread( "D:/FUNPUBLICOS/nomina_2019-09.csv", select=variables )
# FP2019oct=fread( "D:/FUNPUBLICOS/nomina_2019-10.csv", select=variables )
# FP2019nov=fread( "D:/FUNPUBLICOS/nomina_2019-11.csv", select=variables )
# FP2019dic=fread( "D:/FUNPUBLICOS/nomina_2019-12.csv", select=variables )
#
# FP2020ene=fread( "D:/FUNPUBLICOS/nomina_2020-01.csv", select=variables )
# FP2020feb=fread( "D:/FUNPUBLICOS/nomina_2020-02.csv", select=variables )
# FP2020mar=fread( "D:/FUNPUBLICOS/nomina_2020-03.csv", select=variables )
# FP2020abr=fread( "D:/FUNPUBLICOS/nomina_2020-04.csv", select=variables )
# FP2020may=fread( "D:/FUNPUBLICOS/nomina_2020-05.csv", select=variables )
# FP2020jun=fread( "D:/FUNPUBLICOS/nomina_2020-06.csv", select=variables )
# FP2020jul=fread( "D:/FUNPUBLICOS/nomina_2020-07.csv", select=variables )
# FP2020ago=fread( "D:/FUNPUBLICOS/nomina_2020-08.csv", select=variables )
# FP2020sep=fread( "D:/FUNPUBLICOS/nomina_2020-09.csv", select=variables )
# FP2020oct=fread( "D:/FUNPUBLICOS/nomina_2020-10.csv", select=variables )
# FP2020nov=fread( "D:/FUNPUBLICOS/nomina_2020-11.csv", select=variables )
# FP2020dic=fread( "D:/FUNPUBLICOS/nomina_2020-12.csv", select=variables )
#
# FP2021ene=fread( "D:/FUNPUBLICOS/nomina_2021-01.csv", select=variables )
# FP2021feb=fread( "D:/FUNPUBLICOS/nomina_2021-02.csv", select=variables )
# FP2021mar=fread( "D:/FUNPUBLICOS/nomina_2021-03.csv", select=variables )
# FP2021abr=fread( "D:/FUNPUBLICOS/nomina_2021-04.csv", select=variables )
# FP2021may=fread( "D:/FUNPUBLICOS/nomina_2021-05.csv", select=variables )
# FP2021jun=fread( "D:/FUNPUBLICOS/nomina_2021-06.csv", select=variables )
# FP2021jul=fread( "D:/FUNPUBLICOS/nomina_2021-07.csv", select=variables )
# FP2021ago=fread( "D:/FUNPUBLICOS/nomina_2021-08.csv", select=variables )
# FP2021sep=fread( "D:/FUNPUBLICOS/nomina_2021-09.csv", select=variables )
# FP2021oct=fread( "D:/FUNPUBLICOS/nomina_2021-10.csv", select=variables )
# FP2021nov=fread( "D:/FUNPUBLICOS/nomina_2021-11.csv", select=variables )
# FP2021dic=fread( "D:/FUNPUBLICOS/nomina_2021-12.csv", select=variables )
#
# FP2022ene=fread( "D:/FUNPUBLICOS/nomina_2022-01.csv", select=variables )
# FP2022feb=fread( "D:/FUNPUBLICOS/nomina_2022-02.csv", select=variables )
# FP2022mar=fread( "D:/FUNPUBLICOS/nomina_2022-03.csv", select=variables )
# FP2022abr=fread( "D:/FUNPUBLICOS/nomina_2022-04.csv", select=variables )
# FP2022may=fread( "D:/FUNPUBLICOS/nomina_2022-05.csv", select=variables )
# FP2022jun=fread( "D:/FUNPUBLICOS/nomina_2022-06.csv", select=variables )
# FP2022jul=fread( "D:/FUNPUBLICOS/nomina_2022-07.csv", select=variables )
# FP2022ago=fread( "D:/FUNPUBLICOS/nomina_2022-08.csv", select=variables )
# FP2022sep=fread( "D:/FUNPUBLICOS/nomina_2022-09.csv", select=variables )
# FP2022oct=fread( "D:/FUNPUBLICOS/nomina_2022-10.csv", select=variables )
# FP2022nov=fread( "D:/FUNPUBLICOS/nomina_2022-11.csv", select=variables )
# FP2022dic=fread( "D:/FUNPUBLICOS/nomina_2022-12.csv", select=variables )
#
# FP2023ene=fread( "D:/FUNPUBLICOS/nomina_2023-01.csv", select=variables )
# FP2023feb=fread( "D:/FUNPUBLICOS/nomina_2023-02.csv", select=variables )
# FP2023mar=fread( "D:/FUNPUBLICOS/nomina_2023-03.csv", select=variables )
# FP2023abr=fread( "D:/FUNPUBLICOS/nomina_2023-04.csv", select=variables )
# FP2023may=fread( "D:/FUNPUBLICOS/nomina_2023-05.csv", select=variables )
# FP2023jun=fread( "D:/FUNPUBLICOS/nomina_2023-06.csv", select=variables )
# FP2023jul=fread( "D:/FUNPUBLICOS/nomina_2023-07.csv", select=variables )
# FP2023ago=fread( "D:/FUNPUBLICOS/nomina_2023-08.csv", select=variables )
# FP2023sep=fread( "D:/FUNPUBLICOS/nomina_2023-09.csv", select=variables )
# FP2023oct=fread( "D:/FUNPUBLICOS/nomina_2023-10.csv", select=variables )
# FP2023nov=fread( "D:/FUNPUBLICOS/nomina_2023-11.csv", select=variables )
# FP2023dic=fread( "D:/FUNPUBLICOS/nomina_2023-12.csv", select=variables )
#
# FP2024ene=fread( "D:/FUNPUBLICOS/nomina_2024-01.csv", select=variables )
# FP2024feb=fread( "D:/FUNPUBLICOS/nomina_2024-02.csv", select=variables )
# FP2024mar=fread( "D:/FUNPUBLICOS/nomina_2024-03.csv", select=variables )
# FP2024abr=fread( "D:/FUNPUBLICOS/nomina_2024-04.csv", select=variables )
# FP2024may=fread( "D:/FUNPUBLICOS/nomina_2024-05.csv", select=variables )
# FP2024jun=fread( "D:/FUNPUBLICOS/nomina_2024-06.csv", select=variables )
# FP2024jul=fread( "D:/FUNPUBLICOS/nomina_2024-07.csv", select=variables )
# FP2024ago=fread( "D:/FUNPUBLICOS/nomina_2024-08.csv", select=variables )
# FP2024sep=fread( "D:/FUNPUBLICOS/nomina_2024-09.csv", select=variables )
# FP2024oct=fread( "D:/FUNPUBLICOS/nomina_2024-10.csv", select=variables )
# FP2024nov=fread( "D:/FUNPUBLICOS/nomina_2024-11.csv", select=variables )
# FP2024dic=fread( "D:/FUNPUBLICOS/nomina_2024-12.csv", select=variables )
# FPcomp=bind_rows(
# FP2015ene, FP2015feb, FP2015mar, FP2015abr, FP2015may, FP2015jun, FP2015jul, FP2015ago, FP2015sep, FP2015oct, FP2015nov, FP2015dic,
# FP2016ene, FP2016feb, FP2016mar, FP2016abr, FP2016may, FP2016jun, FP2016jul, FP2016ago, FP2016sep, FP2016oct, FP2016nov, FP2016dic,
# FP2017ene, FP2017feb, FP2017mar, FP2017abr, FP2017may, FP2017jun, FP2017jul, FP2017ago, FP2017sep, FP2017oct, FP2017nov, FP2017dic,
# FP2018ene, FP2018feb, FP2018mar, FP2018abr, FP2018may, FP2018jun, FP2018jul, FP2018ago, FP2018sep, FP2018oct, FP2018nov, FP2018dic,
# FP2019ene, FP2019feb, FP2019mar, FP2019abr, FP2019may, FP2019jun, FP2019jul, FP2019ago, FP2019sep, FP2019oct, FP2019nov, FP2019dic,
# FP2020ene, FP2020feb, FP2020mar, FP2020abr, FP2020may, FP2020jun, FP2020jul, FP2020ago, FP2020sep, FP2020oct, FP2020nov, FP2020dic,
# FP2021ene, FP2021feb, FP2021mar, FP2021abr, FP2021may, FP2021jun, FP2021jul, FP2021ago, FP2021sep, FP2021oct, FP2021nov, FP2021dic,
# FP2022ene, FP2022feb, FP2022mar, FP2022abr, FP2022may, FP2022jun, FP2022jul, FP2022ago, FP2022sep, FP2022oct, FP2022nov, FP2022dic,
# FP2023ene, FP2023feb, FP2023mar, FP2023abr, FP2023may, FP2023jun, FP2023jul, FP2023ago, FP2023sep, FP2023oct, FP2023nov, FP2023dic,
# FP2024ene, FP2024feb, FP2024mar, FP2024abr, FP2024may, FP2024jun, FP2024jul, FP2024ago, FP2024sep, FP2024oct, FP2024nov, FP2024dic
# )
# FP2025mar=fread( "D:/FUNPUBLICOS/nomina_2025-03.csv" )
# names(FP2025mar)
# FP2025abr=fread( "D:/FUNPUBLICOS/nomina_2025-04.csv" )
# names(FP2025abr)
# FP2025may=fread( "D:/FUNPUBLICOS/nomina_2025-05.csv" )
# names(FP2025may)
# library(data.table)
#
# variables=c("anio", "mes","descripcionEntidad" ,"codigoPersona", "sexo", "fechaIngreso", "tipoPersonal", "lugar","montoPresupuestado")
#
# FP2025ene=fread( "D:/FUNPUBLICOS/nomina_2025-01.csv", select=variables )
# FP2025feb=fread( "D:/FUNPUBLICOS/nomina_2025-02.csv", select=variables )
# FP2025abr=fread( "D:/FUNPUBLICOS/nomina_2025-04.csv", select=variables )
#
#
# # Nombres originales en el CSV
# seleccionadosV3 <- c("anho", "mes", "descripcion_entidad", "concepto",
# "documento", "sexo","fechaIngreso","fecha_acto", "estado","lugar", "presupuestado")
#
# FP2025mar=fread( "D:/FUNPUBLICOS/nomina_2025-03.csv", select=seleccionadosV3 )
#
# FP2025may=fread( "D:/FUNPUBLICOS/nomina_2025-05.csv", select=seleccionadosV3 )
# FP2025jun=fread( "D:/FUNPUBLICOS/nomina_2025-06.csv", select=seleccionadosV3 )
# FP2025jul=fread( "D:/FUNPUBLICOS/nomina_2025-07.csv", select=seleccionadosV3 )
# #FP2025ago=fread( "D:/FUNPUBLICOS/nomina_2025-08.csv", select=seleccionadosV3 )
# #FP2025sep=fread( "D:/FUNPUBLICOS/nomina_2025-09.csv", select=seleccionadosV3 )
# #FP2025oct=fread( "D:/FUNPUBLICOS/nomina_2025-10.csv", select=seleccionadosV3 )
# #FP2025nov=fread( "D:/FUNPUBLICOS/nomina_2025-11.csv", select=seleccionadosV3 )
# #FP2025dic=fread( "D:/FUNPUBLICOS/nomina_2025-12.csv", select=seleccionadosV3 )
#
# newnames <- c("anio", "mes", "descripcionEntidad", "conceptoGasto",
# "codigoPersona", "sexo", "fechaIngreso",
# "tipoPersonal", "lugar", "montoPresupuestado")
# # Diccionario de renombrado: nombres nuevos = nombres originales
# names(FP2025mar) <- newnames
# names(FP2025may) <- newnames
# names(FP2025jun) <- newnames
# names(FP2025jul) <- newnames
# str(FP2025ene$fechaIngreso)
# str(FP2025mar$fechaIngreso)
# library(dplyr)
# library(lubridate)
#
# # Función para normalizar fechas
# normalizar_fecha <- function(df) {
# df %>%
# mutate(
# fechaIngreso = case_when(
# grepl("-", fechaIngreso) ~ as.Date(fechaIngreso), # "2016-04-11"
# grepl("/", fechaIngreso) ~ as.Date(ymd_hms(fechaIngreso)), # "2021/11/09 00:00:00.000"
# TRUE ~ NA_Date_
# )
# )
# }
#
# # Aplicar a cada base
# FP2025ene <- normalizar_fecha(FP2025ene)
# FP2025feb <- normalizar_fecha(FP2025feb)
# FP2025mar <- normalizar_fecha(FP2025mar)
# FP2025abr <- normalizar_fecha(FP2025abr)
# FP2025may <- normalizar_fecha(FP2025may)
# FP2025jun <- normalizar_fecha(FP2025jun)
# FP2025jul <- normalizar_fecha(FP2025jul)
# FPcomp2=bind_rows(
# FP2025ene,
# FP2025feb,
# FP2025mar,
# FP2025abr,
# FP2025may,
# FP2025jun,
# FP2025jul
# #FP2025ago,
# #FP2025sep,
# #FP2025oct,
# #FP2025nov,
# #FP2025dic
# )
# table(FPcomp2$anio, FPcomp2$mes)
# library(dplyr)
# library(lubridate)
#
# # Normalizar formatos
# FPcomp <- normalizar_fecha(FPcomp)
# FPcomp2 <- normalizar_fecha(FPcomp2)
# str(FPcomp$fechaIngreso)
# str(FPcomp2$fechaIngreso)
# Unir
# FPcomp3 <- bind_rows(FPcomp, FPcomp2)
# library(data.table)
#
# setDT(FPcomp3) #asegura que FP sea data.table
#
# FPcompsd <- FPcomp3[
# , .(salario = sum(montoPresupuestado, na.rm = TRUE)),
# by = .(anio, mes, codigoPersona, sexo, descripcionEntidad, fechaIngreso, tipoPersonal)
# ][
# , fecha := as.IDate(paste0(anio, "-", sprintf("%02d", mes), "-01"))
# ]
# #Una sola vez: convertir tu RDS a .qs
# library(qs)
# qs::qsave(
# FPcompsd, "D:/FUNPUBLICOS/nominaFPcomp.qs",
# preset = "high", nthreads = parallel::detectCores()
# )
# rm(FP); gc()
# #Carga diaria (rápida y multihilo)
# system.time(
# FP <- qs::qread("D:/FUNPUBLICOS/nominaFPcomp.qs",
# nthreads = parallel::detectCores())
# )
# table(FP$anio, FP$mes)
Añadir valores del salario minimo
# algunos filtros necesarios
#
# nrow(FP)
# FPfil <- FP %>%
# filter(
# tipoPersonal %in% c("CON", "PER", "COM"), #conservar solo esos valores
# salario > 0,
# !is.na(salario),
# !is.na(sexo) #excluir valores NA
# )
#
# nrow(FPfil)
# library(tibble)
# library(lubridate)
#
# sml_data <- tribble(
# ~year, ~mes, ~sml,
# 2015, 7, 644350, # SMMLV en julio 2015 :contentReference[oaicite:1]{index=1}
# 2016, 7, 689455, # julio 2016 :contentReference[oaicite:2]{index=2}
# 2017, 7, 737717, # julio 2017 :contentReference[oaicite:3]{index=3}
# 2018, 7, 781242, # julio 2018 :contentReference[oaicite:4]{index=4}
# 2019, 7, 828116, # julio 2019 :contentReference[oaicite:5]{index=5}
# 2020, 7, 877803, # julio 2020 :contentReference[oaicite:6]{index=6}
# 2021, 7, 908526, # julio 2021 :contentReference[oaicite:7]{index=7}
# 2022, 7, 1000000, # julio 2022 :contentReference[oaicite:8]{index=8}
# 2023, 7, 1160000, # julio 2023 :contentReference[oaicite:9]{index=9}
# 2024, 7, 1300000, # julio 2024 :contentReference[oaicite:10]{index=10}
# 2025, 7, 1423500 # julio 2025 :contentReference[oaicite:11]{index=11}
# ) %>%
# mutate(fecha = make_date(year, mes, 1))
#
# sml_data
# # agregar el valor del sml a cada fecha de la base FPfil usando como llave la fecha
# library(data.table)
#
# setDT(FPfil)
# setDT(sml_data)
#
# FPfil[sml_data, on = "fecha", sml := i.sml]
Agregar la fecha de nacimiento y el sexo a partir de basepolicia_desdup_nroced,
# # cargar el dato de la policia nacional basepolicia_desdup_nroced.csv
#
# datospol <- fread("D:/FUNPUBLICOS/basepolicia_desdup_nroced.csv", encoding = "UTF-8")
# names(datospol)
# primero unificar el nombre de la llave
#
# # Aseguramos que FPfil es data.table
# setDT(FPfil)
# datospolfil <- datospol %>%
# select("nroced", "sexo", "fechanacim")
# datospolfil
# library(dplyr)
# names(FPfil)
# library(dplyr)
#
# FPfil <- FPfil %>%
# rename(
# nroced = codigoPersona,
# sexo_orig = sexo
# )
# Merge por la llave "cedula"
#
#
# FPfil[, nroced := as.character(nroced)]
# datospolfil[, nroced := as.character(nroced)]
#
# FPfilc <- merge(FPfil, datospolfil,
# by = "nroced",
# all.x = TRUE)
# names(FPfilc)
# library(data.table)
# setDT(FPfilc)
#
# FPfilc[, fechanacim := {
# ref <- first(na.omit(fechanacim))
# if (length(ref) == 0) fechanacim else fifelse(is.na(fechanacim), ref, fechanacim)
# }, by = nroced]
#
# library(data.table)
# setDT(FPfilc)
#
# # Convertir a Date base R
# FPfilc[, `:=`(
# fecha = as.Date(fecha),
# fechanacim = as.Date(fechanacim)
# )]
#
# # Calcular edad y tramos
# FPfilc[, edad := as.integer(floor((fecha - fechanacim) / 365.25))]
# FPfilc[, edad_tramo := cut(
# edad,
# breaks = c(seq(0, 70, by = 5), Inf),
# labels = c("0-4","5-9","10-14","15-19","20-24","25-29",
# "30-34","35-39","40-44","45-49","50-54",
# "55-59","60-64","65-69","70+"),
# right = FALSE
# )]
# hist(FPfilc$edad)
Eliminar los valores de sexo y edad faltantes
# library(data.table)
# setDT(FPfilc)
#
# FPfilc <- FPfilc[!is.na(sexo_orig) & !is.na(edad)]
# names(FPfilc)
# FPfilc <- FPfilc[sexo_orig %in% c("M", "F")]
# FPfilc[, sexo := fifelse(sexo_orig == "M", "Hombres", "Mujeres")]
# table(FPfilc$sexo)
# FPfilc <- FPfilc[edad >= 18 & edad <= 85]
#
# table(FPfilc$edad, FPfilc$sexo)
Descripcion entidad
# FPfilc[, desc_low := iconv(descripcionEntidad,
# from = "", # intenta detectar
# to = "UTF-8", # convertir a UTF-8
# sub = " ")] # reemplaza inválidos
# FPfilc[, desc_low := tolower(desc_low)]
# FPfilc[, grupo := fcase(
# isTRUE(grepl("defensa nacional|fuerzas armadas|militar", desc_low)) ~ "Militares",
# isTRUE(grepl("policia|interior", desc_low)) ~ "Policías",
# isTRUE(grepl("educacion|educación|universidad|instituto superior|colegio", desc_low)) ~ "Maestros",
# isTRUE(grepl("salud|hospital|sanitaria|vigilancia sanitaria|bienestar", desc_low)) ~ "Médicos",
# isTRUE(grepl("justicia|corte|ministerio público|defensoria|congreso|senadores|diputados|magistratura", desc_low)) ~ "Funcionarios Públicos - Justicia",
# isTRUE(grepl("presidencia|vicepresidencia|hacienda|economía|finanzas|contraloría", desc_low)) ~ "Funcionarios Públicos - Gobierno Central",
# default = "Otros"
# )]
#
#
# table(FPfilc$grupo)
# library(dplyr)
#
# # Ver clase y primeros valores
# glimpse(FPfilc$fechaIngreso)
# summary(FPfilc$fechaIngreso)
#
# # Cantidad de valores faltantes
# sum(is.na(FPfilc$fechaIngreso))
# mean(is.na(FPfilc$fechaIngreso)) # proporción de NA
# library(lubridate)
#
# FPfilc[, fechaIngreso := as.Date(fechaIngreso)]
# FPfilc[, antiguedad := floor(interval(fechaIngreso, fecha) / years(1))]
#
#
# FPfilc[antiguedad < 0, antiguedad := 0L]
# summary(FPfilc$antiguedad)
# hist(FPfilc$antiguedad, breaks = 30, main = "Distribución de antigüedad", xlab = "Años")
# library(arrow)
# write_parquet(FPfilc, "G:/Mi unidad/FUNPUBLICOS/FPfilc_final.parquet")
# names(FPfilc)
library(data.table)
system.time(
FPdb <- as.data.table(arrow::read_parquet("G:/Mi unidad/FUNPUBLICOS/FPfilc_final.parquet"))
)
## user system elapsed
## 15.22 3.14 20.67
library(dplyr)
tab1 <- FPdb %>%
filter(
tipoPersonal %in% c("CON", "PER"), #conservar solo esos valores
anio > 2017,
salario > 0,
!is.na(sexo) #excluir valores NA
) %>%
group_by(fecha, anio, sexo) %>%
summarise(
cantidad = n(),
.groups = "drop"
)
tab1
## # A tibble: 174 × 4
## fecha anio sexo cantidad
## <date> <int> <chr> <int>
## 1 2018-01-01 2018 Hombres 109415
## 2 2018-01-01 2018 Mujeres 120010
## 3 2018-02-01 2018 Hombres 111033
## 4 2018-02-01 2018 Mujeres 121475
## 5 2018-03-01 2018 Hombres 111516
## 6 2018-03-01 2018 Mujeres 121756
## 7 2018-04-01 2018 Hombres 111726
## 8 2018-04-01 2018 Mujeres 122081
## 9 2018-05-01 2018 Hombres 111821
## 10 2018-05-01 2018 Mujeres 122296
## # ℹ 164 more rows
library(ggplot2)
library(dplyr)
library(scales)
# Crear dataframe con intervalos de años
anios <- data.frame(
xmin = as.Date(paste0(unique(tab1$anio), "-01-01")),
xmax = as.Date(paste0(unique(tab1$anio), "-12-31")),
anio = unique(tab1$anio)
)
# Alternar color de sombreado por año
anios$fill <- rep(c("gray90", "white"), length.out = nrow(anios))
# Punto medio de cada año
anios$xmid <- anios$xmin + (anios$xmax - anios$xmin) / 2
g1 <- ggplot(tab1, aes(x = fecha, y = cantidad, color = sexo, group = sexo)) +
# Fondo sombreado por año
geom_rect(
data = anios,
aes(xmin = xmin, xmax = xmax, ymin = -Inf, ymax = Inf, fill = fill),
inherit.aes = FALSE, alpha = 0.3
) +
scale_fill_identity() +
geom_text(
data = anios,
aes(x = xmid, y = 160000, label = anio),
inherit.aes = FALSE,
vjust = -0.5, fontface = "bold", size = 3.5
) +
geom_line(linewidth = 1.1) +
geom_point(size = 2.5, alpha = 0.8) +
scale_color_manual(values = c("Hombres" = "#1f77b4", "Mujeres" = "#e377c2")) +
labs(
x = "Fecha",
y = "Cantidad de funcionarios",
color = "Sexo",
title = "Evolución de la cantidad de funcionarios por sexo"
#subtitle = "Áreas sombreadas y etiquetas por año"
) +
scale_y_continuous(limits = c(100000, 150000), labels = comma) +
scale_x_date(
breaks = unique(tab1$fecha),
labels = date_format("%Y-%m")
) +
theme_minimal(base_size = 13) +
theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1, size = 8),
legend.position = "top"
)
g1
library(dplyr)
tab2 <- FPdb %>%
group_by(fecha, anio, sexo) %>%
filter(tipoPersonal!= "COM" & anio>2017 ) %>%
summarize(salariomed = median(salario, na.rm = TRUE),
.groups = "drop"
)
tab2
## # A tibble: 174 × 4
## fecha anio sexo salariomed
## <date> <int> <chr> <dbl>
## 1 2018-01-01 2018 Hombres 5000936
## 2 2018-01-01 2018 Mujeres 4654990
## 3 2018-02-01 2018 Hombres 5442207
## 4 2018-02-01 2018 Mujeres 4700000
## 5 2018-03-01 2018 Hombres 5055236.
## 6 2018-03-01 2018 Mujeres 4682760.
## 7 2018-04-01 2018 Hombres 5052254
## 8 2018-04-01 2018 Mujeres 4684000
## 9 2018-05-01 2018 Hombres 5008611
## 10 2018-05-01 2018 Mujeres 4664598
## # ℹ 164 more rows
library(data.table)
setDT(FPdb)
tab2 <- FPdb[
tipoPersonal != "COM" & anio > 2017,
.(salariomed = median(salario, na.rm = TRUE)),
by = .(fecha, anio, sexo)
]
library(ggplot2)
library(dplyr)
library(scales)
# Crear dataframe con intervalos de años
anios <- data.frame(
xmin = as.Date(paste0(unique(tab1$anio), "-01-01")),
xmax = as.Date(paste0(unique(tab1$anio), "-12-31")),
anio = unique(tab1$anio)
)
# Alternar color de sombreado por año
anios$fill <- rep(c("gray90", "white"), length.out = nrow(anios))
# Punto medio de cada año
anios$xmid <- anios$xmin + (anios$xmax - anios$xmin) / 2
g1 <- ggplot(tab2, aes(x = fecha, y = salariomed, color = sexo, group = sexo)) +
# Fondo sombreado por año
geom_rect(
data = anios,
aes(xmin = xmin, xmax = xmax, ymin = -Inf, ymax = Inf, fill = fill),
inherit.aes = FALSE, alpha = 0.3
) +
scale_fill_identity() +
# Etiqueta con el año
geom_text(
data = anios,
aes(x = xmid, y = max(tab1$salario_promedio, na.rm = TRUE) * 1.02, label = anio),
inherit.aes = FALSE,
vjust = 0, fontface = "bold", size = 3.5
) +
geom_line(linewidth = 1.1) +
geom_point(size = 2.5, alpha = 0.8) +
scale_color_manual(values = c("Hombres" = "#1f77b4", "Mujeres" = "#e377c2")) +
labs(
x = "Fecha",
y = "Salario promedio (Gs.)",
color = "Sexo",
title = "Evolución del salario promedio por sexo"
) +
scale_y_continuous(labels = comma) +
scale_x_date(
breaks = unique(tab1$fecha),
labels = date_format("%Y-%m")
) +
theme_minimal(base_size = 13) +
theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1, size = 8),
legend.position = "top"
)
g1
tab_trayectorias <- FPdb %>%
filter(edad >= 18, edad <= 80, salario > 0) %>%
group_by(edad, sexo) %>%
summarize(
salario_trim = mean(salario, trim = 0.05, na.rm = TRUE),
n = n(), # cantidad de observaciones
.groups = "drop"
) %>%
filter(n > 50) # elimina edades con menos de 50 observaciones
g_trayectorias <- ggplot(tab_trayectorias, aes(x = edad, y = salario_trim, color = sexo)) +
geom_point(alpha = 0.5, size = 1.8) +
geom_smooth(method = "loess", span = 0.4, linewidth = 1.2, se = FALSE) +
scale_color_manual(values = c("Hombres" = "#1f77b4", "Mujeres" = "#e377c2")) +
labs(
title = "Trayectorias salariales por edad",
subtitle = "Media recortada al 95% (sin valores atípicos extremos)",
x = "Edad",
y = "Salario promedio (Gs.)",
color = "Sexo"
) +
scale_y_continuous(labels = scales::comma) +
theme_minimal(base_size = 13) +
theme(legend.position = "top")
g_trayectorias
library(data.table)
setDT(FPdb)
tab_trayectorias_tc <- FPdb[edad >= 18 & edad <= 80 & salario > 0,
.(salario_trim = mean(salario, trim = 0.05, na.rm = TRUE),
n = .N),
by = .(edad, tipoPersonal)
][n > 50] # opcional
library(ggplot2)
library(scales)
g_tc <- ggplot(tab_trayectorias_tc, aes(x = edad, y = salario_trim, color = tipoPersonal)) +
geom_line(linewidth = 1.2) +
geom_point(size = 2, alpha = 0.6) +
labs(
title = "Trayectorias salariales por edad según tipo de contrato",
subtitle = "Media recortada al 95% (trimmed mean)",
x = "Edad",
y = "Salario promedio (Gs.)",
color = "Tipo de contrato"
) +
scale_y_continuous(labels = comma) +
theme_minimal(base_size = 13) +
theme(
legend.position = "top",
plot.title = element_text(face = "bold", size = 14),
plot.subtitle = element_text(size = 11)
)
g_tc
library(dplyr)
tab_trayectorias_ant <- FPdb %>%
filter(antiguedad >= 0, antiguedad <= 40, salario > 0) %>%
group_by(antiguedad, sexo) %>%
summarize(
salario_trim = mean(salario, trim = 0.05, na.rm = TRUE),
n = n(),
.groups = "drop"
) %>%
filter(n > 50) # opcional: eliminar antigüedades con pocos registros
library(ggplot2)
library(scales)
g_antiguedad <- ggplot(tab_trayectorias_ant, aes(x = antiguedad, y = salario_trim, color = sexo)) +
geom_line(linewidth = 1.2) +
geom_point(size = 2, alpha = 0.6) +
scale_color_manual(values = c("Hombres" = "#1f77b4", "Mujeres" = "#e377c2")) +
labs(
title = "Trayectorias salariales por antigüedad",
subtitle = "Media recortada al 95% (trimmed mean)",
x = "Años de antigüedad",
y = "Salario promedio (Gs.)",
color = "Sexo"
) +
scale_y_continuous(labels = comma) +
theme_minimal(base_size = 13) +
theme(
legend.position = "top",
plot.title = element_text(face = "bold", size = 14),
plot.subtitle = element_text(size = 11)
)
g_antiguedad