Introdução

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.

Microdados da PNADc

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.

Renda domiciliar per capita

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

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!