Hola, mi nombre es Simón y este es un proyecto propio realizado a partir de las bases de datos de la Encuesta Suplementaria de Ingresos (ESI). Si bien el objetivo principal es analizar de manera descriptiva, inferencial y una interpretación sociológica, el foco está también en el uso de R como medio para obtener toda la información.
En este proyecto se llevó a cabo una manipulación de múltiples dataframe, filtrando valores perdidos, recodificando valores en distintas tipos de variables (cuantitativas, nominales e ordinales). Asimismo, se manipuló 6 bases de datos simultáneamente a través de bucles for, lo cual permitió optimizar el código con buenas prácticas de programación, esto incluye el asignar nuevos objetos que faciliten la legibilidad del código, y operaciones matemáticas para mejorar la presentación principalmente de los ingresos principales y su interación con otras variables.
El presente enfoque describe los ingresos de la Ocupación principal por sexo y las brechas de género dentro del mercado laboral chileno, tomando como punto de partida las principales estimaciones publicadas por esta encuesta. Por otra parte, señalar el uso de antecedentes previos para delimitar el estudios, tales como los informes de la Organización Internacional del Trabajo (OIT), como también datos del Grupo Banco Mundial, entre otros.
Cabe destacar que el presente proyecto está aún en proceso de su construcción, por lo que su estructura difiere del formato estándar de introducción, desarrollo, conclusión. Me gustaría mencionar que existen más variables en el análisis final, tales como los análisis entre Sectores Económicos (Primaria, Secundaria y Terciaria) según sexo e ingresos principales, como también el análisis según Grupo de Ocupación (Directivos, Profesionales, Técnicos, etc. ).
Hasta ahora, el contenido se divide en 4 secciones:
-Preparación de las bases de datos para su manipulación
-Análisis descriptivo y bivariado de la Encuesta más actual (2022)
-Evolución de las variables relevantes en el tiempo
Espero que les guste y mencionarles que cualquier retroalimentación es siempre bienvenida.
# Cargar paquetes necesarios
library(prettydoc)
library(tidyverse)
## -- Attaching core tidyverse packages ------------------------ tidyverse 2.0.0 --
## v dplyr 1.1.4 v readr 2.1.5
## v forcats 1.0.0 v stringr 1.5.1
## v ggplot2 3.5.1 v tibble 3.2.1
## v lubridate 1.9.2 v tidyr 1.3.1
## v purrr 1.0.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## i Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(haven)
library(wesanderson)
library(grid)
library(psych)
##
## Attaching package: 'psych'
##
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
library(forcats)
library(scales)
##
## Attaching package: 'scales'
##
## The following objects are masked from 'package:psych':
##
## alpha, rescale
##
## The following object is masked from 'package:purrr':
##
## discard
##
## The following object is masked from 'package:readr':
##
## col_factor
library(knitr)
library(kableExtra)
##
## Attaching package: 'kableExtra'
##
## The following object is masked from 'package:dplyr':
##
## group_rows
library(broom)
#Carga de las bases de datos
Necesitamos darle un formato adecuado a cada dataframe. Realizamos un bucle con lapply, leyendo cada archivo .sav, que empiece con esi, luego el año sin espacios y el .sav Asimismo, seleccionamos las columnas a utilizar en el análisis.
#Cargamos los datasets
años <- 2017:2022
data_list <- lapply(años, function(año) read_sav(paste0("esi", año, ".sav")))
# Se seleccionan las columnas relevantes: sexo, ocupación, ingresos, etc.
data_list <- lapply(data_list, function(df) {
df %>%
select(any_of(c("sexo", "ocup_ref", "ing_t_p", "c2_1_3", "cise", "categoria_ocupacion", "categoria_ocupacional"))) %>%
mutate(
ing_t_p = as.numeric(ing_t_p),
ocup_ref = as.factor(ocup_ref),
sexo = as.factor(sexo),
c2_1_3 = as.numeric(c2_1_3),
horas_mensuales = c2_1_3 * 4.33,
ingreso_hora = ifelse(ing_t_p > 0, ing_t_p / horas_mensuales, NA),
) %>% rename(cise = any_of(c("cise", "categoria_ocupacional", "categoria_ocupacion")))
})
data_list <- lapply(data_list, function(df){
df %>% mutate(cise = case_when(
cise %in% c(1) ~ 1,
cise %in% c(2) ~ 2,
cise %in% c(3,4) ~ 3,
cise %in% c(5,6) ~ 4,
cise %in% c(0, 7) ~ NA
))
})
data_list <- lapply(data_list, function(df) {
df %>% filter(!is.na(cise))
})
# Asignar de vuelta los dataframes a sus nombres originales
for (i in seq_along(años)) {
assign(paste0("esi_", años[i]), data_list[[i]])
}
# Seleccionar ocupados al menos 1 mes trabajando
ocupados_list <- lapply(data_list, function(df) {
df %>% filter(ocup_ref == "1")
})
ocupados_list <- lapply(ocupados_list, function(df) {
df %>% filter(ing_t_p <= 3000000)
})
ocupados_asalariados_list <- lapply(ocupados_list, function(df) {
df %>% filter(ocup_ref == "1") %>% filter(cise == 3)
})
# Crear bases de datos divididas por sexo
ocupados_hombres_list <- lapply(ocupados_list, function(df) {
df %>% filter(sexo == 1)
})
ocupados_hombres_list_asalariados <- lapply(ocupados_asalariados_list, function(df) {
df %>% filter(sexo == 1)
})
ocupados_mujeres_list <- lapply(ocupados_list, function(df) {
df %>% filter(sexo == 2)
})
ocupados_mujeres_list_asalariados <- lapply(ocupados_asalariados_list, function(df) {
df %>% filter(sexo == 2)
})
palette <- c("#4DAF4A", "#377EB8")
Tenemos cargadas cada base de datos, sin embargo, para representar los valores únicamente del año 2022, es necesario realizar un tratamiento personalizado para este período.
esi_2022_actual <- read_sav("esi2022.sav") %>%
select(sexo, ocup_ref, ing_t_p, tramo_edad, edad, region, cine, b1, categoria_ocupacion, r_p_rev4cl_caenes
) %>%
mutate(
ing_t_p = as.numeric(ing_t_p),
ocup_ref = as.factor(ocup_ref),
sexo = as.factor(sexo),
edad = as.numeric(edad),
tramo_edad = as.numeric(tramo_edad),
region = as.numeric(region),
cine = as.numeric(cine),
b1 = as.factor(b1),
categoria_ocupacion = as.numeric(categoria_ocupacion),
r_p_rev4cl_caenes = as.numeric(r_p_rev4cl_caenes)
)
esi_2022_ocupados <- esi_2022_actual %>% filter(ocup_ref == 1) %>% mutate(
sexo_categorias = case_when(
sexo == 1 ~ "Hombres",
sexo == 2 ~ "Mujeres"
)
)
esi_2022_ocupados_bivariado <- esi_2022_actual %>% filter(ocup_ref == 1) %>% mutate(
sexo_categorias = case_when(
sexo == 1 ~ "Hombres",
sexo == 2 ~ "Mujeres"
)
)
#Análisis Descriptivo ESI 2022
Cabe destacar que el análisis aún está en proceso de terminar, por lo que está sujeto a modificaciones.
Creamos las bases de datos segun sexo
ocupados_hombres_2022 <- esi_2022_ocupados %>% filter(sexo == "Hombres")
ocupados_mujeres_2022 <- esi_2022_ocupados %>% filter(sexo == "Mujeres")
moda_sexo <- names(sort(table(esi_2022_ocupados$sexo_categorias), decreasing = TRUE))[1]
kable(moda_sexo, caption = "Estadísticos Descriptivos de Ingresos Principales, ESI 2022")
x |
---|
Hombres |
sexo_counts <- esi_2022_ocupados %>%
count(sexo_categorias) %>%
mutate(prop = n / sum(n))
labels <- labs(title = "Proporción de hombres y mujeres ESI 2022",
caption = "Elaboración propia en base a INE, Encuesta Suplementaria de Ingresos, 2022.",
fill = "Sexo")
diseño_pie <- theme(
legend.position = "none",
plot.background = element_rect(fill = "#F5F5F5", color = NA), # Fondo del plot
panel.background = element_rect(fill = "#F5F5F5", color = NA), # Fondo del panel
panel.border = element_blank(), # Eliminar el borde del panel
panel.grid.major = element_blank(), # Eliminar la cuadrícula mayor
panel.grid.minor = element_blank(),
plot.title = element_text(color = "#015D3F", size = 15, hjust = 0.5, face = "bold"),
legend.title = element_text(color = "#015D3F", face = "bold"),
legend.text = element_text(color = "#015D3F", face = "bold", size = 6),
plot.caption = element_text(hjust = 0, color = "#015D3F", face = "italic"),
legend.background = element_rect(fill = "#F5F5F5", color = NA) # Fondo de la leyenda
)
ggplot(sexo_counts, aes(x = sexo_categorias, y = prop, fill = sexo_categorias)) +
geom_bar(stat = "identity") +
geom_text(aes(label = percent(prop, accuracy = 0.1)),
position = position_dodge(width = 0.7),
vjust = 8, # Ajuste vertical para las etiquetas
size = 4,
fontface = "bold",
color = "white") +
scale_fill_manual(values = palette)+
scale_y_continuous(labels = scales::percent_format()) +
labs(title = "Proporción de Hombres y Mujeres",
x = "Sexo",
y = "Proporción",
fill = "Sexo") +
theme_minimal() +
theme(
plot.background = element_rect(fill = "#F5F5F5", color = NA)
)
### Tramos de Ingresos Principales según Sueldos Mínimos(2022)
esi_2022_ocupados <- esi_2022_ocupados %>%
mutate(
ingreso_tramos = case_when(
ing_t_p <= 350000 ~ "1SM o menos",
ing_t_p > 350000 & ing_t_p <= 700000 ~ "Hasta 2SM",
ing_t_p > 700000 & ing_t_p <= 1050000~ "Hasta 3SM",
ing_t_p > 1050000 & ing_t_p <= 2100000~ "Hasta 6SM",
ing_t_p > 2100000 ~ "Más de 8SM (2.1millones+)"
)
) %>%
filter(!is.na(ingreso_tramos))
moda_tramos_ingresos <- names(sort(table(esi_2022_ocupados$ingreso_tramos), decreasing = TRUE))[1]
kable(moda_tramos_ingresos, caption = "Moda Ingreso según Sueldos Mínimos(SM)")
x |
---|
Hasta 2SM |
orden_ingreso_tramos <- c("1SM o menos","Hasta 2SM",
"Hasta 3SM",
"Hasta 6SM",
"Más de 8SM (2.1millones+)")
esi_2022_ocupados$ingreso_tramos <- factor(esi_2022_ocupados$ingreso_tramos, levels = orden_ingreso_tramos)
tc_tramos_ingresos <- table(esi_2022_ocupados$sexo_categorias, esi_2022_ocupados$ingreso_tramos)
tc_tramos_ingresos_relativa <- prop.table(tc_tramos_ingresos)
tc_tramos_ingresos_relativa%>%
as.data.frame() %>%
mutate(Freq = scales::percent(Freq, accuracy = 0.1)) %>%
kable("html", col.names = c("Sexo", "Ingreso en SM(Sueldos Minimos)", "Proporción"), align = "c") %>%
kable_styling(full_width = FALSE)
Sexo | Ingreso en SM(Sueldos Minimos) | Proporción |
---|---|---|
Hombres | 1SM o menos | 12.1% |
Mujeres | 1SM o menos | 16.2% |
Hombres | Hasta 2SM | 26.1% |
Mujeres | Hasta 2SM | 18.7% |
Hombres | Hasta 3SM | 8.6% |
Mujeres | Hasta 3SM | 5.3% |
Hombres | Hasta 6SM | 6.0% |
Mujeres | Hasta 6SM | 3.7% |
Hombres | Más de 8SM (2.1millones+) | 2.4% |
Mujeres | Más de 8SM (2.1millones+) | 0.9% |
esi_2022_ocupados <- esi_2022_ocupados %>% filter(ing_t_p <= 3500000)
esi_2022_ingresos_tramos_prop <- esi_2022_ocupados %>%
group_by(ingreso_tramos, sexo_categorias) %>%
summarise(count = n()) %>%
mutate(proporcion = count / sum(count)) %>%
ungroup()
## `summarise()` has grouped output by 'ingreso_tramos'. You can override using
## the `.groups` argument.
ggplot(esi_2022_ingresos_tramos_prop, aes(x = ingreso_tramos, y = proporcion, fill = sexo_categorias)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) + # Usar position = "dodge" para dividir las barras
geom_text(aes(label = percent(proporcion, accuracy = 0.1)),
position = position_dodge(width = 0.7),
vjust = -0.5, # Ajuste vertical para las etiquetas
size = 4,
fontface = "bold",
color = "black") + # Cambiar el color de las etiquetas a negro
labs(title = "Distribución según Ingreso en Tramos de Sueldos Mínimos (SM), por Sexo ESI 2022",
x = "Tramo de Ingreso",
y = "Proporción",
fill = "Sexo") +
scale_fill_manual(values = palette) + # Colores personalizados
scale_y_continuous(labels = percent_format(accuracy = 1)) + # Formato de etiquetas en Y como porcentaje
theme_minimal()
esi_2022_ocupados <- esi_2022_ocupados %>% mutate(cine_categorias = case_when(
cine %in% c(3,4) ~ "Primaria",
cine %in% c(5) ~ "Secundaria",
cine %in% c(6) ~ "Técnica",
cine %in% c(7) ~ "Universitaria",
cine %in% c(8,9) ~ "Postgrados",
cine %in% c(999, 1) ~ NA
))
esi_2022_ocupados <- esi_2022_ocupados %>%
filter(!is.na(cine_categorias))
moda_cine <- names(sort(table(esi_2022_ocupados$cine_categorias), decreasing = TRUE))[1]
kable(moda_cine, caption = "Estadísticos Descriptivos de Nivel Educativo, ESI 2022")
x |
---|
Secundaria |
orden_cine <- c("Primaria", "Secundaria", "Técnica", "Universitaria", "Postgrados")
esi_2022_ocupados$cine_categorias <- factor(esi_2022_ocupados$cine_categorias, levels = orden_cine)
tabla_contingencia_cine <- table(esi_2022_ocupados$cine_categorias, esi_2022_ocupados$sexo_categorias)
tabla_contingencia_cine_relativa <- prop.table(tabla_contingencia_cine)
tabla_contingencia_cine_relativa%>%
as.data.frame() %>%
mutate(Freq = scales::percent(Freq, accuracy = 0.1)) %>%
kable("html", col.names = c("Nivel Educativo", "Sexo", "Proporción"), align = "c") %>%
kable_styling(full_width = FALSE)
Nivel Educativo | Sexo | Proporción |
---|---|---|
Primaria | Hombres | 11.4% |
Secundaria | Hombres | 25.6% |
Técnica | Hombres | 6.0% |
Universitaria | Hombres | 10.8% |
Postgrados | Hombres | 1.2% |
Primaria | Mujeres | 6.3% |
Secundaria | Mujeres | 19.4% |
Técnica | Mujeres | 7.2% |
Universitaria | Mujeres | 11.0% |
Postgrados | Mujeres | 1.2% |
esi_2022_cine_prop <- esi_2022_ocupados %>%
group_by(cine_categorias, sexo_categorias) %>%
summarise(count = n()) %>%
mutate(prop = count / sum(count)) %>%
ungroup()
## `summarise()` has grouped output by 'cine_categorias'. You can override using
## the `.groups` argument.
ggplot(esi_2022_cine_prop, aes(x = cine_categorias, y = prop, fill = sexo_categorias)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = scales::percent(prop, accuracy = 0.1)),
position = position_dodge(width = 0.7),
vjust = 4,
size = 3,
fontface = "bold",
color = "white") +
labs(title = "Distribución de Nivel Educativo por Sexo ESI 2022",
x = "Tramo de Edad",
y = "Proporción",
fill = "Sexo") +
scale_fill_manual(values = palette) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
theme_minimal()
### Ingresos Principales
esi_2022_ingresos_filtrados <- esi_2022_ocupados %>% filter(ing_t_p <= 3500000)
#Datos con ing_t_p <= $3.500.000
estadisticas_ingresos <- esi_2022_ingresos_filtrados %>%
summarise(
Promedio = round(mean(ing_t_p, trim = 0.05, na.rm = TRUE)),
Mediana = round(median(ing_t_p, na.rm = TRUE)),
Minimo = min(ing_t_p, na.rm = TRUE),
Maximo = max(ing_t_p, na.rm = TRUE),
Asimetria = round(skew(ing_t_p, na.rm = TRUE), digits = 2),
Curtosis = round(kurtosi(ing_t_p, na.rm = TRUE), digits = 2),
Desv.Estandar = round(sd(ing_t_p, na.rm = TRUE))
)
estadisticas_ingresos_formateadas <- estadisticas_ingresos %>%
mutate(
Promedio = format(Promedio, scientific = FALSE),
Mediana = format(Mediana, scientific = FALSE),
Minimo = format(Minimo, scientific = FALSE),
Maximo = format(Maximo, scientific = FALSE),
Asimetria = format(Asimetria, scientific = FALSE),
Curtosis = format(Curtosis, scientific = FALSE),
Desv.Estandar = format(Desv.Estandar, scientific = FALSE)
)
kable(estadisticas_ingresos_formateadas, caption = "Estadísticos Descriptivos de Ingresos Principales, ESI 2022")
Promedio | Mediana | Minimo | Maximo | Asimetria | Curtosis | Desv.Estandar |
---|---|---|---|---|---|---|
543438 | 457369 | 0 | 3500000 | 2.22 | 6.42 | 508441 |
ggplot(esi_2022_ocupados, aes(x = ing_t_p)) +
geom_histogram(binwidth = 100000, fill = "blue", color = "black", alpha = 0.7) +
labs(title = "Distribución de Ingresos Principales",
x = "Ingresos Principales",
y = "Frecuencia") +
scale_x_continuous(labels = scales::comma_format()) +
theme_minimal()
ggplot(esi_2022_ocupados, aes(x = ing_t_p, fill = sexo_categorias)) +
geom_histogram(binwidth = 100000, position = "identity", alpha = 0.6) +
labs(title = "Distribución de Ingresos Principales por Sexo",
x = "Ingresos Principales",
y = "Frecuencia",
fill = "Sexo") +
scale_x_continuous(labels = scales::comma_format()) + # Formato de etiquetas con separador de miles
scale_fill_manual(values = palette)+
theme_minimal() +
theme(legend.position = "top")
#Nota: esi 2022 esta filtrada a máximo 3.5 millones de ingresos
estadisticos_edad<- esi_2022_ocupados %>%
summarise(
Promedio = round(mean(edad, trim = 0.05, na.rm = TRUE)),
Mediana = round(median(edad, na.rm = TRUE)),
Minimo = min(edad, na.rm = TRUE),
Maximo = max(edad, na.rm = TRUE),
Asimetria = round(skew(edad ,na.rm = TRUE), digits = 2),
Curtosis = round(kurtosi(edad, na.rm = TRUE), digits = 2),
Desv.Estandar = round(sd(edad, na.rm = TRUE))
)
kable(estadisticos_edad, caption = "Estadísticos Descriptivos de la Edad")
Promedio | Mediana | Minimo | Maximo | Asimetria | Curtosis | Desv.Estandar |
---|---|---|---|---|---|---|
44 | 44 | 15 | 91 | 0.17 | -0.81 | 14 |
ggplot(esi_2022_ocupados, aes(x = edad)) +
geom_histogram(binwidth = 5, fill = "lightblue", color = "white", aes(y = after_stat(count))) +
labs(title = "Distribución de Edades", x = "Edad", y = "Frecuencia") +
theme_minimal()
esi_2022_ocupados <- esi_2022_ocupados %>%
mutate(grupos_edad = case_when(
tramo_edad %in% c(1:2) ~ "15 a 19 años",
tramo_edad %in% c(3:4) ~ "25 a 34 años",
tramo_edad %in% c(5:6) ~ "35 a 44 años",
tramo_edad %in% c(7:8) ~ "45 a 54 años",
tramo_edad %in% c(9:10) ~ "55 a 64 años",
tramo_edad %in% c(11:12) ~ "65 años o más"
)) %>% filter(!is.na(grupos_edad))
moda_grupo_edad <- names(sort(table(esi_2022_ocupados$grupos_edad), decreasing = TRUE))[1]
kable(moda_grupo_edad, caption = "Moda Grupos de Edades:")
x |
---|
35 a 44 años |
orden_grupos_edad <- c("15 a 19 años", "25 a 34 años", "35 a 44 años", "45 a 54 años", "55 a 64 años", "65 años o más")
esi_2022_ocupados$grupos_edad<- factor(esi_2022_ocupados$grupos_edad, levels = orden_grupos_edad)
tc_tramos_edad <- table(esi_2022_ocupados$sexo_categorias, esi_2022_ocupados$grupos_edad)
tc_tramos_edad_relativa <- prop.table(tc_tramos_edad, margin = 2)
tc_tramos_edad_relativa%>%
as.data.frame() %>%
mutate(Freq = scales::percent(Freq, accuracy = 0.1)) %>%
kable("html", col.names = c("Sexo", "Tramos de Edad", "Proporción"), align = "c") %>%
kable_styling(full_width = FALSE)
Sexo | Tramos de Edad | Proporción |
---|---|---|
Hombres | 15 a 19 años | 58.0% |
Mujeres | 15 a 19 años | 42.0% |
Hombres | 25 a 34 años | 52.3% |
Mujeres | 25 a 34 años | 47.7% |
Hombres | 35 a 44 años | 51.4% |
Mujeres | 35 a 44 años | 48.6% |
Hombres | 45 a 54 años | 52.6% |
Mujeres | 45 a 54 años | 47.4% |
Hombres | 55 a 64 años | 58.7% |
Mujeres | 55 a 64 años | 41.3% |
Hombres | 65 años o más | 66.8% |
Mujeres | 65 años o más | 33.2% |
esi_2022_tramos_prop <- esi_2022_ocupados %>%
group_by(grupos_edad, sexo_categorias) %>%
summarise(count = n()) %>%
mutate(prop = count / sum(count)) %>%
ungroup()
## `summarise()` has grouped output by 'grupos_edad'. You can override using the
## `.groups` argument.
# Graficar barras apiladas
ggplot(esi_2022_tramos_prop, aes(x = grupos_edad, y = prop, fill = sexo_categorias)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = scales::percent(prop, accuracy = 1)),
position = position_dodge(width = 0.7),
vjust = 4,
size = 3,
fontface = "bold",
color = "white") +
labs(title = "Distribución de Tramos de Edad por Sexo",
x = "Tramo de Edad",
y = "Proporción",
fill = "Sexo") +
scale_fill_manual(values = palette) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
theme_minimal()+
theme(
plot.background = element_rect(fill = "#F5F5F5")
)
esi_2022_ocupados <- esi_2022_ocupados %>%
mutate(co_categorias = case_when(
categoria_ocupacion == 1 ~ "Empleadores",
categoria_ocupacion == 2 ~ "Trabajadores por Cuenta Propia",
categoria_ocupacion %in% c(3, 4) ~ "Asalariados",
categoria_ocupacion %in% c(5, 6) ~ "Personal de Servicio Doméstico",
categoria_ocupacion == 7 ~ NA
)) %>% filter(!is.na(co_categorias))
moda_categorias_ocupacion <- names(sort(table(esi_2022_ocupados$co_categorias), decreasing = TRUE))[1]
kable(moda_categorias_ocupacion, caption = "Categorías de Ocupación")
x |
---|
Asalariados |
orden_categorias_ocupacion <- c("Empleadores", "Trabajadores por Cuenta Propia", "Asalariados", "Personal de Servicio Doméstico")
esi_2022_ocupados$co_categorias <- factor(esi_2022_ocupados$co_categorias, levels = orden_categorias_ocupacion)
tc_categorias_ocupacion <- table(esi_2022_ocupados$co_categorias, esi_2022_ocupados$sexo_categorias)
tc_categorias_ocupacion_relativas <- prop.table(tc_categorias_ocupacion)
tc_categorias_ocupacion_relativas%>%
as.data.frame() %>%
mutate(Freq = scales::percent(Freq, accuracy = 0.1)) %>%
kable("html", col.names = c("Categoría de Ocupación", "Sexo", "Proporción"), align = "c") %>%
kable_styling(full_width = FALSE)
Categoría de Ocupación | Sexo | Proporción |
---|---|---|
Empleadores | Hombres | 2.3% |
Trabajadores por Cuenta Propia | Hombres | 12.9% |
Asalariados | Hombres | 39.8% |
Personal de Servicio Doméstico | Hombres | 0.1% |
Empleadores | Mujeres | 0.9% |
Trabajadores por Cuenta Propia | Mujeres | 10.1% |
Asalariados | Mujeres | 30.9% |
Personal de Servicio Doméstico | Mujeres | 3.0% |
esi_2022_categorias_prop <- esi_2022_ocupados %>%
group_by(co_categorias, sexo_categorias) %>%
summarise(count = n()) %>%
mutate(prop = count / sum(count)) %>%
ungroup()
## `summarise()` has grouped output by 'co_categorias'. You can override using the
## `.groups` argument.
ggplot(esi_2022_categorias_prop, aes(x = co_categorias, y = prop, fill = sexo_categorias)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = scales::percent(prop, accuracy = 1)),
position = position_dodge(width = 0.7),
vjust = 4,
size = 4,
fontface = "bold",
color = "white") +
labs(title = "Distribución de Categorías de Ocupación por Sexo",
x = "Categoría de Ocupación",
y = "Proporción",
fill = "Sexo") +
scale_fill_manual(values = palette) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
theme_minimal()
esi_2022_ocupados <- esi_2022_ocupados %>%
mutate(macrozona_categorias = case_when(
region %in% c(1, 15, 2) ~ "Norte Grande",
region %in% c(3, 4) ~ "Norte Chico",
region %in% c(5, 6, 7) ~ "Centro",
region %in% c(13) ~ "Metropolitana",
region %in% c(16, 8) ~ "Centro Sur",
region %in% c(9, 10, 14) ~ "Sur",
region %in% c(11, 12) ~ "Austral"
)) %>% filter(!is.na(macrozona_categorias))
moda_macrozona <- names(sort(table(esi_2022_ocupados$macrozona_categorias), decreasing = TRUE))[1]
kable(moda_macrozona, caption = "Estadísticos Descriptivos de la Edad")
x |
---|
Centro |
orden_macrozona <- c("Norte Grande", "Norte Chico", "Centro", "Metropolitana", "Centro Sur", "Sur", "Austral")
esi_2022_ocupados$macrozona_categorias <- factor(esi_2022_ocupados$macrozona_categorias, levels = orden_macrozona)
tc_macrozona<- table(esi_2022_ocupados$macrozona_categorias, esi_2022_ocupados$sexo_categorias)
tc_macrozona_relativas <- prop.table(tc_macrozona)
tc_macrozona_relativas%>%
as.data.frame() %>%
mutate(Freq = scales::percent(Freq, accuracy = 0.1)) %>%
kable("html", col.names = c("Macrozona", "Sexo", "Proporción"), align = "c") %>%
kable_styling(full_width = FALSE)
Macrozona | Sexo | Proporción |
---|---|---|
Norte Grande | Hombres | 5.6% |
Norte Chico | Hombres | 5.3% |
Centro | Hombres | 13.8% |
Metropolitana | Hombres | 10.7% |
Centro Sur | Hombres | 8.2% |
Sur | Hombres | 8.3% |
Austral | Hombres | 3.2% |
Norte Grande | Mujeres | 4.7% |
Norte Chico | Mujeres | 4.2% |
Centro | Mujeres | 10.9% |
Metropolitana | Mujeres | 9.1% |
Centro Sur | Mujeres | 6.6% |
Sur | Mujeres | 6.5% |
Austral | Mujeres | 2.9% |
esi_2022_macrozona_prop <- esi_2022_ocupados %>%
group_by(macrozona_categorias, sexo_categorias) %>%
summarise(count = n()) %>%
mutate(prop = count / sum(count)) %>%
ungroup()
## `summarise()` has grouped output by 'macrozona_categorias'. You can override
## using the `.groups` argument.
ggplot(esi_2022_macrozona_prop, aes(x = macrozona_categorias, y = prop, fill = sexo_categorias)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = scales::percent(prop, accuracy = 1)),
position = position_dodge(width = 0.7),
vjust = 4,
size = 3,
fontface = "bold",
color = "white") +
labs(title = "Distribución según Macrozona y Sexo",
x = "Macrozonas",
y = "Proporción",
fill = "Sexo") +
scale_fill_manual(values = palette) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
theme_minimal()
esi_2022_ocupados <- esi_2022_ocupados %>%
mutate(Sector_Economico = case_when(
r_p_rev4cl_caenes %in% c(1, 2) ~ "Primaria",
r_p_rev4cl_caenes %in% c(3, 4, 5 , 6) ~ "Secundaria",
r_p_rev4cl_caenes %in% c(7:21) ~ "Terciaria"
)) %>% filter(!is.na(Sector_Economico))
moda_sector_economico <- names(sort(table(esi_2022_ocupados$Sector_Economico), decreasing = TRUE))[1]
kable(moda_sector_economico, caption = "Moda Sector Económico, ESI 2022")
x |
---|
Terciaria |
orden_sector <- c("Primaria", "Secundaria", "Terciaria")
esi_2022_ocupados$Sector_Economico <- factor(esi_2022_ocupados$Sector_Economico, levels = orden_sector)
tc_sector_economico <- table(esi_2022_ocupados$Sector_Economico, esi_2022_ocupados$sexo_categorias)
tc_sector_economico_relativas <- prop.table(tc_sector_economico)
tc_sector_economico_relativas%>%
as.data.frame() %>%
mutate(Freq = scales::percent(Freq, accuracy = 0.1)) %>%
kable("html", col.names = c("Sector Económico", "Sexo", "Proporción"), align = "c") %>%
kable_styling(full_width = FALSE)
Sector Económico | Sexo | Proporción |
---|---|---|
Primaria | Hombres | 9.3% |
Secundaria | Hombres | 15.1% |
Terciaria | Hombres | 30.7% |
Primaria | Mujeres | 2.4% |
Secundaria | Mujeres | 4.4% |
Terciaria | Mujeres | 38.1% |
esi_2022_sector_prop <- esi_2022_ocupados %>%
group_by(Sector_Economico, sexo_categorias) %>%
summarise(count = n()) %>%
mutate(prop = count / sum(count)) %>%
ungroup()
## `summarise()` has grouped output by 'Sector_Economico'. You can override using
## the `.groups` argument.
ggplot(esi_2022_sector_prop, aes(x = Sector_Economico, y = prop, fill = sexo_categorias)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7) +
geom_text(aes(label = scales::percent(prop, accuracy = 1)),
position = position_dodge(width = 0.7),
vjust = 5,
size = 4,
fontface = "bold",
color = "white") +
labs(title = "Distribución según Sector Económico y Sexo",
x = "Sectores Economicos",
y = "Proporción",
fill = "Sexo") +
scale_fill_manual(values = palette) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
theme_minimal()
Si bien la base de datos ya posee las variables a utilizar, es necesario realizar algunas recodificaciones para poder construir los gráficos
esi_2022_ocupados_bivariado <- esi_2022_ocupados_bivariado %>%
mutate(macrozona = case_when(
region %in% c(1, 15, 2) ~ 1,
region %in% c(3, 4) ~ 2,
region %in% c(5, 6, 7) ~ 3,
region %in% c(13) ~ 4,
region %in% c(16, 8) ~ 5,
region %in% c(9, 10, 14) ~ 6,
region %in% c(11, 12) ~ 7
))
ocupados_hombres_2022 <- esi_2022_ocupados_bivariado %>% filter(sexo == 1)
ocupados_mujeres_2022 <- esi_2022_ocupados_bivariado %>% filter(sexo == 2)
esi_2022_ocupados_bivariado <- esi_2022_ocupados_bivariado %>% filter(!is.na(macrozona))
ingreso_mujeres_macrozona <- ocupados_mujeres_2022 %>%
group_by(macrozona) %>%
reframe(ingreso_medio_mujeres = mean(ing_t_p, na.rm = TRUE)) %>%
ungroup()
View(ingreso_mujeres_macrozona)
ingreso_hombres_macrozona <- ocupados_hombres_2022 %>%
group_by(macrozona) %>%
reframe(ingreso_medio_hombres = mean(ing_t_p, na.rm = TRUE)) %>%
ungroup()
media_mujeres_macrozona <- ingreso_mujeres_macrozona$ingreso_medio_mujeres
media_hombres_macrozona <- ingreso_hombres_macrozona$ingreso_medio_hombres
ingreso_macrozona_hombres_miles2022 <- round(media_hombres_macrozona/ 1000)
ingreso_macrozona_mujeres_miles2022 <- round(media_mujeres_macrozona / 1000)
View(ingreso_macrozona_hombres_miles2022)
brecha_genero_macrozona <- round((1- media_mujeres_macrozona/ media_hombres_macrozona) * 100, digits = 2)
ingresos_por_macrozona <- data.frame(
Macrozona = orden_macrozona,
Promedio_Hombres = ingreso_macrozona_hombres_miles2022,
Promedio_Mujeres = ingreso_macrozona_mujeres_miles2022,
Brecha_Salarial = brecha_genero_macrozona
)
# Definir orden personalizado de regiones
orden_macrozona <- c("Norte Grande", "Norte Chico", "Centro", "Metropolitana", "Centro Sur", "Sur", "Austral")
# Transformar los resultados en un dataframe largo para graficar
ingreso_macrozona_long <- ingresos_por_macrozona %>%
pivot_longer(cols = c(Promedio_Hombres, Promedio_Mujeres),
names_to = "sexo",
values_to = "ingreso_medio") %>%
mutate(sexo = recode(sexo,
"Promedio_Hombres" = "Hombres",
"Promedio_Mujeres" = "Mujeres"))
ingreso_macrozona_long$Macrozona <- factor(ingreso_macrozona_long$Macrozona, levels = orden_macrozona)
ingreso_macrozona_nortegrande <- ingreso_macrozona_long %>%
filter(Macrozona == "Norte Grande")
ggplot(ingreso_macrozona_long, aes(x = Macrozona, y = ingreso_medio, fill = sexo)) +
geom_bar(stat = "identity", position = "dodge") +
geom_text(aes(label = ingreso_medio),
position = position_dodge(width = 0.9),
vjust = 3.0,
hjust = 0.5,
color = "white",
fontface = "bold",
size = 4) +
geom_text(data = distinct(ingreso_macrozona_long, Macrozona, .keep_all = TRUE),
aes(x = Macrozona,
label = paste0(Brecha_Salarial, "%")),
color = "#1F1B1C",
size = 4,
fontface = "italic",
vjust = -0.5) +
annotate("text", x = Inf, y = -5, label = "Brecha de Género (%)",
hjust = 1.1, vjust = 2, size = 3, color = "#1F1B1C", fontface = "italic") +
geom_text(data = distinct(ingreso_macrozona_nortegrande, Macrozona, .keep_all = TRUE),
aes(label = "*"),
color = "red", fontface = "bold", size = 6, vjust = -0.5) +
labs(title = "Gráfico 5: Ingreso medio de las Personas Ocupadas, por sexo y brecha de género,
según Macrozona, 2022",
x = "Grupos de Edad",
y = "Ingreso medio mensual (miles de pesos)",
caption = "Fuente: Elaboración propia en base a INE, Encuesta Suplementaria de Ingresos, 2017-2022.") +
scale_fill_manual(values = palette) +
scale_y_continuous(labels = scales::comma)+
theme_minimal() +
theme(plot.background = element_rect(fill = "#F5F5F5"), # Cambiar el fondo a gris claro
panel.grid.major = element_blank(), # Eliminar la cuadrícula mayor
panel.grid.minor = element_blank(),
panel.grid.major.y = element_line(color = "#D3D3D3"),# Eliminar la cuadrícula menor
plot.title = element_text(color = "#015D3F", size = 13, hjust = 0.5, face = "bold"), # Color y tamaño del título
axis.text = element_text(color = "#015D3F"), # Color de texto de los ejes
axis.text.x = element_text(face = "bold"),
axis.text.y = element_text(face = "bold"),
axis.title.x = element_text(color = "#015D3F", face = "bold", size = 8), # Color de texto del eje x
axis.title.y = element_text(color = "#015D3F", face = "bold", size = 8),
legend.title = element_text(color = "#015D3F", face = "bold"),
legend.text = element_text(color = "#015D3F", face = "bold"),
plot.caption = element_text(hjust = 0, color = "#015D3F", face = "italic"))
###Tramos de Edad
esi_2022_ocupados <- esi_2022_ocupados %>%
mutate(tramo_edad = case_when(
tramo_edad %in% c(1:2) ~ 1,
tramo_edad %in% c(3:4) ~ 2,
tramo_edad %in% c(5:6) ~ 3,
tramo_edad %in% c(7:8) ~ 4,
tramo_edad %in% c(9:10) ~ 5,
tramo_edad %in% c(11:12) ~ 6
)) %>% filter(!is.na(tramo_edad))
ocupados_hombres_2022 <- esi_2022_ocupados %>% filter(sexo == 1)
ocupados_mujeres_2022 <- esi_2022_ocupados %>% filter(sexo == 2)
ingreso_hombres_edad <- ocupados_hombres_2022 %>%
group_by(tramo_edad) %>%
reframe(ingreso_medio_hombres = mean(ing_t_p, na.rm = TRUE)) %>%
ungroup()
ingreso_mujeres_edad <- ocupados_mujeres_2022 %>%
group_by(tramo_edad) %>%
summarise(ingreso_medio_mujeres = mean(ing_t_p, na.rm = TRUE)) %>%
ungroup()
media_mujeres_edad <- ingreso_mujeres_edad$ingreso_medio_mujeres
media_hombres_edad <- ingreso_hombres_edad$ingreso_medio_hombres
ingreso_edad_hombres_miles2022 <- round(media_hombres_edad/ 1000)
ingreso_edad_mujeres_miles2022 <- round(media_mujeres_edad / 1000)
brecha_genero_edad <- round((1- media_mujeres_edad/ media_hombres_edad) * 100, digits = 2)
orden_tramos <- c(
"15 a 24 años", "25 a 34 años", "35 a 44 años*",
"45 a 54 años", "55 a 64 años", "65 años o más"
)
ingresos_tramos_edad <- data.frame(
Tramos_edad = orden_tramos,
Promedio_Hombres = ingreso_edad_hombres_miles2022,
Promedio_Mujeres = ingreso_edad_mujeres_miles2022,
Brecha_Salarial = brecha_genero_edad
)
# Transformar los resultados en un dataframe largo para graficar
ingreso_edad_long <- ingresos_tramos_edad %>%
pivot_longer(cols = c(Promedio_Hombres, Promedio_Mujeres),
names_to = "sexo",
values_to = "ingreso_medio") %>%
mutate(sexo = recode(sexo,
"Promedio_Hombres" = "Hombres",
"Promedio_Mujeres" = "Mujeres"))
# Convertir la columna 'region' en un factor con el orden deseado
ingreso_edad_long$Tramos_edad <- factor(ingreso_edad_long$Tramos_edad, levels = orden_tramos)
ingreso_35_44 <- ingreso_edad_long %>%
filter(Tramos_edad == "35 a 44 años")
ggplot(ingreso_edad_long, aes(x = Tramos_edad, y = ingreso_medio, fill = sexo)) +
geom_bar(stat = "identity", position = "dodge") +
geom_text(aes(label = ingreso_medio),
position = position_dodge(width = 0.9),
vjust = 3.0,
hjust = 0.5,
color = "white",
fontface = "bold",
size = 3) +
geom_text(data = distinct(ingreso_edad_long, Tramos_edad, .keep_all = TRUE),
aes(x = Tramos_edad,
label = paste0(Brecha_Salarial, "%")),
color = "#1F1B1C",
size = 3,
fontface = "italic",
vjust = -0.5) +
annotate("text", x = Inf, y = -5, label = "Brecha de Género (%)",
hjust = 1.1, vjust = 2, size = 3, color = "#1F1B1C", fontface = "italic") +
geom_text(data = distinct(ingreso_35_44, Tramos_edad, .keep_all = TRUE),
aes(label = "*"),
color = "red", fontface = "bold", size = 5, vjust = -0.5) +
labs(title = "Gráfico 5: Ingreso medio de las Personas Ocupadas, por sexo y brecha de género,
según grupo de edad, 2022",
x = "Grupos de Edad",
y = "Ingreso medio mensual (miles de pesos)",
caption = "Fuente: Elaboración propia en base a INE, Encuesta Suplementaria de Ingresos, 2017-2022.") +
scale_fill_manual(values = palette) +
scale_y_continuous(labels = scales::comma)+
theme_minimal() +
theme(plot.background = element_rect(fill = "#F5F5F5"), # Cambiar el fondo a gris claro
panel.grid.major = element_blank(), # Eliminar la cuadrícula mayor
panel.grid.minor = element_blank(),
panel.grid.major.y = element_line(color = "#D3D3D3"),# Eliminar la cuadrícula menor
plot.title = element_text(color = "#015D3F", size = 13, hjust = 0.5, face = "bold"), # Color y tamaño del título
axis.text = element_text(color = "#015D3F"), # Color de texto de los ejes
axis.text.x = element_text(face = "bold"),
axis.text.y = element_text(face = "bold"),
axis.title.x = element_text(color = "#015D3F", face = "bold", size = 8), # Color de texto del eje x
axis.title.y = element_text(color = "#015D3F", face = "bold", size = 8),
legend.title = element_text(color = "#015D3F", face = "bold"),
legend.text = element_text(color = "#015D3F", face = "bold"),
plot.caption = element_text(hjust = 0, color = "#015D3F", face = "italic"))
### Categoría Ocupación
Se realizó un análisis bivariado que permite plantear si la diferencia de ingresos según sexo y las categorías de ocupación es significativa a través de un Análisis de Varianzas (ANOVA en inglés). Asimismo, a través del test posthoc TukeyHSD, podemos verificar qué categorías de ocupación son significativas las diferencias en detalle.
Cabe destacar que el número de hombres que realizan trabajos domésticos es ínfima en comparación a las mujeres (41 vs 1044 respectivamente), por lo que su brecha de género no es representativa necesariamente de la realidad, por lo que el ANOVA también puede estar alterado, junto al TukeyHSD.
esi_2022_ocupados_bivariado <- esi_2022_ocupados_bivariado %>%
mutate(co_categorias = case_when(
categoria_ocupacion == 1 ~ "Empleadores",
categoria_ocupacion == 2 ~ "Trabajadores por Cuenta Propia",
categoria_ocupacion == 3 ~ "Asalariados",
categoria_ocupacion == 4 ~ "Personal de Servicio Doméstico"
)) %>% filter(!is.na(co_categorias))
table(esi_2022_ocupados_bivariado$co_categorias)
##
## Asalariados Empleadores
## 19862 1208
## Personal de Servicio Doméstico Trabajadores por Cuenta Propia
## 5276 8163
tabla_frecuencia <- table(esi_2022_ocupados_bivariado$sexo_categorias, esi_2022_ocupados_bivariado$co_categorias)
knitr::kable(tabla_frecuencia, caption = "Tabla de frecuencia de sexo vs categoría de ocupación")
Asalariados | Empleadores | Personal de Servicio Doméstico | Trabajadores por Cuenta Propia | |
---|---|---|---|---|
Hombres | 12175 | 863 | 2029 | 4591 |
Mujeres | 7687 | 345 | 3247 | 3572 |
ocupados_hombres_2022 <- esi_2022_ocupados_bivariado %>% select(co_categorias, sexo_categorias, ing_t_p) %>% filter(sexo_categorias == "Hombres")
ocupados_mujeres_2022 <- esi_2022_ocupados_bivariado %>% select(co_categorias, sexo_categorias, ing_t_p) %>% filter(sexo_categorias == "Mujeres")
ingreso_hombres_sector <- ocupados_hombres_2022 %>%
group_by(co_categorias) %>%
reframe(ingreso_medio_hombres = mean(ing_t_p, na.rm = TRUE)) %>%
ungroup()
View(ingreso_hombres_sector)
ingreso_mujeres_sector <- ocupados_mujeres_2022 %>%
group_by(co_categorias) %>%
summarise(ingreso_medio_mujeres = mean(ing_t_p, na.rm = TRUE)) %>%
ungroup()
media_mujeres_sector <- ingreso_mujeres_sector$ingreso_medio_mujeres
media_hombres_sector <- ingreso_hombres_sector$ingreso_medio_hombres
ingreso_sector_hombres_miles2022 <- round(media_hombres_sector/ 1000)
ingreso_sector_mujeres_miles2022 <- round(media_mujeres_sector / 1000)
brecha_genero_sector <- round((1- media_mujeres_sector/ media_hombres_sector) * 100, digits = 2)
esi_2022_ocupados$sexo <- as.factor(esi_2022_ocupados$sexo)
esi_2022_ocupados$categoria_ocupacion <- as.factor(esi_2022_ocupados$categoria_ocupacion)
orden_sector <- c("Empleadores", "Trabajadores por Cuenta Propia", "Asalariados", "Personal de Servicio Doméstico" )
esi_2022_ocupados_bivariado$co_categorias<- factor(esi_2022_ocupados_bivariado$co_categorias, levels = orden_sector)
esi_2022_ocupados_bivariado$sexo_categorias <- factor(esi_2022_ocupados_bivariado$sexo_categorias)
esi_2022_ocupados_bivariado$co_categorias <- factor(esi_2022_ocupados_bivariado$co_categorias)
View(ingreso_sector_hombres_miles2022)
# Realizar el ANOVA de dos vías
anova_result <- aov(ing_t_p ~ sexo_categorias * co_categorias, data = esi_2022_ocupados_bivariado)
# Ver los resultados del ANOVA
anova_result
## Call:
## aov(formula = ing_t_p ~ sexo_categorias * co_categorias, data = esi_2022_ocupados_bivariado)
##
## Terms:
## sexo_categorias co_categorias sexo_categorias:co_categorias
## Sum of Squares 2.165292e+14 1.868224e+15 2.641842e+13
## Deg. of Freedom 1 3 3
## Residuals
## Sum of Squares 2.144469e+16
## Deg. of Freedom 34501
##
## Residual standard error: 788395.4
## Estimated effects may be unbalanced
# Realizar un test post-hoc si es necesario
posthoc_result <- TukeyHSD(anova_result)
# Ver los resultados del test post-hoc
posthoc_result
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = ing_t_p ~ sexo_categorias * co_categorias, data = esi_2022_ocupados_bivariado)
##
## $sexo_categorias
## diff lwr upr p adj
## Mujeres-Hombres -159984.1 -176784.2 -143184.1 0
##
## $co_categorias
## diff
## Trabajadores por Cuenta Propia-Empleadores -1071537.4
## Asalariados-Empleadores -765742.1
## Personal de Servicio Doméstico-Empleadores -491978.4
## Asalariados-Trabajadores por Cuenta Propia 305795.3
## Personal de Servicio Doméstico-Trabajadores por Cuenta Propia 579559.0
## Personal de Servicio Doméstico-Asalariados 273763.7
## lwr
## Trabajadores por Cuenta Propia-Empleadores -1133975.3
## Asalariados-Empleadores -825762.7
## Personal de Servicio Doméstico-Empleadores -556580.9
## Asalariados-Trabajadores por Cuenta Propia 279166.6
## Personal de Servicio Doméstico-Trabajadores por Cuenta Propia 543780.7
## Personal de Servicio Doméstico-Asalariados 242393.7
## upr p adj
## Trabajadores por Cuenta Propia-Empleadores -1009099.5 0
## Asalariados-Empleadores -705721.4 0
## Personal de Servicio Doméstico-Empleadores -427375.9 0
## Asalariados-Trabajadores por Cuenta Propia 332424.0 0
## Personal de Servicio Doméstico-Trabajadores por Cuenta Propia 615337.3 0
## Personal de Servicio Doméstico-Asalariados 305133.7 0
##
## $`sexo_categorias:co_categorias`
## diff
## Mujeres:Empleadores-Hombres:Empleadores -402509.88
## Hombres:Trabajadores por Cuenta Propia-Hombres:Empleadores -1137185.78
## Mujeres:Trabajadores por Cuenta Propia-Hombres:Empleadores -1305433.50
## Hombres:Asalariados-Hombres:Empleadores -841832.50
## Mujeres:Asalariados-Hombres:Empleadores -984179.21
## Hombres:Personal de Servicio Doméstico-Hombres:Empleadores -501067.36
## Mujeres:Personal de Servicio Doméstico-Hombres:Empleadores -758829.57
## Hombres:Trabajadores por Cuenta Propia-Mujeres:Empleadores -734675.89
## Mujeres:Trabajadores por Cuenta Propia-Mujeres:Empleadores -902923.62
## Hombres:Asalariados-Mujeres:Empleadores -439322.62
## Mujeres:Asalariados-Mujeres:Empleadores -581669.33
## Hombres:Personal de Servicio Doméstico-Mujeres:Empleadores -98557.48
## Mujeres:Personal de Servicio Doméstico-Mujeres:Empleadores -356319.69
## Mujeres:Trabajadores por Cuenta Propia-Hombres:Trabajadores por Cuenta Propia -168247.73
## Hombres:Asalariados-Hombres:Trabajadores por Cuenta Propia 295353.28
## Mujeres:Asalariados-Hombres:Trabajadores por Cuenta Propia 153006.56
## Hombres:Personal de Servicio Doméstico-Hombres:Trabajadores por Cuenta Propia 636118.42
## Mujeres:Personal de Servicio Doméstico-Hombres:Trabajadores por Cuenta Propia 378356.20
## Hombres:Asalariados-Mujeres:Trabajadores por Cuenta Propia 463601.00
## Mujeres:Asalariados-Mujeres:Trabajadores por Cuenta Propia 321254.29
## Hombres:Personal de Servicio Doméstico-Mujeres:Trabajadores por Cuenta Propia 804366.14
## Mujeres:Personal de Servicio Doméstico-Mujeres:Trabajadores por Cuenta Propia 546603.93
## Mujeres:Asalariados-Hombres:Asalariados -142346.71
## Hombres:Personal de Servicio Doméstico-Hombres:Asalariados 340765.14
## Mujeres:Personal de Servicio Doméstico-Hombres:Asalariados 83002.93
## Hombres:Personal de Servicio Doméstico-Mujeres:Asalariados 483111.85
## Mujeres:Personal de Servicio Doméstico-Mujeres:Asalariados 225349.64
## Mujeres:Personal de Servicio Doméstico-Hombres:Personal de Servicio Doméstico -257762.21
## lwr
## Mujeres:Empleadores-Hombres:Empleadores -554715.7
## Hombres:Trabajadores por Cuenta Propia-Hombres:Empleadores -1225842.4
## Mujeres:Trabajadores por Cuenta Propia-Hombres:Empleadores -1396069.0
## Hombres:Asalariados-Hombres:Empleadores -926006.5
## Mujeres:Asalariados-Hombres:Empleadores -1069964.3
## Hombres:Personal de Servicio Doméstico-Hombres:Empleadores -598177.7
## Mujeres:Personal de Servicio Doméstico-Hombres:Empleadores -850343.5
## Hombres:Trabajadores por Cuenta Propia-Mujeres:Empleadores -868070.1
## Mujeres:Trabajadores por Cuenta Propia-Mujeres:Empleadores -1037641.2
## Hombres:Asalariados-Mujeres:Empleadores -569780.6
## Mujeres:Asalariados-Mujeres:Empleadores -713172.6
## Hombres:Personal de Servicio Doméstico-Mujeres:Empleadores -237713.6
## Mujeres:Personal de Servicio Doméstico-Mujeres:Empleadores -491629.7
## Mujeres:Trabajadores por Cuenta Propia-Hombres:Trabajadores por Cuenta Propia -221560.1
## Hombres:Asalariados-Hombres:Trabajadores por Cuenta Propia 253968.6
## Mujeres:Asalariados-Hombres:Trabajadores por Cuenta Propia 108436.4
## Hombres:Personal de Servicio Doméstico-Hombres:Trabajadores por Cuenta Propia 572417.3
## Mujeres:Personal de Servicio Doméstico-Hombres:Trabajadores por Cuenta Propia 323563.8
## Hombres:Asalariados-Mujeres:Trabajadores por Cuenta Propia 418131.4
## Mujeres:Asalariados-Mujeres:Trabajadores por Cuenta Propia 272867.3
## Hombres:Personal de Servicio Doméstico-Mujeres:Trabajadores por Cuenta Propia 737938.5
## Mujeres:Personal de Servicio Doméstico-Mujeres:Trabajadores por Cuenta Propia 488664.3
## Mujeres:Asalariados-Hombres:Asalariados -177157.3
## Hombres:Personal de Servicio Doméstico-Hombres:Asalariados 283466.7
## Mujeres:Personal de Servicio Doméstico-Hombres:Asalariados 35806.7
## Hombres:Personal de Servicio Doméstico-Mujeres:Asalariados 423472.0
## Mujeres:Personal de Servicio Doméstico-Mujeres:Asalariados 175336.7
## Mujeres:Personal de Servicio Doméstico-Hombres:Personal de Servicio Doméstico -325383.4
## upr
## Mujeres:Empleadores-Hombres:Empleadores -250304.11
## Hombres:Trabajadores por Cuenta Propia-Hombres:Empleadores -1048529.16
## Mujeres:Trabajadores por Cuenta Propia-Hombres:Empleadores -1214798.01
## Hombres:Asalariados-Hombres:Empleadores -757658.45
## Mujeres:Asalariados-Hombres:Empleadores -898394.12
## Hombres:Personal de Servicio Doméstico-Hombres:Empleadores -403957.05
## Mujeres:Personal de Servicio Doméstico-Hombres:Empleadores -667315.69
## Hombres:Trabajadores por Cuenta Propia-Mujeres:Empleadores -601281.68
## Mujeres:Trabajadores por Cuenta Propia-Mujeres:Empleadores -768206.08
## Hombres:Asalariados-Mujeres:Empleadores -308864.61
## Mujeres:Asalariados-Mujeres:Empleadores -450166.08
## Hombres:Personal de Servicio Doméstico-Mujeres:Empleadores 40598.67
## Mujeres:Personal de Servicio Doméstico-Mujeres:Empleadores -221009.63
## Mujeres:Trabajadores por Cuenta Propia-Hombres:Trabajadores por Cuenta Propia -114935.34
## Hombres:Asalariados-Hombres:Trabajadores por Cuenta Propia 336737.92
## Mujeres:Asalariados-Hombres:Trabajadores por Cuenta Propia 197576.74
## Hombres:Personal de Servicio Doméstico-Hombres:Trabajadores por Cuenta Propia 699819.52
## Mujeres:Personal de Servicio Doméstico-Hombres:Trabajadores por Cuenta Propia 433148.62
## Hombres:Asalariados-Mujeres:Trabajadores por Cuenta Propia 509070.62
## Mujeres:Asalariados-Mujeres:Trabajadores por Cuenta Propia 369641.25
## Hombres:Personal de Servicio Doméstico-Mujeres:Trabajadores por Cuenta Propia 870793.76
## Mujeres:Personal de Servicio Doméstico-Mujeres:Trabajadores por Cuenta Propia 604543.61
## Mujeres:Asalariados-Hombres:Asalariados -107536.14
## Hombres:Personal de Servicio Doméstico-Hombres:Asalariados 398063.53
## Mujeres:Personal de Servicio Doméstico-Hombres:Asalariados 130199.16
## Hombres:Personal de Servicio Doméstico-Mujeres:Asalariados 542751.75
## Mujeres:Personal de Servicio Doméstico-Mujeres:Asalariados 275362.60
## Mujeres:Personal de Servicio Doméstico-Hombres:Personal de Servicio Doméstico -190141.02
## p adj
## Mujeres:Empleadores-Hombres:Empleadores 0.0000000
## Hombres:Trabajadores por Cuenta Propia-Hombres:Empleadores 0.0000000
## Mujeres:Trabajadores por Cuenta Propia-Hombres:Empleadores 0.0000000
## Hombres:Asalariados-Hombres:Empleadores 0.0000000
## Mujeres:Asalariados-Hombres:Empleadores 0.0000000
## Hombres:Personal de Servicio Doméstico-Hombres:Empleadores 0.0000000
## Mujeres:Personal de Servicio Doméstico-Hombres:Empleadores 0.0000000
## Hombres:Trabajadores por Cuenta Propia-Mujeres:Empleadores 0.0000000
## Mujeres:Trabajadores por Cuenta Propia-Mujeres:Empleadores 0.0000000
## Hombres:Asalariados-Mujeres:Empleadores 0.0000000
## Mujeres:Asalariados-Mujeres:Empleadores 0.0000000
## Hombres:Personal de Servicio Doméstico-Mujeres:Empleadores 0.3847534
## Mujeres:Personal de Servicio Doméstico-Mujeres:Empleadores 0.0000000
## Mujeres:Trabajadores por Cuenta Propia-Hombres:Trabajadores por Cuenta Propia 0.0000000
## Hombres:Asalariados-Hombres:Trabajadores por Cuenta Propia 0.0000000
## Mujeres:Asalariados-Hombres:Trabajadores por Cuenta Propia 0.0000000
## Hombres:Personal de Servicio Doméstico-Hombres:Trabajadores por Cuenta Propia 0.0000000
## Mujeres:Personal de Servicio Doméstico-Hombres:Trabajadores por Cuenta Propia 0.0000000
## Hombres:Asalariados-Mujeres:Trabajadores por Cuenta Propia 0.0000000
## Mujeres:Asalariados-Mujeres:Trabajadores por Cuenta Propia 0.0000000
## Hombres:Personal de Servicio Doméstico-Mujeres:Trabajadores por Cuenta Propia 0.0000000
## Mujeres:Personal de Servicio Doméstico-Mujeres:Trabajadores por Cuenta Propia 0.0000000
## Mujeres:Asalariados-Hombres:Asalariados 0.0000000
## Hombres:Personal de Servicio Doméstico-Hombres:Asalariados 0.0000000
## Mujeres:Personal de Servicio Doméstico-Hombres:Asalariados 0.0000027
## Hombres:Personal de Servicio Doméstico-Mujeres:Asalariados 0.0000000
## Mujeres:Personal de Servicio Doméstico-Mujeres:Asalariados 0.0000000
## Mujeres:Personal de Servicio Doméstico-Hombres:Personal de Servicio Doméstico 0.0000000
ggplot(esi_2022_ocupados_bivariado, aes(x = co_categorias, y = ing_t_p, color = sexo_categorias, group = sexo_categorias)) +
stat_summary(fun = mean, geom = "line") +
stat_summary(fun = mean, geom = "point") +
scale_y_continuous(labels = scales::comma)+
labs(title = "Interacción entre Sexo y Categoría de Ocupación en Ingresos Principales",
x = "Categoría de Ocupación",
y = "Ingresos Principales (Media)") +
theme_minimal()
ingresos_sector <- data.frame(
Categorias_Ocupacion= orden_sector,
Promedio_Hombres = ingreso_sector_hombres_miles2022,
Promedio_Mujeres = ingreso_sector_mujeres_miles2022,
Brecha_Salarial = brecha_genero_sector
)
# Definir orden personalizado de grupos de ocupacion
ingreso_sector_long <- ingresos_sector %>%
pivot_longer(cols = c(Promedio_Hombres, Promedio_Mujeres),
names_to = "sexo",
values_to = "ingreso_medio") %>%
mutate(sexo = recode(sexo,
"Promedio_Hombres" = "Hombres",
"Promedio_Mujeres" = "Mujeres"))
ingreso_sector_long$Categorias_Ocupacion <- factor(ingreso_sector_long$Categorias_Ocupacion, levels = orden_sector)
ingreso_sector_domesticos <- ingreso_sector_long %>%
filter(Categorias_Ocupacion == "Personal de Servicio Doméstico")
ingreso_sector_cuentapropia <- ingreso_sector_long %>%
filter(Categorias_Ocupacion == "Trabajadores por Cuenta Propia")
ggplot(ingreso_sector_long, aes(x = Categorias_Ocupacion, y = ingreso_medio, fill = sexo)) +
geom_bar(stat = "identity", position = "dodge") +
geom_text(aes(label = ingreso_medio),
position = position_dodge(width = 0.9),
vjust = 3.0,
hjust = 0.5,
color = "white",
fontface = "bold",
size = 3) +
geom_text(data = distinct(ingreso_sector_long, Categorias_Ocupacion, .keep_all = TRUE),
aes(x = Categorias_Ocupacion,
label = paste0(Brecha_Salarial, "%")),
color = "#1F1B1C",
size = 3,
fontface = "italic",
vjust = -0.5) +
annotate("text", x = Inf, y = -5, label = "Brecha de Género (%)",
hjust = 1.1, vjust = 2, size = 3, color = "#1F1B1C", fontface = "italic") +
geom_text(data = distinct(ingreso_sector_cuentapropia, Categorias_Ocupacion, .keep_all = TRUE),
aes(label = "*"),
color = "red", fontface = "bold", size = 6, vjust = -0.5) +
geom_text(data = distinct(ingreso_sector_domesticos, Categorias_Ocupacion, .keep_all = TRUE),
aes(label = "*"),
color = "black", fontface = "bold", size = 6, vjust = -0.5) +
labs(title = "Ingreso medio de las Personas Ocupadas, por sexo y brecha de género, según categoría en la Ocupación, 2022",
x = "Categoria de Ocupación",
y = "Ingreso medio mensual (miles de pesos)",
caption = "Fuente: Elaboración propia en base a INE, Encuesta Suplementaria de Ingresos, 2017-2022.") +
scale_fill_manual(values = palette) +
scale_y_continuous(labels = scales::comma)+
theme_minimal() +
theme(plot.background = element_rect(fill = "#F5F5F5"), # Cambiar el fondo a gris claro
panel.grid.major = element_blank(), # Eliminar la cuadrícula mayor
panel.grid.minor = element_blank(),
panel.grid.major.y = element_line(color = "#D3D3D3"),# Eliminar la cuadrícula menor
plot.title = element_text(color = "#015D3F", size = 13, hjust = 0.5, face = "bold"), # Color y tamaño del título
axis.text = element_text(color = "#015D3F"), # Color de texto de los ejes
axis.text.x = element_text(face = "bold"),
axis.text.y = element_text(face = "bold"),
axis.title.x = element_text(color = "#015D3F", face = "bold", size = 8), # Color de texto del eje x
axis.title.y = element_text(color = "#015D3F", face = "bold", size = 8),
legend.title = element_text(color = "#015D3F", face = "bold"),
legend.text = element_text(color = "#015D3F", face = "bold"),
plot.caption = element_text(hjust = 0, color = "#015D3F", face = "italic"))
Calculamos los promedios entre los años 2017 y 2022 de ingresos principales. Asimismo, verificamos si las diferencias según sexo son estadísticamente significativas
Rechazamos que no existe diferencia significativa en los ingresos medios entre hombres y mujeres (H0) en cada uno de los dataframes, por lo tanto, aceptamos que la diferencia sí es significativa (H1). Los intervalos de confianza no incluyen cero, lo cual refuerza la significancia.
promedio_ingreso_hombres <- sapply(ocupados_hombres_list, function(df) {
round(mean(df$ing_t_p, na.rm = TRUE ))
})
promedio_ingreso_mujeres <- sapply(ocupados_mujeres_list, function(df) {
round(mean(df$ing_t_p, na.rm = TRUE))
})
#En miles
promedios_ingresos <- data.frame(
Año = años,
Hombres = promedio_ingreso_hombres,
Mujeres = promedio_ingreso_mujeres
)
promedio_ingreso_hombres_miles <- round(promedio_ingreso_hombres / 1000)
promedio_ingreso_mujeres_miles <- round(promedio_ingreso_mujeres / 1000)
resultados_ttest <- lapply(1:6, function(i) {
t.test(ocupados_hombres_list[[i]]$ing_t_p,
ocupados_mujeres_list[[i]]$ing_t_p,
alternative = "two.sided",
var.equal = FALSE,
na.rm = TRUE)
})
format_p_value <- function(p, digits = 4, eps = .Machine$double.eps) {
if (p < eps) {
return(sprintf("< %.0e", eps))
} else {
return(format(p, digits = digits, scientific = FALSE))
}
}
extraer_resultados <- function(test) {
c(Estadístico_t = round(test$statistic, 2),
Valor_p = format_p_value(test$p.value, digits = 4, eps = .Machine$double.eps),
Media_Hombres = round(test$estimate[1], 2),
Media_Mujeres = round(test$estimate[2], 2),
IC_Lower = round(test$conf.int[1], 2),
IC_Upper = round(test$conf.int[2], 2))
}
# Aplicar la función a los resultados de la prueba t
resumen_resultados <- do.call(rbind, lapply(resultados_ttest, extraer_resultados))
# Añadir una columna de categoría para identificar cada par de dataframes
resumen_resultados <- data.frame(Categoria = 1:6, resumen_resultados)
resumen_resultados %>%
kable(caption = "Resultados de la Prueba t por Categoría") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
Categoria | Estadístico_t.t | Valor_p | Media_Hombres.mean.of.x | Media_Mujeres.mean.of.y | IC_Lower | IC_Upper |
---|---|---|---|---|---|---|
1 | 29.35 | < 2e-16 | 538799.29 | 419180.38 | 111631.82 | 127606.01 |
2 | 25.82 | < 2e-16 | 544775.33 | 438416.58 | 98284.84 | 114432.66 |
3 | 24.8 | < 2e-16 | 551799.59 | 444029.87 | 99252.27 | 116287.17 |
4 | 14.49 | < 2e-16 | 562711.78 | 479160.72 | 72250.16 | 94851.94 |
5 | 21.03 | < 2e-16 | 590010.87 | 492227.63 | 88668.67 | 106897.8 |
6 | 24.87 | < 2e-16 | 653985.95 | 528882.11 | 115242.6 | 134965.08 |
# Mostrar el dataframe con los resultados
#Brecha de ingresos media
brecha_genero_promedios <- round((1- promedio_ingreso_mujeres / promedio_ingreso_hombres) * 100, digits = 2)
# Crear gráfico de barras para promedio de ingresos
promedio_ingreso_miles <- data.frame(
Año = años,
Promedio_Hombres = promedio_ingreso_hombres_miles,
Promedio_Mujeres = promedio_ingreso_mujeres_miles,
Brecha_Salarial = brecha_genero_promedios
)
palette <- c("#4DAF4A", "#377EB8")
promedio_long <- promedio_ingreso_miles %>%
pivot_longer(cols = c(Promedio_Hombres, Promedio_Mujeres),
names_to = "Sexo",
values_to = "Promedio")
promedio_long$Sexo <- gsub("Promedio_Hombres", "Hombres", promedio_long$Sexo)
promedio_long$Sexo <- gsub("Promedio_Mujeres", "Mujeres", promedio_long$Sexo)
ggplot(promedio_long, aes(x = factor(Año), y = Promedio, fill = Sexo)) +
geom_bar(stat = "identity", position = "dodge") +
geom_text(aes(label = Promedio),
position = position_dodge(width = 0.9),
vjust = 3.0,
hjust = 0.5,
color = "white",
fontface = "bold",
size = 3) +
geom_text(data = distinct(promedio_long, Año, .keep_all = TRUE),
aes(x = factor(Año),
label = paste0(Brecha_Salarial, "%")),
color = "white",
size = 3,
fontface = "bold",
vjust = 20) +
annotate("text", x = Inf, y = -5, label = "Brecha Salarial (%)",
hjust = 1.1, vjust = 2, size = 3, color = "#1F1B1C", fontface = "italic") +
labs(title = "Gráfico 1: Ingreso medio de las Personas Ocupadas, por sexo y brecha de género, 2017-2022 (miles de pesos a octubre 2022)",
x = "Año",
y = "Promedio en miles de pesos",
caption = "Fuente: INE, Encuesta Suplementaria de Ingresos, 2017-2022.") +
scale_fill_manual(values = palette) +
scale_y_continuous(labels = scales::comma ) +
theme_minimal() +
theme(plot.background = element_rect(fill = "#F5F5F5"), # Cambiar el fondo a gris claro
panel.grid.major = element_blank(), # Eliminar la cuadrícula mayor
panel.grid.minor = element_blank(), # Eliminar la cuadrícula menor
plot.title = element_text(color = "#015D3F", size = 11, hjust = 0.5, face = "bold"), # Color y tamaño del título
axis.text = element_text(color = "#015D3F"), # Color de texto de los ejes
axis.text.x = element_text(face = "bold"),
axis.text.y = element_text(face = "bold"),
axis.title.x = element_text(color = "#015D3F", face = "bold"), # Color de texto del eje x
axis.title.y = element_text(color = "#015D3F", face = "bold"), # Color de texto del eje x
legend.title = element_text(color = "#015D3F", face = "bold"), #League of Legends texto y titulo
legend.text = element_text(color = "#015D3F", face = "bold"),
plot.caption = element_text(hjust = 0, color = "#015D3F", face = "italic"))
En graficar_promedios, se visualizan los promedios de ingresos principales por año y sexo mediante un gráfico de barras. Esto facilita la comparación visual entre los ingresos medios de hombres y mujeres a lo largo de los años estudiados.
mediana_ingreso_hombres <- sapply(ocupados_hombres_list, function(df) {
round(median(df$ing_t_p, na.rm = TRUE))
})
mediana_ingreso_mujeres <- sapply(ocupados_mujeres_list, function(df) {
round(median(df$ing_t_p, na.rm = TRUE))
})
#En miles de pesos
mediana_ingreso_hombres_miles <- round(mediana_ingreso_hombres / 1000)
mediana_ingreso_mujeres_miles <- round(mediana_ingreso_mujeres / 1000)
brecha_genero_medianas <- round((1- mediana_ingreso_mujeres / mediana_ingreso_hombres) * 100, digits = 2)
mediana_ingreso <- data.frame(
Año = años,
Mediana_Hombres = mediana_ingreso_hombres_miles,
Mediana_Mujeres = mediana_ingreso_mujeres_miles,
Brecha_Genero = brecha_genero_medianas
)
mediana_long <- mediana_ingreso %>%
pivot_longer(cols = c(Mediana_Hombres, Mediana_Mujeres),
names_to = "Sexo",
values_to = "Mediana")
mediana_long$Sexo <- gsub("Mediana_Hombres", "Hombres", mediana_long$Sexo)
mediana_long$Sexo <- gsub("Mediana_Mujeres", "Mujeres", mediana_long$Sexo)
palette <- c("#4DAF4A", "#377EB8")
ggplot(mediana_long, aes(x = factor(Año), y = Mediana, fill = Sexo)) +
geom_bar(stat = "identity", position = "dodge") +
geom_text(aes(label = Mediana),
position = position_dodge(width = 0.9),
vjust = 3.0,
hjust = 0.5,
color = "white",
fontface = "bold",
size = 3) +
geom_text(data = distinct(mediana_long, Año, .keep_all = TRUE),
aes(x = factor(Año),
label = paste0(Brecha_Genero, "%")),
color = "white",
size = 3,
fontface = "bold",
vjust = 20) +
annotate("text", x = Inf, y = -5, label = "Brecha de Género (%)",
hjust = 1.1, vjust = 2, size = 3, color = "#1F1B1C", fontface = "italic") +
labs(title = "Gráfico 2:Ingreso mediano de las Personas Ocupadas, por sexo y brecha de género,
2017-2022 (miles de pesos a octubre 2022)",
x = "Años",
y = "Ingreso Mediano Mensual (en miles de pesos)",
caption = "Fuente: INE, Encuesta Suplementaria de Ingresos, 2017-2022.") +
scale_fill_manual(values = palette) +
scale_y_continuous(labels = scales::comma)+
theme_minimal() +
theme(plot.background = element_rect(fill = "#F5F5F5"), # Cambiar el fondo a gris claro
panel.grid.major = element_blank(), # Eliminar la cuadrícula mayor
panel.grid.minor = element_blank(),
panel.grid.major.y = element_line(color = "#D3D3D3"),# Eliminar la cuadrícula menor
plot.title = element_text(color = "#015D3F", size = 13, hjust = 0.5, face = "bold"), # Color y tamaño del título
axis.text = element_text(color = "#015D3F"), # Color de texto de los ejes
axis.text.x = element_text(face = "bold"),
axis.text.y = element_text(face = "bold"),
axis.title.x = element_text(color = "#015D3F", face = "bold", size = 8), # Color de texto del eje x
axis.title.y = element_text(color = "#015D3F", face = "bold", size = 8),
legend.title = element_text(color = "#015D3F", face = "bold"),
legend.text = element_text(color = "#015D3F", face = "bold"),
plot.caption = element_text(hjust = 0, color = "#015D3F", face = "italic"))
En calcular_medianas, se calculan las medianas de ingresos para hombres y mujeres en cada año. Este análisis proporciona una medida robusta de la distribución central de los ingresos, complementando los resultados obtenidos con los promedios. Además, se calcula la brecha salarial por género utilizando las medianas, ofreciendo una perspectiva adicional sobre la igualdad salarial.
ingreso_mujeres_hora <- sapply(ocupados_mujeres_list_asalariados, function(df) {
round(mean(df$ingreso_hora, na.rm = TRUE))
})
ingreso_hombres_hora <- sapply(ocupados_hombres_list_asalariados, function(df) {
round(mean(df$ingreso_hora, na.rm = TRUE))
})
brecha_genero_hora <- round((1- ingreso_mujeres_hora / ingreso_hombres_hora) * 100, digits = 2)
ingreso_por_hora <- data.frame(
Año = años,
Ingreso_Por_Hora_Mujeres = ingreso_mujeres_hora,
Ingreso_Por_Hora_Hombres = ingreso_hombres_hora,
Brecha_Genero = brecha_genero_hora
)
ingreso_por_hora_long <- ingreso_por_hora %>%
pivot_longer(cols = c(Ingreso_Por_Hora_Mujeres, Ingreso_Por_Hora_Hombres),
names_to = "Sexo",
values_to = "Ingreso_Por_Hora")
ingreso_por_hora_long$Sexo <- gsub("Ingreso_Por_Hora_Hombres", "Hombres", ingreso_por_hora_long$Sexo)
ingreso_por_hora_long$Sexo <- gsub("Ingreso_Por_Hora_Mujeres", "Mujeres", ingreso_por_hora_long$Sexo)
palette <- c("#4DAF4A", "#377EB8")
ggplot(ingreso_por_hora_long, aes(x = factor(Año), y = Ingreso_Por_Hora, fill = Sexo)) +
geom_bar(stat = "identity", position = "dodge") +
geom_text(aes(label = Ingreso_Por_Hora),
position = position_dodge(width = 0.9),
vjust = 3.0,
hjust = 0.5,
color = "white",
fontface = "bold",
size = 3) +
geom_text(data = distinct(ingreso_por_hora_long, Año, .keep_all = TRUE),
aes(x = factor(Año),
label = paste0(Brecha_Genero, "%")),
color = "white",
size = 3,
fontface = "bold",
vjust = 20) +
annotate("text", x = Inf, y = -5, label = "Brecha de Género (%)",
hjust = 1.1, vjust = 2, size = 3, color = "#1F1B1C", fontface = "italic") +
labs(title = "Gráfico 4: Ingreso por hora de las Personas Asalariadas, por sexo y brecha de género,
2017-2022 (pesos a octubre 2022)",
x = "Años",
y = "Ingreso Medio por hora",
caption = "Fuente: Elaboración propia en base a INE, Encuesta Suplementaria de Ingresos, 2017-2022.") +
scale_fill_manual(values = palette) +
scale_y_continuous(labels = scales::comma)+
theme_minimal() +
theme(plot.background = element_rect(fill = "#F5F5F5"), # Cambiar el fondo a gris claro
panel.grid.major = element_blank(), # Eliminar la cuadrícula mayor
panel.grid.minor = element_blank(),
panel.grid.major.y = element_line(color = "#D3D3D3"),# Eliminar la cuadrícula menor
plot.title = element_text(color = "#015D3F", size = 13, hjust = 0.5, face = "bold"), # Color y tamaño del título
axis.text = element_text(color = "#015D3F"), # Color de texto de los ejes
axis.text.x = element_text(face = "bold"),
axis.text.y = element_text(face = "bold"),
axis.title.x = element_text(color = "#015D3F", face = "bold", size = 8), # Color de texto del eje x
axis.title.y = element_text(color = "#015D3F", face = "bold", size = 8),
legend.title = element_text(color = "#015D3F", face = "bold"),
legend.text = element_text(color = "#015D3F", face = "bold"),
plot.caption = element_text(hjust = 0, color = "#015D3F", face = "italic"))