Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library(haven)
- library(ggplot2)
- library(ggpubr)
- library(gridExtra)
- library(stringr)
- library(scales)
- #Función para descargar las bases de datos de la Encuesta Nacional de Empleos (Chile)
- descargarENE <- function(inicio, fin, guardarRDATA=TRUE) {
- urlENE19 <- "https://ine.cl/docs/default-source/ocupacion-y-desocupacion/bbdd/####/formato-spss/"
- urlENE <- "https://www.ine.cl/docs/default-source/ocupacion-y-desocupacion/bbdd/####/spss/"
- letras <- "defmamjjasonde"
- rangoFecha <- seq(as.Date(paste0(inicio,"-01")),
- to=as.Date(paste0(fin,"-01")),
- by="months")
- if (file.exists(paste0("DB/ene.RData"))) {
- load("DB/ene.RData")
- } else {
- ENE <- new.env()
- }
- series <- data.frame(mes=character(0),
- desocupados=numeric(0), desocupadosH=numeric(0), desocupadosM=numeric(0),
- ocupados=numeric(0), ocupadosH=numeric(0),ocupadosM=numeric(0),
- fuerzaTrabajo=numeric(0), fuerzaTrabajoH=numeric(0),fuerzaTrabajoM=numeric(0),
- poblacionEdadTrabajar=numeric(0), poblacionEdadTrabajarH=numeric(0), poblacionEdadTrabajarM=numeric(0),
- iniciadoresDisponibles=numeric(0), iniciadoresDisponiblesH=numeric(0), iniciadoresDisponiblesM=numeric(0),
- tiempoParcialInvoluntario=numeric(0), tiempoParcialInvoluntarioH=numeric(0), tiempoParcialInvoluntarioM=numeric(0),
- ocupadosBuscaronEmpleo=numeric(0), ocupadosBuscaronEmpleoH=numeric(0), ocupadosBuscaronEmpleoM=numeric(0),
- ocupadosInformales=numeric(0), ocupadosInformalesH=numeric(0), ocupadosInformalesM=numeric(0),
- ocupadosSectorInformal=numeric(0), ocupadosSectorInformalH=numeric(0), ocupadosSectorInformalM=numeric(0),
- stringsAsFactors=FALSE)
- for(fecha in as.character(rangoFecha)) {
- nMes <- as.numeric(format(as.Date(fecha), "%m"))
- nAno <- as.numeric(format(as.Date(fecha), "%Y"))
- nombreENE <- paste0("ene-",
- format(as.Date(fecha), "%Y-%m"))
- nombreENEL <- paste0(nombreENE, "-", substr(letras,nMes,nMes+2))
- if(!file.exists(paste0("DB/", nombreENE,".sav"))) {
- if (nAno <= 2019) {
- url <- sub("####", format(as.Date(fecha), "%Y"), urlENE19)
- #nombreENE19 <- sub("^(ene-[0-9]{4}-[0-9]{2})(-[a-z]{3})$","\\1", nombreENE)
- download.file(paste0(url,nombreENE,".sav"), destfile = paste0("DB/", nombreENE,".sav"))
- } else {
- url <- sub("####", format(as.Date(fecha), "%Y"), urlENE)
- download.file(paste0(url,nombreENEL,".sav"), destfile = paste0("DB/", nombreENE,".sav"))
- }
- }
- nombreGB <- gsub("-", "_", nombreENE)
- if(!exists(nombreGB, envir=ENE)) {
- assign(nombreGB, read_spss(paste0("DB/", nombreENE,".sav")), envir=ENE)
- }
- ### Calcular los principales indicadores de ocupación y desocupación ###
- # Personas Desocupadas
- DO <- ENE[[nombreGB]]$cae_especifico == 8 | ENE[[nombreGB]]$cae_especifico == 9
- # Personas Ocupadas
- O <- ENE[[nombreGB]]$cae_especifico >= 1 & ENE[[nombreGB]]$cae_especifico <= 7
- # Fuerza de trabajo
- FT <- ENE[[nombreGB]]$cae_especifico >= 1 & ENE[[nombreGB]]$cae_especifico <= 9
- # Población en Edad de Trabajar
- PET <- ENE[[nombreGB]]$edad >= 15
- # Iniciadores Disponibles
- ID <- ENE[[nombreGB]]$cae_especifico == 10
- # Personas a tiempo parcial involuntario
- TPI <- O & ENE[[nombreGB]]$habituales <= 30 & ENE[[nombreGB]]$c10 == 1 &
- (ENE[[nombreGB]]$c11 == 1 | ENE[[nombreGB]]$c11 == 2)
- # Personas ocupadas que buscaron empleo
- OBE <- O & (ENE[[nombreGB]]$e4 >=1 & ENE[[nombreGB]]$e4 <=6)
- # Personas ocupadas informales
- OI <- ENE[[nombreGB]]$ocup_form == 2
- # Personas ocupadas en el sector informal
- OSI <- ENE[[nombreGB]]$sector == 2
- # Añadir a la serie estadística
- series[nrow(series)+1, 1] <- fecha#format(as.Date(fecha), "%Y-%m")
- i <- 2
- for (indicador in list(DO,O,FT,PET,ID,TPI,OBE,OI,OSI)) {
- series[nrow(series),i:(i+2)] <- c(sum(indicador*ENE[[nombreGB]]$fact_cal, na.rm=TRUE),
- tapply(indicador*ENE[[nombreGB]]$fact_cal, ENE[[nombreGB]]$sexo, sum, na.rm=TRUE))
- i <- i+3
- }
- }
- tasaDesocupacion <- with(series, desocupados/fuerzaTrabajo)
- tasaDesocupacionH <- with(series, desocupadosH/fuerzaTrabajoH)
- tasaDesocupacionM <- with(series, desocupadosM/fuerzaTrabajoM)
- tasaOcupacion <- with(series, ocupados/poblacionEdadTrabajar)
- tasaParticipacion <- with(series, fuerzaTrabajo/poblacionEdadTrabajar)
- tasaPresionLaboral <- with(series, (desocupados+iniciadoresDisponibles+ocupadosBuscaronEmpleo)/(fuerzaTrabajo+iniciadoresDisponibles))
- tasaDesocupacionIniciadores <- with(series, (desocupados+iniciadoresDisponibles)/(fuerzaTrabajo+iniciadoresDisponibles))
- tasaDesocupacionTPI <- with(series, (desocupados+iniciadoresDisponibles+tiempoParcialInvoluntario)/(fuerzaTrabajo+iniciadoresDisponibles))
- series <- data.frame(series,tasaDesocupacion,tasaDesocupacionH, tasaDesocupacionM,
- tasaOcupacion, tasaParticipacion, tasaPresionLaboral, tasaDesocupacionIniciadores, tasaDesocupacionTPI)
- assign("series", series, ENE)
- if (guardarRDATA) {
- save(ENE, file="DB/ene.RData")
- }
- return(ENE)
- }
- # Si las bases de datos ya están descargadas, comentar esta línea y descomentar load
- ENE <- descargarENE("2019-05","2021-05")
- #load("DB/ene.RData")
- # GRÁFICO DE TASA DE DESEMPLEO SEGÚN GÉNERO
- ggplot(data = ENE$series, aes(x = as.Date(mes), y = tasaDesocupacion, color="Total"))+
- geom_line(size=1) +
- geom_line(aes(y=tasaDesocupacionH, color="Hombres"),size=1) +
- geom_line(aes(y=tasaDesocupacionM, color="Mujeres"),size=1) +
- scale_color_manual(values = c("Total"="#00AABB", "Hombres"="#AA00BB", "Mujeres"="#AABB00")) +
- scale_x_date(labels = date_format("%Y-%m"), breaks = date_breaks("months")) +
- scale_y_continuous(labels = scales::percent) +
- theme(legend.position="top", axis.text.x = element_text(angle=45, hjust=1, size=7)) +
- labs(title = "Tasa de desocupación por trimestre móvil, según género",
- x="Trimestre Móvil",
- y="Tasa de desocupación %",
- caption="Fuente: Elaboración propia\n
- en base a datos de Encuesta Nacional de Empleo\n
- (INE,2021)")
- serieE9 <- data.frame(mes=character(0), motivoInactividad=numeric(0), Freq=numeric(0),
- hombres=numeric(0), mujeres=numeric(0))
- for (mes in ENE$series$mes) {
- encuesta <- paste0("ene_", format(as.Date(mes), "%Y_%m"))
- f <- ENE[[encuesta]]$activ == 3 &
- ENE[[encuesta]]$edad >= 15
- if("e9_otro_covid" %in% names(ENE[[encuesta]]) & "e12_otro_covid" %in% names(ENE[[encuesta]])) {
- subsetENE <- ENE[[encuesta]][f,c("sexo", "e9", "e12", "e9_otro_covid", "e12_otro_covid" ,"fact_cal")]
- } else {
- subsetENE <- ENE[[encuesta]][f,c("sexo", "e9", "e12" ,"fact_cal")]
- }
- attach(subsetENE)
- motivoInactividad <- numeric(nrow(subsetENE))
- # Espera iniciar un empleo o actividad por cuenta propia
- motivoInactividad[e9 %in% c(1,2,9,13) | (is.na(e9) & e12 %in% 1:2)] <- 1
- # Responsabilidades familiares (embarazo o cuidado de menores o personas dependientes)
- motivoInactividad[e9 %in% c(3,11,12,14) | (is.na(e9) & e12 %in% c(4,10,11))] <- 2
- # Estudios
- motivoInactividad[e9 == 4 | (is.na(e9) & e12 == 3)] <- 3
- # Es Jubilado/a, Rentista, Pensionado/a o Montepiada
- motivoInactividad[e9 %in% 5:7 | (is.na(e9) & e12 %in% 5:7)] <- 4
- # Razones de salud
- motivoInactividad[e9 %in% c(8,10) | (is.na(e9) & e12 %in% c(8,9))] <- 5
- # Razones de desaliento
- motivoInactividad[e9 %in% 15:20] <- 6
- # No quiere o no necesita trabajar
- motivoInactividad[e9 == 21 | (is.na(e9) & e12 == 12)] <- 7
- if ("e9_otro_covid" %in% names(ENE[[encuesta]]) & "e12_otro_covid" %in% names(ENE[[encuesta]])) {
- # Razones asociadas al covid 19
- motivoInactividad[(e9 == 22 & e9_otro_covid == 1) | (is.na(e9) & e12 == 13 & e12_otro_covid ==1)] <- 8
- # Otras razones
- motivoInactividad[(e9 == 22 & (e9_otro_covid == 0 | is.na(e9_otro_covid))) | (is.na(e9) & e12 == 13 & (e12_otro_covid ==0 | is.na(e12_otro_covid)))] <- 9
- } else {
- motivoInactividad[e9 == 22 | (is.na(e9) & e12 == 13)] <- 9
- }
- motivoInactividad[motivoInactividad == 0] <- NA
- detach(subsetENE)
- motivoInactividad <- factor(motivoInactividad,
- levels=1:9,
- labels=c("Espera iniciar un empleo o actividad por cuenta propia", #1
- "Responsabilidades familiares (embarazo, cuidado de menores o personas dependientes)", #2
- "Estudios", #3
- "Es Jubilado/a, Rentista, Pensionado/a o Montepiada", #4
- "Razones de salud", #5
- "Razones de desaliento", #6
- "No quiere o no necesita trabajar", #7
- "Razones asociadas al covid-19", #8
- "Otras Razones")) #9
- subsetENE <- data.frame(subsetENE, motivoInactividad)
- tmi <- with(subsetENE, xtabs(fact_cal ~ motivoInactividad))
- tmis <- with(subsetENE, xtabs(fact_cal ~ motivoInactividad + sexo))
- serieE9 <- rbind(serieE9, data.frame(mes=rep(mes,nrow(tmi)), tmi,
- hombres=tmis[,1], mujeres=tmis[,2]))
- rm(encuesta,f,motivoInactividad,tmi,tmis,subsetENE)
- }
- levels(serieE9$motivoInactividad) <- str_wrap(levels(serieE9$motivoInactividad),40)
- g1 <- ggplot(data=serieE9, aes(x=as.Date(mes), y=Freq, fill=motivoInactividad)) +
- geom_area(alpha=0.7, color = 1, lwd=0.5, linetype=1) +
- scale_fill_brewer(palette = "Set1", name=str_wrap("Motivo por el cual no ha trabajado, buscado empleo o no ha estado disponible para trabajar en las últimas cuatro semanas",30)) +
- guides(fill=guide_legend(legend.key.height=unit(2, "cm"),ncol=1)) +
- labs(x="Trimestre Móvil", y="Población Total\n(Millones de personas)") +
- scale_x_date(labels = date_format("%Y-%m"), breaks = date_breaks("months")) +
- theme(axis.text.x = element_text(angle=45, hjust=1, size=7)) +
- scale_y_continuous(labels = label_number(suffix = " M", scale = 1e-6))
- g2 <- ggplot(data=serieE9, aes(x=as.Date(mes), y=hombres, fill=motivoInactividad)) +
- geom_area(alpha=0.7, color = 1, lwd=0.5, linetype=1) +
- scale_fill_brewer(palette = "Set1") +
- labs(x="Trimestre Móvil", y="Hombres\n(Millones de personas)") +
- scale_x_date(labels = date_format("%Y-%m"), breaks = date_breaks("months")) +
- theme(axis.text.x = element_text(angle=45, hjust=1, size=7)) +
- scale_y_continuous(labels = label_number(suffix = " M", scale = 1e-6))
- g3 <- ggplot(data=serieE9, aes(x=as.Date(mes), y=mujeres, fill=motivoInactividad)) +
- geom_area(alpha=0.7, color = 1, lwd=0.5, linetype=1) +
- scale_fill_brewer(palette = "Set1") +
- labs(x="Trimestre Móvil", y="Mujeres\n(Millones de personas)") +
- scale_x_date(labels = date_format("%Y-%m"), breaks = date_breaks("months")) +
- theme(axis.text.x = element_text(angle=45, hjust=1, size=7)) +
- scale_y_continuous(labels = label_number(suffix = " M", scale = 1e-6))
- legend <- get_legend(g1)
- # Descomentar esta línea y dev.off para exportar a png
- #png("grafico2.png", width=8.5, height=11, units="in", res=300)
- grid.arrange(arrangeGrob(g1 + theme(legend.position = "none"),
- g2 + theme(legend.position = "none"),
- g3 + theme(legend.position = "none")),
- as_ggplot(legend),
- ncol=2,
- widths=c(1.5,1),
- top=grid::textGrob("Motivo por el que no ha trabajado o buscado empleo",gp=grid::gpar(fontsize=20,font=3)),
- bottom="Fuente: Elaboración propia en base a Encuesta Nacional de Empleo (INE, 2021)"
- )
- #dev.off()
Advertisement
RAW Paste Data
Copied
Advertisement