Para practicar en clase, utilizamos la base de datos resultante de la Encuesta Nacional de Ocupación y Empleo, que obtuvimos del INEGI. La edición que tomamos fue la del 3° trimestre de 2023.
En esta primer acercamiento a los datos, estamos utilizando los datos muestrales únicamente. Es decir, no estamos utilizando el factor de expansión que proporciona el INEGI. Por lo tanto, nuestros resultados no corresponden con la realidad.
Lo primero que hicimos, después de cargar los paquetes, fijar nuestro directorio de trabajo, fue conservar solamente a las personas que forman parte de la población ocupada.
#1. Cargar librerias
paquetes=c("scales","survey","ggsurvey","forcats","haven","readxl","readxl","fastDummies","readr", "dplyr", "foreign", "tidyr", "ggplot2", "writexl","openxlsx","gridExtra")
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("~/CONEVAL/Curso de 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. Preparar datos
#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)
Luego, etiquetamos las variables para que funcionen correctamente. Trabajamos con dos variables principales, sexo y posición en la ocupación.
#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
ocupados <- ocupados %>%
mutate(pos_ocu = fct_recode(factor(pos_ocu),
"No Aplica" = "0",
"Suborninado" = "1",
"Empleadores" = "2",
"Cuenta propia" = "3",
"Sin pago" = "4"))
Finalmente, generamos algunas gráficas.
#4. Graficas (ggplot)
#4.1 Con 1 variable discreta
class(ocupados$sex)
## [1] "factor"
# Gráfico = Datos + Estética + Geometría.
ggplot(ocupados) + aes(sex) + geom_bar(fill="yellowgreen")
# Gráfico = Datos + Estética + Geometría + Etiquetas
ggplot(ocupados) + aes(sex) + geom_bar(fill="yellowgreen") +
xlab("Sexo") + ylab("Personas") + ggtitle("Total de mujeres y hombres en la muestra de personas ocupadas")
# Gráfico = Datos + Estética + Geometría + Etiquetas + Ajustes
ggplot(ocupados) + aes(sex) + geom_bar(fill="yellowgreen") +
xlab("Sexo") + ylab("Personas") + ggtitle("Total de mujeres y hombres")+
geom_text(aes(label = scales::comma(..count..)), stat = 'count', # Añade el número con comas
position = position_dodge(0.5), vjust = -0.5, size = 3.5) + # Ajusta la posición del texto moviéndolo ligeramente y ajustando su posición vertical
theme_minimal(base_size = 14) + # Ajusta la configuración del gráfico
theme(plot.title = element_text(hjust = 0.5)) # Centrar el título horizontalmente
ggplot(ocupados, aes(x = sex, y = ..prop.. * 100, group = 1)) +
geom_bar(aes(fill = sex), position = "dodge", stat = "count") + # Crea barras con porcentajes
geom_text(aes(label = scales::percent(..prop..)), stat = 'count', # Ajusta el número mostrado arriba de las barras
vjust = -0.5, position = position_dodge(0.5), size = 3.5) +
labs(x = "Sexo", y = "Porcentaje", title = "Porcentaje de mujeres y hombres",
caption = "Nota: población de 15 años y más\nFuente: ENOE cuarto trimestre 2023") + # Añade la fuente y nota como pie de página
theme_minimal(base_size = 14) +
theme(plot.title = element_text(hjust = 0.5), # Centrar el título horizontalmente
plot.caption = element_text(hjust = 0, size = 9)) + # Ajustes de estilo para la nota de fuente y la nota explicativa
scale_y_continuous(labels = scales::percent_format(scale = 1)) # Formatear el eje y como porcentaje
#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
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") + # 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)
# 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))
# 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 = "Blues", 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))