Em nossa última aula, trabalhamos com o Censo Demográfico de 2010. Outra pesquisa importante com microdados disponíveis é a Pesquisa Nacional por Amostra de Domicílios, também conhecida como PNAD contínua ou PNADc.
A coleta dos dados é trimestral, abarcando vários temas. Contudo, um questionário básico sempre é aplicado aos domicílios amostrados. Maiores informações, inclusive os microdados, podem ser acessados por meio desse link.
Um ponto importante: a pesquisa é por amostra de domicílios, mas os microdados são de pessoas, com código de identificador de domicílio. Abaixo vamos seguir os passos para a construção da tabela com informação de rendimentos.
Nesse exercício, vamos criar uma tabela com dados de população por faixa de renda domiciliar per capita no primeiro trimestre de 2023. Para tanto, basca navegar pelo link disponível na introdução, ou baixar diretamente o arquivo compactado PNADC_012023.zip. Não se esqueçam, obviamente, de baixar a documentação. Sugiro que navegem pela página, mas para os preguiçosos segue o link.
Nosso primeiro passo será selecionar as variáveis que irão compor a renda média domiciliar per capita. Primeiro, precisamos discriminar todas as variáveis que indicam a renda recebida, de todas as fontes possíveis, na semana de referência da pesquisa. O objetivo é fazer uma tabela de quantidade de domicílios por decil renda média domiciliar per capita.
Após selecionar as variáveis, utilizem o comando
read.fwf()
para ler os microdados. Reparem que o IBGE já
nos fez o favor de ofereer o tamanho dos campos.Não se esqueçam de usar
o comando setwd()
para definir o diretório de trabalho.
pnadc<-read.fwf(file="PNADC_012023.txt",
widths = c(4,1,2,-4,9,-7,2,2,-18,15,-28,2,-105,
8,-2,8,-5,8,-2,8,-32,8,-2,8,-5,8,-2,8,-10,8,-2,8,-6,8,-2,8),
col.names = c("Ano","Trimestre","UF","UPA","V1008","V1014","V1028","V2005",
"V403312","V403322","V403412","V403422","V405012","V405022",
"V405112","V405122","V405812","V405822","V405912","V405922"))
pnadc<-subset(pnadc,pnadc$UF==14) # vamos usar a UF RR como exemplo para não gastarmos tempo de processamento.
Apesar de ter coletado várias variáveis de renda, vamos utilizar
aquelas que discriminam o período de referência. Além disso, precisamos
que essas variáveis não tenham o valor NA
, pois dificultar
a função mean()
para estimação da média. Assim sendo, a
lista de variáveis de renda com descrição de mês de referência estão
listadas a seguir.
pnadc$V403412<-ifelse(is.na(pnadc$V403412),0,pnadc$V403412)
pnadc$V403422<-ifelse(is.na(pnadc$V403422),0,pnadc$V403422)
pnadc$V405112<-ifelse(is.na(pnadc$V405112),0,pnadc$V405112)
pnadc$V405122<-ifelse(is.na(pnadc$V405122),0,pnadc$V405122)
pnadc$V405912<-ifelse(is.na(pnadc$V405912),0,pnadc$V405912)
pnadc$V405922<-ifelse(is.na(pnadc$V405922),0,pnadc$V405922)
Vejam que, quando o NA
é identificado, o valor zero foi
atribuído. Por fim, podemos construir a renda total pela soma:
pnadc$rendimentos<-pnadc$V403412+pnadc$V403422+pnadc$V405112+pnadc$V405122+pnadc$V405912+pnadc$V405922
Entretanto, estamos interessados em construir uma renda média domiciliar. Nesse sentido, precisamos criar um identificador para o domicílio. Para esse passo, consultando a documentação, sabemos que a composição das variáveis UPA + V1008 + V1014 é a chave de domicílio. Logo,
pnadc$iddom<-paste0(pnadc$UPA,pnadc$V1008,pnadc$V1014)
Sabemos que o comando mean()
aplicado a uma variável
retornará o valor médio. Entretanto, como estamos interessados na média
por domicílio, uma estratégia seria criar um vetor com os valores únicos
para cada domicílio, uma vez que eles devem repetir para todos os
indivíduos conviventes. Após esse passo, podemos aplicar a função
for()
para criar um looping, atribuindo a todos os
indivíduos o avalor de sua renda média domiciliar. Para tanto, criamos
uma variável específica e preenchemos segundo o filtro de linha com o
identificador do domicílio.
lista<-unique(pnadc$iddom)
for(i in lista){
pnadc$rdpc[pnadc$iddom==i]<-mean(pnadc$rendimentos[pnadc$iddom==i],na.rm = T)
}
Para observarmos apenas os dados de domicílios, podemos filtrar a base de dados apenas com os responsáveis, considerando que existe uma relação de um para um entre eles (todo domicílio particular tem um responsável).
pnadcD<-subset(pnadc,pnadc$V2005==1)
Outra alternativa seria utilizar o comando aggregate()
,
aplicando a função média ao agregar os dados por identificador. Porém,
essa operação irá criar outro objeto e não adicionar diretamente em um
campo da tabela original.
pnadcD<-aggregate(x=pnadc$rdpc,
by=list(UF=pnadc$UF,
PESO=pnadc$V1028,
IDDOM=pnadc$iddom), # a lista de categorias pelas quais serão agregados os dados devem aparecer no argumento 'by' como uma lista. É interessante nomeá-los, como no exemplo.
FUN=mean) # o argumento FUN pode assumir outras funções, como 'sum', por exemplo.
Agora, para definir a renda média, podemos fazer uso dos pesos, uma
vez que o comando mean()
não é ponderado.
renda_media<-sum(pnadcD$x*pnadcD$PESO)/sum(pnadcD$PESO)
renda_media
## [1] 1331.44
Quantis são formas agrupamentos que, como regra, ordenam e classificam os dados em grupos de igual número de observações. Por exemplo, quartil é uma forma de dividir um banco de dados em quatro partes iguais, ordenados segundo o val75%, dividindo o banco de dados em partes iguais de 25% cada uma. Assim, fica fácil entender o que faz um decil (dez partes), um quintil (cinco partes) ou mesmo um percentil (cem partes).
Podemos fazer um exercício, relacionando os valores de cada
agrupamento. Vejamos, se usarmos o comando quantile()
:
quantile(pnadcD$x) # o padrão é quartil
## 0% 25% 50% 75% 100%
## 0.00 200.00 651.00 1407.75 30000.00
quantile(pnadcD$x, probs = c(0.2,0.4,0.6,0.8)) #quintis
## 20% 40% 60% 80%
## 30.000 452.000 875.000 1666.667
A resposta do comando quantile()
é um vetor. Podemos
observar quais valores separam as observações ordenadas, segundo a renda
média domiciliar. Podemos, então, classificar os domicílios de várias
formas. Por exemplo:
quintis<-quantile(pnadcD$x, probs = c(0.2,0.4,0.6,0.8)) #quintis
pnadcD$quintis<-ifelse(pnadcD$x<quintis[1],"GRUPO 1",
ifelse(pnadcD$x<quintis[2],"GRUPO 2",
ifelse(pnadcD$x<quintis[3],"GRUPO 3",
ifelse(pnadcD$x<quintis[4],"GRUPO 4","Grupo 5"))))
Agora, podemos agregar os dados por grupos. Existem várias formas de fazer, mas segue um exemplo:
grupos<-aggregate(pnadcD$x,by=list(Grupo=pnadcD$quintis), FUN=mean)
grupos
## Grupo x
## 1 GRUPO 1 0.04708098
## 2 GRUPO 2 288.78147364
## 3 GRUPO 3 641.09390078
## 4 GRUPO 4 1227.61698458
## 5 Grupo 5 4041.55108105
Por fim, o exercício pode ser abreviado, uma vez que nos dados da PNADc existe já o campo que soma todos os rendimentos. Ou seja, os comandos podem ser abreviados com o script abaixo.
pnadc<-read.fwf(file="PNADC_012023.txt",
widths = c(4,1,2,-4,9,-7,2,2,-18,15,-28,2,-358,8),
col.names = c("Ano","Trimestre","UF","UPA","V1008","V1014","V1028","V2005",
"VD4020"))
pnadc$iddom<-paste0(pnadc$UPA,pnadc$V1008,pnadc$V1014)
pnadc$VD4020<-ifelse(is.na(pnadc$VD4020),0,pnadc$VD4020)
pnadc<-subset(pnadc,pnadc$UF==14)
lista<-unique(pnadc$iddom)
for(i in lista){
pnadc$rdpc[pnadc$iddom==i]<-mean(pnadc$VD4020[pnadc$iddom==i],na.rm = T)
}
pnadcD<-subset(pnadc,pnadc$V2005==1)
quintis<-quantile(pnadcD$rdpc, probs = c(0.2,0.4,0.6,0.8)) #quintis
pnadcD$quintis<-ifelse(pnadcD$rdpc<quintis[1],"GRUPO 1",
ifelse(pnadcD$rdpc<quintis[2],"GRUPO 2",
ifelse(pnadcD$rdpc<quintis[3],"GRUPO 3",
ifelse(pnadcD$rdpc<quintis[4],"GRUPO 4","Grupo 5"))))
grupos<-aggregate(pnadcD$rdpc,by=list(Grupo=pnadcD$quintis), FUN=mean)
grupos
## Grupo x
## 1 GRUPO 1 0.04708098
## 2 GRUPO 2 288.78147364
## 3 GRUPO 3 641.09390078
## 4 GRUPO 4 1227.61698458
## 5 Grupo 5 4041.55108105
Vamos alterar o nome da coluna x e reduzir o número de casas decimais.
grupos$x<-format(round(grupos$x,2),decimal.mark=",",big.mark=".",nsmall=2)
names(grupos)<-c("Grupo","Renda Média Domiciliar per capita")
grupos
## Grupo Renda Média Domiciliar per capita
## 1 GRUPO 1 0,05
## 2 GRUPO 2 288,78
## 3 GRUPO 3 641,09
## 4 GRUPO 4 1.227,62
## 5 Grupo 5 4.041,55
Abraços e até a próxima!