Texto texto texto
Demostrar que en la funcion publica las mujeres son mas en cantidad pero ganan en salarios medianos menos que los hombres
El artículo de Maldonado and Mendez (2021) 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)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ readr 2.1.5
## ✔ ggplot2 3.5.2 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(data.table)
##
## Adjuntando el paquete: 'data.table'
##
## The following objects are masked from 'package:lubridate':
##
## hour, isoweek, mday, minute, month, quarter, second, wday, week,
## yday, year
##
## The following object is masked from 'package:purrr':
##
## transpose
##
## The following objects are masked from 'package:dplyr':
##
## between, first, last
library(readr)
# variables=c("anio", "mes","descripcionEntidad" , "conceptoGasto", "codigoPersona", "sexo", "fechaIngreso", "tipoPersonal", "lugar","montoPresupuestado")
# FP2015ene=fread( "G:/Mi unidad/FUNPUBLICOS/nomina_2015-01.csv", select=variables )
# FP2016ene=fread( "G:/Mi unidad/FUNPUBLICOS/nomina_2016-01.csv", select=variables )
# FP2017ene=fread( "G:/Mi unidad/FUNPUBLICOS/nomina_2017-01.csv", select=variables )
# FP2018ene=fread( "G:/Mi unidad/FUNPUBLICOS/nomina_2018-01.csv", select=variables )
# FP2019ene=fread( "G:/Mi unidad/FUNPUBLICOS/nomina_2019-01.csv", select=variables )
# FP2020ene=fread( "G:/Mi unidad/FUNPUBLICOS/nomina_2020-01.csv", select=variables )
# FP2021ene=fread( "G:/Mi unidad/FUNPUBLICOS/nomina_2021-01.csv", select=variables )
# FP2022ene=fread( "G:/Mi unidad/FUNPUBLICOS/nomina_2022-01.csv", select=variables )
# FP2023ene=fread( "G:/Mi unidad/FUNPUBLICOS/nomina_2023-01.csv", select=variables )
# FP2024ene=fread( "G:/Mi unidad/FUNPUBLICOS/nomina_2024-01.csv", select=variables )
# FPcomp=bind_rows(FP2015ene, FP2016ene, FP2017ene, FP2018ene, FP2019ene, FP2020ene, FP2021ene, FP2022ene, FP2023ene, FP2024ene)
# nrow(FPcomp)
# Supongamos que tu dataframe grande se llama nominaFPcomp
#saveRDS(FPcomp, "G:/Mi unidad/FUNPUBLICOS/nominaFPcomp.rds")
#cargar la base compilada
FP=readRDS("G:/Mi unidad/FUNPUBLICOS/nominaFPcomp.rds")
names(FP)
## [1] "anio" "mes" "descripcionEntidad"
## [4] "conceptoGasto" "codigoPersona" "sexo"
## [7] "fechaIngreso" "tipoPersonal" "lugar"
## [10] "montoPresupuestado"
table(FP$anio, FP$mes)
##
## 1
## 2015 675462
## 2016 818260
## 2017 831389
## 2018 788311
## 2019 797796
## 2020 812335
## 2021 799352
## 2022 823671
## 2023 841450
## 2024 829138
library(dplyr)
FPcompsd <- FP %>%
group_by(anio, mes, codigoPersona, sexo,descripcionEntidad, fechaIngreso, tipoPersonal) %>%
summarize(
salario = sum(montoPresupuestado, na.rm = TRUE),
.groups = "drop"
) %>%
mutate(
fecha = as.Date(paste("01", mes, anio, sep="/"), format="%d/%m/%Y")
)
nrow(FPcompsd)
## [1] 2746814
cbind(table(FPcompsd$fecha, FPcompsd$tipoPersonal))
## COM CON PER
## 2015-01-01 113592 1970 36721 207515
## 2016-01-01 35827 2282 34178 213951
## 2017-01-01 33622 2610 34467 213261
## 2018-01-01 0 2647 29915 214633
## 2019-01-01 0 2967 27085 219077
## 2020-01-01 0 2713 33247 218951
## 2021-01-01 0 2771 39952 217856
## 2022-01-01 0 2767 46704 219370
## 2023-01-01 0 2491 46625 222203
## 2024-01-01 0 1608 41086 222150
Explorar valores extremos en los salarios
boxplot(salario ~ sexo, data = FPcompsd, col = "lightgray")
summary(FPcompsd$salario)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0 2784000 4369600 5017828 6419900 553311258
library(dplyr)
tab1 <- FPcompsd %>%
group_by(fecha, anio, sexo, tipoPersonal) %>%
filter(tipoPersonal!= "COM" & anio>2017 ) %>%
summarize(cantidad = n(),
.groups = "drop"
)
tab1
## # A tibble: 28 × 5
## fecha anio sexo tipoPersonal cantidad
## <date> <int> <chr> <chr> <int>
## 1 2018-01-01 2018 F CON 16917
## 2 2018-01-01 2018 F PER 110156
## 3 2018-01-01 2018 M CON 12998
## 4 2018-01-01 2018 M PER 104477
## 5 2019-01-01 2019 F CON 15358
## 6 2019-01-01 2019 F PER 112870
## 7 2019-01-01 2019 M CON 11727
## 8 2019-01-01 2019 M PER 106207
## 9 2020-01-01 2020 F CON 19482
## 10 2020-01-01 2020 F PER 112769
## # ℹ 18 more rows
library(ggplot2)
g1 <- ggplot(tab1, aes(x = fecha, y = cantidad, color = sexo, group = sexo)) +
geom_line(size = 1) +
geom_point(size = 2) +
scale_color_manual(values = c("M" = "steelblue", "F" = "salmon")) +
expand_limits(y = 0) + # fuerza que todos los paneles inicien en cero
labs(
x = "Fecha",
y = "Cantidad de funcionarios",
color = "Sexo",
title = "Evolución de la cantidad de funcionarios por sexo",
subtitle = "Paneles con la misma escala por tipo de personal"
) +
facet_wrap(~ tipoPersonal, scales = "fixed") + # escala única en todos los paneles
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(face = "bold", size = 14),
plot.subtitle = element_text(size = 12)
)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
g1
library(dplyr)
tab2 <- FPcompsd %>%
group_by(fecha, anio, sexo, tipoPersonal) %>%
filter(tipoPersonal!= "COM" & anio>2017 ) %>%
summarize(salariomed = median(salario, na.rm = TRUE),
.groups = "drop"
)
tab2
## # A tibble: 28 × 5
## fecha anio sexo tipoPersonal salariomed
## <date> <int> <chr> <chr> <dbl>
## 1 2018-01-01 2018 F CON 3570000
## 2 2018-01-01 2018 F PER 4814990
## 3 2018-01-01 2018 M CON 3000000
## 4 2018-01-01 2018 M PER 5146636
## 5 2019-01-01 2019 F CON 3600000
## 6 2019-01-01 2019 F PER 4946103
## 7 2019-01-01 2019 M CON 3298320
## 8 2019-01-01 2019 M PER 5297671
## 9 2020-01-01 2020 F CON 3650000
## 10 2020-01-01 2020 F PER 5479788
## # ℹ 18 more rows
library(ggplot2)
g2 <- ggplot(tab2, aes(x = fecha, y = salariomed, color = sexo, group = sexo)) +
geom_line(size = 1) +
geom_point(size = 2) +
scale_color_manual(values = c("M" = "steelblue", "F" = "salmon")) +
expand_limits(y = 0) + # fuerza que todos los paneles inicien en cero
labs(
x = "Fecha",
y = "Cantidad de funcionarios",
color = "Sexo",
title = "Evolución del salario promedio de funcionarios por sexo",
subtitle = "Paneles con la misma escala por tipo de personal"
) +
facet_wrap(~ tipoPersonal, scales = "fixed") + # escala única en todos los paneles
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(face = "bold", size = 14),
plot.subtitle = element_text(size = 12)
)
g2
```