1. Introdução

Análise e manipulação dos microdados da Pesquisa Nacional por Amostra de Domicílios Contínua(PNADC). Passo a passo de como fazer o download dos microdados anuais da PNAD contínua de 2012 a 2023.

1.1 Dicionário

Dicionário das variáveis usadas:

UF >> estados
V2005 >> condição no domicílio
VD4002 >> condição de ocupação (1 = ocupado 2 = desocupado)
V2010 >> raça
V20082 >> ano de nascimento
V2009 >> idade(0 a 130)
V2007 >> sexo (1 = homem 2 = mulher)
VD3005 >> anos de estudo
VD4016 >> rendimento mensal habitual no trabalho principal(em reais)
VD4019 >> rendimento mensal habitual em todos os trabalhos(em reais)
V4040 >> tempo de emprego(categorias: 1 mês, menos de 1 ano, menos de 2 anos e 2 anos ou mais)
V40401 >> tempo de emprego(categorias 1 a 11, 01 mês a 11 meses)
V40402 >> tempo de emprego(de 1 ano a 2 anos, categorias: 00 a 11)
V40403 >> tempo de emprego(2 a 98 = 2 anos ou mais)


1.2 Passos iniciais

#Limpando o environment
rm(list = ls())

instalando e carregando pacotes
install.packages("PNADcIBGE")
install.packages("dplyr")

library(PNADcIBGE)
library(dplyr)


2. Extração e Filtragem dos dados

2.1. Extração

Selecionando variáveis baseado no dicionário da PNAD
#selecionado as variáveis
varselec <-  c("UF","V2005","VD4002","V2010","V2009", "V2007","VD4016", "VD4019", "VD3005","V4040","V40401","V40402", "V40403", "V20082")


Baixando base de dados de 2012 a 2023

O código abaixo faz download e armazena os dados de todos os anos de 2012 a 2023 baixados com a função get_pnadc e realiza um loop for para não precisar ficar repetindo o código para todos os anos. Deflator = TRUE para inserir a variável para decflacionamento dos dados de remuneração.

for (ano in 2012:2023) {
  assign(
    paste0("PNADC", ano),
    get_pnadc(
      year = ano,
      interview =  5,
      design = FALSE,
      labels = FALSE,
      deflator = TRUE,
      vars = varselec
    )
  )
}


2.1. Filtragem

Selecionando apenas as colunas com as variáveis escolhidas com um loop for para cada ano

Os blocos abaixo de filtragem e criação de dummies estão interligados por pipes( |> ). CO1 é a variável para deflacionamento.

for (ano in 2012:2023) {
dados_PNAD <- get(paste0("PNADC", ano))
  dados_PNAD <- dados_PNAD |> 
    select(
      Ano, Trimestre, UF, UPA, V1008, V1014, V2005, VD4002, V2010, V20082, 
      V2007, V2009, VD4016, VD4019, VD3005, V4040, V40401, V40402, V40403, CO1
    ) |> 


Criação da média de anos escolares, dos sexos e da raça, além disso, criação das dummies de sexo e raça
# Criando dummies
    mutate(
      MédiaAnosEscolar = mean(as.numeric(VD3005), na.rm = TRUE)
    ) |> 
    mutate(
      Homem = ifelse(V2007 == 1, 1, 0),
      Mulher = ifelse(V2007 == 1, 0, 1),
      MédiaHomem = ifelse(V2007 == 1, mean(Homem)*100, 0),
      MédiaMulher = ifelse(V2007 == 1, 0, mean(Mulher)*100)
    ) |> 
    mutate(
      Branco = ifelse(V2010 == 1, 1, 0),
      ñBranco = ifelse(V2010 == 1, 0, 1),
      MédiaBranco = ifelse(V2010 == 1, mean(Branco)*100, 0),
      Média_ñBranco = ifelse(V2010 == 1, 0, mean(ñBranco)*100)
    ) |> 
    


Atualização monetária com a variável “CO1” que vem na base de dados quando get_pnadc(deflator = TRUE)
   mutate(
      VD4019real = VD4019*CO1
    ) |> 


Criando a variável domicílio, dummies e média com base na variável “condição de domicílio”
    mutate(
      Domicílio = paste0(UPA, V1008, V1014)
    ) |>
    group_by(Domicílio) |>
    mutate(
      ChefeFamilia = ifelse(V2005 == "01", 1, 0),
      Conjuge = ifelse(V2005 == "02", 1, 0),
      Casados = ifelse(ChefeFamilia == 1 | (Conjuge == 1 & any(ChefeFamilia == 1)), 1, 0),
      ñcasados = ifelse(Casados == 0 & V2009 > 18, 1, 0),
      Filhos_menores = ifelse(V2005 >= "04" & V2005 <= "06" & V2009 < 18, 1, 0),
      CasadosComFilhoMenor = ifelse(Casados == 1 & any(Filhos_menores == 1), 1, 0),
      CasadosSemFilhoMenor = ifelse(Casados == 1 & !any(Filhos_menores == 1), 1, 0)
    ) |>
    ungroup()


Criando colunas com as médias do banco de dados geral
#Média gerais do banco de dados
  dados_PNAD <- dados_PNAD |> 
    mutate(
      RendaMédia = mean(VD4019, na.rm = TRUE),
      RendaMédiaReal = mean(VD4019real, na.rm = TRUE),
      TempoMédioEmprego = mean(V40403, na.rm = TRUE),
    )


Criação das ID e renda média, renda média e tempo médio de emprego por ID
# Criando ID com ano de nascimento e sexo que são as colunas 10 e 11, respectivamente
  dados_PNAD$ID <- apply(dados_PNAD[, 10:11], 1, paste, collapse = "")
  
 # Média por ID
  dados_PNAD <- dados_PNAD |> 
    group_by(ID) |> 
    mutate(
      RendaMédia_ID = mean(VD4019, na.rm = TRUE),
      RendaMédiaReal_ID = mean(VD4019real, na.rm = TRUE),
      TempoMédioEmprego_ID = mean(V40403, na.rm = TRUE),
      MédiaAnosEscolar_ID = mean(as.numeric(VD3005), na.rm = TRUE)
    ) |> 
    ungroup()


Resolvendo o problema da falta de dados de remuneração e ocupação de pessoas menores de 14 anos

Foi preciso primeiramente separar as pessoas menores de 14 do banco de dados principal porque ao fazer a filtragem por condição de ocupação e remuneração esses indivíduos seriam excluídos, visto que essas variáveis só captam indivíduos com 14 anos ou mais.

# Filtrando indivíduos sem dados de ocupação e renda (idade < 14)
  SEMocupacao_SEMrenda <- dados_PNAD |> 
    filter(V2009 < 14)
  
  # Garantindo que as colunas específicas sejam preenchidas com NA em SEMocupacao_SEMrenda
  SEMocupacao_SEMrenda <- dados_PNAD |> 
    filter(V2009 < 14) |> 
    mutate(
      VD4002 = NA,
      VD4016 = NA,
      V4040 = NA,
      V40401 = NA,
      V40402 = NA,
      V40403 = NA,
      RendaMédia = NA,
      RendaMédiaReal = NA,
      TempoMédioEmprego = NA,
      RendaMédia_ID = NA,
      RendaMédiaReal_ID = NA,
      MédiaAnosEscolar_ID = NA
    )


Filtrando dados apenas para indivíduos ocupados, com 60 anos ou menos e renda menor ou igual a R$100 mil


Então, após esta separação foi feito o filtro somente para pessoas ocupadas, com 60 anos ou menos e que recebem até R$100 mil de remuneração. E por fim, a junção novamente com os dados de indivíduos menor de 14 anos.


  # Filtrando dados pela condição de ocupação, nascimento e renda
  dados_PNAD <- dados_PNAD |> 
    filter(
      VD4002 == 1 &
        V20082 >= 1964 &
        VD4019 <= 100000
    )
  
  # Juntando os dados de indivíduos < 14 com a base de dados do ano
  dados_PNAD <- bind_rows(dados, SEMocupacao_SEMrenda)
  
    # Salvando os dados filtrados
  assign(paste0("dadosfiltrados", ano), dados_PNAD)
}


#salvando os dados dos anos em um unico objeto
dados_anuais <- bind_rows(dadosfiltrados2022, dadosfiltrados2023)


3. Estatística Descritiva

3.1 Renda Real Média

** **

#renda real total por ano

rendareal <- dados_anuais |> 
  select(
    Ano, VD4019real
  ) |> 
  group_by(
    Ano
  ) |> 
  summarise(
    SomaRendaReal = sum(VD4019real, na.rm = TRUE), .groups = 'drop'
  )


# renda real média por ano
RendaReal_Média_Ano <- dados_anuais |> 
  select(
    Ano, VD4019real
  ) |> 
  group_by(
    Ano
  ) |> 
  summarise(
    RendaReal_MédiaAno = mean(VD4019real, na.rm = TRUE),  .groups = 'drop'
  )


#mediana da renda real por ano
mediana_rendareal <- dados_anuais |> 
  select(
    Ano, VD4019real
  ) |> 
  group_by(
    Ano
  ) |> 
  summarise(
    mediana = median(dados_anuais$VD4019real, na.rm = TRUE)
  )


#renda média real dos homens
RendaReal_Média_Homens <- dados_anuais |> 
  select(
    Ano, V2007, VD4019real
  ) |> 
  filter(
    V2007 == 1
  ) |> 
  group_by(
    Ano
  ) |> 
  summarise(
    RendaMédia_Homens = mean(VD4019real, na.rm = TRUE),  .groups = 'drop'
  )


#renda média real das mulheres
RendaReal_Média_Mulheres <- dados_anuais |> 
  select(
    Ano, V2007, VD4019real
  ) |> 
  filter(
    V2007 == 2
  ) |> 
  group_by(
    Ano
  ) |> 
  summarise(
    RendaMédia_Mulheres = mean(VD4019real, na.rm = TRUE),  .groups = 'drop'
  )


#renda real média por id

RendaReal_Média_ID <- dados_anuais |> 
  select(
    Ano, ID, VD4019real
  ) |> 
  group_by(
    Ano, ID
  ) |> 
  summarise(
    RendaMédiaReal_ID = mean(VD4019real, na.rm = TRUE), .groups = 'drop'
  )