1. Curso de gráficas

Usamos la información de ENOE

El objetivo es describir el comportamiento del porcentaje de la población ocupada que cuenta con acceso a seguridad social ,así como la proporción de este sector que se encuentran sin acceso a la seguridad social durante el tercer trimestre de 2024.

#1. Cargar librerias

paquetes=c("survey","ggsurvey","forcats","haven","readxl","readxl","fastDummies","readr", "dplyr", "foreign", "tidyr", "ggplot2", "writexl","openxlsx","gridExtra", "scales")
for (i in paquetes) {if (!require(i, character.only = TRUE)) {install.packages(i);library(i, character.only = TRUE)} else {library(i, character.only = TRUE)}}


#2.  Directorio de trabajo

setwd ("~/Curso R")

enoe=read_dta("ENOE_SDEMT423.dta")

# Variable filtro

enoe <- enoe %>% mutate(f = r_def == 0 & (c_res == 1 | c_res == 3) & eda >= 15 & eda <= 98)


enoe=enoe %>% filter(f==1)


# 3.1 Subconjuntos de datos

# CLASE2=Condicion de ocupacion
# Codigos: 1=Ocupado, 2=Desocupado, 3=Disponible, 4=No disponible

# Convertir la variable a dato numerico
enoe$clase2=as.numeric(enoe$clase2)

# Filtrar la base, necesitamos a los ocupados CLASE2=1
ocupados=enoe%>%filter(clase2==1)

# 3.2 Etiquetado de variables


# Codigos: 1=Hombre, 2=Mujer
ocupados <- ocupados %>%
  mutate(sex = fct_recode(factor(sex),
                          Hombre = "1",
                          Mujer = "2"))

# pos_ocu=Posicion en la ocupacion
# Codigos: 1=Suborninado, 2=Independiente, 3=Disponible, 0=No aplica

#4.2 Con 2 variables discretas


# Ahora vamos a guardar la definición de la base de datos y la variable en un elemento llamado g1
ocupados <- ocupados %>%
  mutate(pos_ocu = fct_recode(factor(pos_ocu),
                              "Subordinado" = "1",
                              "Empleadores" = "2",
                              "Cuenta propia" = "3",
                              "Sin pago" = "4"))


g1<-ggplot(ocupados) + aes(pos_ocu)            # Base de datos y variable


# Ya no bamos a repetir la definición, solo vamos a usar g1


# Opción 1: Pantalla dividida
g1+geom_bar(fill="yellowgreen")+
  facet_wrap(~ sex)+                          # facet_wrap divide a la pantalla
  ggtitle("Ocupacion por sexo")+
  xlab("Posicion de la ocupacion")+
  ylab("Personas")

# agregar más detalles

g1+geom_bar(fill="yellowgreen")+
  facet_wrap(~ sex)+                          # facet_wrap divide a la pantalla
  ggtitle("Ocupacion por sexo")+
  xlab("Posicion de la ocupacion")+
  ylab("Personas")+
  geom_text(aes(label=..count..), stat='count',  
            position=position_dodge(0.5), 
            vjust=-0.5, 
            size=3.5) 

# Opción 2: Separa las barras

g2<-ggplot(ocupados,aes(x=pos_ocu,fill=sex))   # Base de datos y variable

g2+geom_bar(position = "dodge")+
  ggtitle("Ocupacion por sexo")+              # position ajusta la posicion de las barras
  xlab("Posicion de la ocupacion")+
  ylab("Personas")+
  scale_fill_brewer(palette = "Blues")+
  scale_y_continuous(labels = scales::comma)

# agregar más detalles

g2+geom_bar(position = "dodge", stat = "count", color = "white", width = 0.8) +  # Barras con posición dodge y contando las ocurrencias
  geom_text(aes(label = scales::comma(..count..)), stat = "count", position = position_dodge(width = 0.9), vjust = -0.5, size = 2.5) +  # Añade etiquetas numeradas con comas
  ggtitle("Ocupación por Sexo") +  # Título del gráfico
  xlab("Posición de la Ocupación") +  # Etiqueta del eje X
  ylab("Personas") +  # Etiqueta del eje Y
  scale_fill_brewer(palette = "Blues", name = "Sexo") +  # Define la paleta de colores y titula la leyenda como "Sexo"
  scale_y_continuous(labels = scales::comma) + 
  theme_minimal() +
  labs(caption = "Fuente: ENOE cuarto trimestre 2023") +
  theme(plot.caption = element_text(hjust = 0.05))

# Opción 3: Apila los elementos uno encima del otro


# Preparación de los datos para calcular los porcentajes correctos
ocupados_r <- ocupados %>%
  group_by(pos_ocu, sex) %>%
  summarise(count = n(), .groups = 'drop') %>%
  group_by(pos_ocu) %>%
  mutate(percent = count / sum(count) * 100)

# Creación del gráfico con los datos preparados
g3 <- ggplot(ocupados_r, aes(x = pos_ocu, y = percent, fill = sex)) 

g3+geom_bar(stat = "identity", position = "dodge") +  # Usar barras con posición dodge
  geom_text(aes(label = scales::percent(percent / 100)), position = position_dodge(width = 0.9), vjust = -0.5, size = 2.5) +
  ggtitle("Ocupación por Sexo") +
  xlab("Posición de la Ocupación") +
  ylab("Porcentaje") +
  scale_fill_brewer(palette = "Blues", name = "Sexo") +
  scale_y_continuous(labels = percent_format(scale = 1)) +
  theme_minimal()

# Creación del gráfico con las cifras divididas entre 100
g3+geom_bar(stat = "identity", position = "fill") +  # Usar barras con posición fill para apilar los porcentajes en una barra
  geom_text(aes(label = scales::percent(percent / 100, accuracy = 0.1)), position = position_fill(vjust = 0.5), size = 3.5) +
  ggtitle("Ocupación por Sexo") +
  xlab("Posición de la Ocupación") +
  ylab("Porcentaje de Personas") +
  scale_fill_brewer(palette = "Purples", name = "Sexo") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +  # Formatear el eje Y como porcentaje
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

# Ejercicio 4
ocupados_s <- ocupados %>%
  filter(seg_soc != 3) %>% 
  mutate(seg_soc = fct_recode(factor(seg_soc),
                              "Con acceso" = "1",
                              "Sin acceso" = "2")) %>% 
  group_by(seg_soc, sex) %>%
  summarise(count = n(), .groups = 'drop') %>%
  group_by(seg_soc) %>%
  mutate(percent = count / sum(count) * 100)


g4 <- ggplot(ocupados_s, aes(x = seg_soc, y = percent, fill = sex)) 

g4+geom_bar(stat = "identity", position = "dodge") +  # Usar barras con posición dodge
  geom_text(aes(label = scales::percent(percent / 100)), position = position_dodge(width = 0.9), vjust = -0.5, size = 2.5) +
  ggtitle("Ocupación por Sexo") +
  xlab("Posición de la Ocupación") +
  ylab("Porcentaje") +
  scale_fill_brewer(palette = "Blues", name = "Sexo") +
  scale_y_continuous(labels = percent_format(scale = 1)) +
  theme_minimal()

# Creación del gráfico con las cifras divididas entre 100
g4+geom_bar(stat = "identity", position = "fill", width = 0.4) +  # Usar barras con posición fill para apilar los porcentajes en una barra
  geom_text(aes(label = scales::percent(percent / 100, accuracy = 0.1)),
            position = position_fill(vjust = 0.5), 
            size = 3.5) +
  ggtitle("Acceso a seguridad social por sexo") +
  xlab("Acceso a seguridad social") +
  ylab("Porcentaje de Personas") +
  scale_fill_brewer(palette = "Pastel2", name = "Sexo") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +  # Formatear el eje Y como porcentaje
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))