Carrega pacotes e configurações gerais

#rm(list = ls()) #Libera memória, apagando os objetos abertos no R.
#gc() #Libera a memoria RAM que não esta sendo utilizada pelo computador:
options(scipen=999) #Remove notação científica.

library(pacman)
p_load(PNADcIBGE, dplyr, haven, ggplot2, scales, ggpubr, zoo, ggrepel) # Carrega os pacotes

options(dplyr.summarise.inform = FALSE) # Tira o warning do summarise

Baixa do ftp do IBGE todas as Pnads Contínuas, salva apenas variáveis necessárias para o cálculo da taxa bruta total, e emipilha as bases em um único arquivo

(esse processo demorou umas duas horas para completar no meu computador)

var_TBM <- c("Ano","Trimestre","UF","V1028", "V2009", "V3003", "V3003A")
Pnad_lista = list()

for(ano in 2012:2021) {
   for(tri in 1:4){
      Pnad_TBM <- get_pnadc(year = ano, quarter = tri, vars = var_TBM, design = F, labels = F)
      Pnad_TBM <- Pnad_TBM %>% dplyr::select(Ano, Trimestre, UF, V1028, V2009, V3003, V3003A)
      Pnad_lista[[((ano-2012)*4)+tri]] <- Pnad_TBM
   }
}

for(tri in 1:3) {
      Pnad_TBM <- get_pnadc(year = 2022, quarter = tri, vars = var_TBM, design = F, labels = F)
      Pnad_TBM <- Pnad_TBM %>% dplyr::select(Ano, Trimestre, UF, V1028, V2009, V3003, V3003A)
      Pnad_lista[[40+tri]] <- Pnad_TBM
}

pnad_tbm_2012_2022 <- dplyr::bind_rows(Pnad_lista) # empilha as bases
saveRDS(pnad_tbm_2012_2022, "pnad_tbm_2012_2022.rds") # salva a base
rm(Pnad_lista, Pnad_TBM) # remove arquivos intermediários

Recodifica as variáveis para o cálculo da taxa bruta e agrega informações por trimestre e ano

TBM <- pnad_tbm_2012_2022 %>% 
   rename(peso = V1028, idade = V2009, nivel_frequenta1 = V3003, nivel_frequenta2 = V3003A) %>%
   mutate(
      pessoa = case_when(
         idade > 17 & idade < 25 ~ peso,
         T ~ 0),
      freq_grad = case_when(
         nivel_frequenta1 == "07" | nivel_frequenta2 == "08" ~ peso,
         T ~ 0)
      ) %>%
   group_by(Ano, Trimestre) %>%
   summarise(
      pop18a24 = sum(pessoa),
      freq_grad = sum(freq_grad)) %>%
   ungroup() %>%
   mutate(TBM = round((freq_grad/pop18a24)*100, digits = 1),
          `Ano-Trimestre` = as.yearqtr(paste0(Ano,"-",Trimestre))) %>%
   mutate(label = case_when(Trimestre %in% c("2", "4") ~ TBM,
                            T ~ NA_real_),
          label_2 = case_when(Trimestre == "2" ~ TBM,
                            T ~ NA_real_),
          label_4 = case_when(Trimestre == "4" ~ TBM,
                            T ~ NA_real_))

Faz Gráfico com a TBM

TBM %>% 
   ggplot(aes(x=`Ano-Trimestre`, y=TBM)) +
   geom_line(color="#69b3a2", size=2) +
   theme_pubclean() +
   ggtitle("TBM - Brasil - 2012-2022") +
   theme(axis.text = element_text(size=(12))
   ) +
   scale_x_yearqtr(breaks = TBM$`Ano-Trimestre`) + 
   theme(axis.text.x = element_text(angle = 90, hjust=1)) +
   geom_label_repel(label=TBM$label)