La base de datos homogeneizada de precariedad.mundial puede
servir de base para el cálculo de un conjunto de indicadores
sociolaborales y busca simplificar la comparación entre paÃses. Para
procesar la base de datos primero se debe abrir
base_homogenea.RDS
como dataframe.
# Cargar la base de datos homogeneizada
base <- readRDS("~/GitHub/precariedad.mundial/base_homogenea.RDS")
A continuación se presentan ejemplos de uso para el procesamiento de los datos y elaboración de gráficos. Parte de estos resultados fueron presentados por nuestro grupo de trabajo aquà y aquÃ).
El dataframe permite caracterizar la estructura del mercado de
trabajo según la información sobre categorÃa ocupacional en la variable
en CATOCUP
(Cuentapropista, Patrón y Asalariado/a), el
tamaño del establecimiento productivo en TAMA
(Pequeño,
Mediano o Grande) y la complejidad en la calificación del puesto en la
variable CALIF
(Alta, Mediana, Baja). Vamos analizar ahora
la estructura del mercado de trabajo para la fuerza de trabajo
asalariada o cuentapropista del sector privado para todos los paÃses del
dataset utilizando estas variables.
Si se quiere analizar al sector privado se debe filtrar por
SECTOR
, que distingue sector público, privado y
trabajadoras/es del hogar (SD). Además quitamos del dataframe los casos
con datos no válidos en CALIF
o TAMA
y
generamos etiquetas para los perfiles ocupacionales creados.
base_grupos <- base %>%
filter(CALIF %in% c("Alta","Media","Baja")) %>%
filter(SECTOR == "Priv", !is.na(CALIF), !is.na(TAMA)) %>%
mutate(grupos = case_when(CATOCUP == "Cuenta propia" ~ paste0("Cuentapropista - ",CALIF),
TRUE ~ paste0(TAMA, " - ",CALIF)),
tamanio.calif = factor(grupos,
levels =
c("Cuentapropista - Baja",
"Cuentapropista - Media",
"Cuentapropista - Alta",
"Pequeño - Baja",
"Pequeño - Media",
"Pequeño - Alta",
"Mediano - Baja",
"Mediano - Media",
"Mediano - Alta",
"Grande - Baja",
"Grande - Media",
"Grande - Alta"
)))
Luego podemos estimar el peso de cada perfil ocupacional según el
entrecruzamiento de las variables CATOCUP
,
TAMA
y CALIF
, lo que nos da un total de 12
perfiles ocupacionales. Para calcular indicadores estadÃsticamente
sigfnicativos recordar siempre ponderar por WEIGHT
.
pesos_perfiles<- base_grupos %>%
group_by(PAIS,tamanio.calif) %>%
summarise(casos_pond = sum(WEIGHT,na.rm = T)) %>%
group_by(PAIS) %>%
mutate(particip.ocup= casos_pond/sum(casos_pond))
Por último graficamos información para todos los paÃses del set incluidos dentro de precariedad.mundial y presentamos los datos en un orden preestablecido buscando una mejor visualización.
# Define your color palette
azul <- colorspace::diverge_hcl(n = 12, h = c(255, 330), l = c(40, 90))[c(4, 2, 1)]
verde <- colorspace::diverge_hcl(n = 12, h = c(130, 43), c = 100, l = c(70, 90))[c(4, 2, 1)]
naranja <- colorspace::diverge_hcl(n = 12, h = c(130, 43), c = 100, l = c(70, 90))[c(10, 11, 12)]
rojo <- colorspace::diverge_hcl(n = 12, h = 14, c = 100, l = c(70, 90))[c(10, 11, 12)]
paleta <- c(rojo, azul, naranja, verde)
# Load and prepare data
Paises <- read.xlsx("~/GitHub/precariedad.mundial/Fuentes Complementarias/Prod y Salarios.xlsx", sheet = "Paises")
paises_orden <- Paises %>% select(PAIS = nombre.pais, region, Orden, COD.OCDE)
# Plotting
pesos_perfiles %>%
left_join(paises_orden) %>%
filter(! COD.OCDE %in% c("BOL", "ROU", "BGR")) %>%
ggplot(aes(x = reorder(PAIS, Orden), y = particip.ocup, fill = tamanio.calif, group = tamanio.calif,
label = scales::percent(particip.ocup, decimal.mark = ",", accuracy = 0.1))) +
geom_col(position = "stack", alpha = 0.9) + # Add transparency to the bars
geom_text(position = position_stack(vjust = 0.5), size = 3, color = "black") + # White text on bars
labs(
title = "Porcentaje sobre el empleo total según perfiles ocupacionales",
caption = "Fuente: Repositorio precariedad.mundial"
) +
theme_minimal(base_size = 18) + # Use a minimal theme
theme(
plot.title = element_text(color = "#333333", size = 22, face = "bold"),
plot.subtitle = element_text(color = "#555555", size = 16),
plot.caption = element_text(color = "#777777", size = 12, hjust = 1),
axis.title = element_blank(),
axis.text.x = element_text(angle = 45, hjust = 1, color = "#555555"),
axis.text.y = element_text(color = "#555555"),
legend.position = "right",
legend.direction = "vertical",
legend.title = element_text(size = 14),
panel.grid.major.y = element_line(color = "#dfe2e5"),
panel.grid.minor.y = element_blank(),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
plot.margin = margin(1, 1, 1, 1, "cm")
) +
scale_fill_manual(values = paleta) +
scale_y_continuous(labels = scales::percent) +
facet_grid(cols = vars(region), space = "free", scales = "free_x") +
guides(fill = guide_legend(title = "Tamaño - Calificación"))
En el gráfico pueden observase los rasgos tÃpicos de las estructuras del mercado de trabajo latinoamericanas. En los paÃses de América Latina (ubicados a la izquierda del gráfico) es notoriamente mayor el porcentaje del empleo en perfiles de calificación baja y media, dentro de establecimientos de tamaño pequeño. También se nota una mayor importancia del cuentapropismo de baja y media calificación. En contraste, los paÃses de mayor desarrollo productivo (ubicados hacia la derecha del gráfico) presentan una mayor participación del empleo en establecimientos grandes y puestos de alta calificación. En estos paÃses el empleo por cuenta propia tiene un peso mucho menor en la estructura del empleo.
El dataframe de precariedad.mundial tiene información sobre expresiones de precariedad laboral en términos de registración de la relación laboral, falta de aportes a la seguridad social, empleo temporario y empleo part-time involuntario. Para analizar la incidencia de éstas sobre la población asalariada se recomienda filtrar el dataframe para la población asalariada y eliminar casos no válidos para las variables de precariedad.
asalariados <- base_grupos %>%
filter(CATOCUP == "Asalariado") %>%
mutate(buen_empleo = ifelse(PRECAPT %in% c(0,NA) &
# PRECAREG%in% c(0,NA) &
PRECASEG%in% c(0,NA) &
PRECATEMP%in% c(0,NA),"Si","No"))
Luego agrupamos los datos por PAIS
y calculamos la
incidencia de cada una de las expresiones de precariedad laboral en la
fuerza de trabajo asalariada de cada mercado de trabajo a nivel
nacional.
expresiones_pais <- asalariados %>%
group_by(PAIS) %>%
summarise(part_time = sum(WEIGHT[PRECAPT==1],na.rm = T)/sum(WEIGHT[PRECAPT %in% 0:1],na.rm = T),
no_registro = sum(WEIGHT[PRECAREG==1],na.rm = T)/sum(WEIGHT[PRECAREG %in% 0:1],na.rm = T),
no_seg_social = sum(WEIGHT[PRECASEG==1],na.rm = T)/sum(WEIGHT[PRECASEG %in% 0:1],na.rm = T),
temporario = sum(WEIGHT[PRECATEMP==1],na.rm = T)/sum(WEIGHT[PRECATEMP %in% 0:1],na.rm = T),
) %>%
pivot_longer(cols = 2:ncol(.),names_to = "expresion",values_to = "valor")
Por último graficamos la incidencia de las expresiones de precariedad por pais.
expresiones_pais %>%
ggplot(aes(x = reorder(PAIS, valor), y = valor,
label = scales::percent(valor, decimal.mark = ",", accuracy = 0.1))) +
geom_col(position = "stack", fill = "#5bc0de", alpha = 0.5) + # Lighter blue and transparency
geom_text(position = position_stack(vjust = 0.5), size = 3, color = "black") +
labs(
title = "Porcentaje de asalariados con expresión de precariedad",
subtitle = "Expresiones evaluadas: | No registro | Falta de cobertura social | Part Time Involuntario | Empleo de duración determinada",
caption = "Fuente: Repositorio precariedad.mundial"
) +
theme_minimal(base_size = 18) + # Clean, minimalist theme with larger text
theme(
plot.title = element_text(color = "#333333", size = 22, face = "bold"), # Dark title
plot.subtitle = element_text(color = "#555555", size = 16), # Subtle subtitle color
plot.caption = element_text(color = "#777777", size = 12, hjust = 1), # Caption styling
axis.title = element_blank(),
axis.text.x = element_text(angle = 45, hjust = 1, color = "#555555"), # Grey axis labels
axis.text.y = element_text(color = "#555555"),
legend.position = "left",
legend.direction = "vertical",
legend.title = element_text(size = 14),
panel.grid.major.y = element_line(color = "#b0b0b0"), # Light grey grid lines
panel.grid.minor.y = element_blank(),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
plot.margin = margin(1, 1, 1, 1, "cm")
) +
facet_wrap(vars(expresion), ncol = 1) +
scale_y_continuous(labels = scales::percent)