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.
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)
#Limpando o environment
rm(list = ls())
instalando e carregando pacotes
install.packages("PNADcIBGE")
install.packages("dplyr")
library(PNADcIBGE)
library(dplyr)
#selecionado as variáveis
varselec <- c("UF","V2005","VD4002","V2010","V2009", "V2007","VD4016", "VD4019", "VD3005","V4040","V40401","V40402", "V40403", "V20082")
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
)
)
}
for
para cada anoOs 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
) |>
# 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)
) |>
get_pnadc(deflator = TRUE)
mutate(
VD4019real = VD4019*CO1
) |>
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()
#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),
)
# 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()
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
)
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)
#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'
)