PNAD Contínua em R
Projeto de Extensão em Conjuntura Econômica e Social
Experiências Extensionistas - Turma 2023
Fevereiro, 2024


1 Introdução

Esse ebook contém instruções de como fazer a leitura, calcular estatísticas e fazer gráficos a partir dos dados da Pesquisa Nacional por Amostra de domicílios (PNAD) Contínua (IBGE, 2024) utilizando a linguagem R.

O material do curso é livre e está licenciado com uma Licença CC BY-NC-SA 4.0. Atualizações podem ser consultadas no site do Núcleo de Estudos em Desenvolvimento Urbano e Regional - NEDUR - da Universidade Federal do Paraná (UFPR).

Vale ressaltar, que todos os códigos e descrições contidas nesse e-book são parte do projeto de extensão Conjuntura Econômica e Social desenvolvido no departamento de Economia da UFPR pelo NEDUR.

Participaram diretamente da construção desse material os discentes:

Antônio Guilherme Bordin Vilas Boas

Eduardo Bérgamo de Souza e Silva

Federico José Riquelme Mongelos

Heloísa Pinheiro Martins

Leticia Arami Salinas Vargas

Lucas Meira Foltran

Sob orientação da professora Kênia Barreiro de Souza.

Na utilização ou citação de partes do material, referencie da seguinte maneira:

SOUZA, K. B. (coord.); VILAS BOAS, A. G. B.; SILVA, E. B. S; MONGELOS, F. J. R.; MARTINS, H. P.; VARGAS, L. A. S.; FOLTRAN, L. M. PNAD Contínua em R. Experiências Extensionistas - Turma 2023. Projeto de Extensão em Conjuntura Econômica e Social. Núcleo de Estudos em Desenvolvimento Urbano e Regional (NEDUR) da Universidade Federal do Paraná (UFPR), Curitiba-PR, 2024. Disponível em: https://nedurcode.com/r/PNAD_Contínua_em_R.html

Para instruções introdutórias sobre a utilização do R, e RStudio, acesse o curso Introdução ao R.

2 Download dos dados

Os dados da PNAD Contínua podem ser acessados diretamente no R, utilizando o pacote PNADcIBGE. Nesse ebook, daremos as instruções para o download manual e leitura offline dos arquivos. A vantagem de utilizar esse procedimento (em detrimento do download via R) está na facilidade para acessar os dados brutos mesmo sem internet, ou quando o site do IBGE está lento ou fora do ar.

O primeiro passo para o download offline dos dados da PNAD contínua é colocar em uma pasta todos os arquivos para leitura. A base de microdados pode ser acessada no site do IBGE.

Como exemplo, vamos utilizar, inicialmente, os dados do segundo trimestre de 2023. Para tanto, baixe o arquivo PNADC_022023.zip, e descompacte o arquivo na pasta de trabalho escolhida no seu computador:

Além do arquivo de dados, será necessário salvar e descompactar o dicionário de dados, disponível em Microdados da Divulgação Trimestral>Documentação>Dicionario_e_input link, como indica a figura abaixo:

Com o RStudio aberto, selecione o diretório que contém os dados:

setwd("C:\\CES_Livro2023")

Caso esteja realizando esse procedimento pela primeira vez, será necessário instalar o pacote PNADcIBGE:

install.packages("PNADcIBGE")

Observação: Um pacote é um conjunto de ferramentas. São códigos escritos com o propósito de executar determinada tarefa.

O PNADcIBGE foi desenvolvido pelo IBGE especialmente para a leitura e tabulação dos dados da Pnad Contínua. Uma ótima fonte de instruções dobre o pacote está disponível em: https://rpubs.com/gabriel-assuncao-ibge/pnadc

Após a instalação, será possível carregar o pacote com o comando:

library(PNADcIBGE)

Para a leitura dos dados, vamos utilizar a função read_pnadc, e para leitura do dicionário, vamos usar a função pnadc_labeller.

pnadc2023T02 <- read_pnadc("PNADC_022023.txt", "input_PNADC_trimestral.txt")
pnadc2023T02 <- pnadc_labeller(data_pnadc=pnadc2023T02, "dicionario_PNADC_microdados_trimestral.xls")

O objeto final pode ser salvo no formato RDS, com o seguinte comando:

saveRDS(pnadc2023T02,"pnadc2023T02")

3 Modificações nos dados

Com os dados salvos, é possivel tabular estatísticas, fazer gráficos, estimar modelos econométricos, entre outros.

Nesse e-book, serão apresentados exemplos de manipulações de dados, tabulações de estatísticas e plotagem dos resultados em gráficos.

3.1 Pacotes necessários

Serão utilizados três pocotes: dplyr, survey, e readr.

O pacote dplyr é uma gramática de manipulação de dados, que permite modificar, selecionar, filtrar, alterar a ordem, criar estatísticas, entre outras funcionalidades.

O pacote survey permite a análise de dados para amostras complexas, como é o caso da PNAD Contínua.

O pacote readr permite a leitura de diversos tipos de dados, como dados separados por vírgulas ou tabulações.

Caso você não tenha esses pacotes instalados, poderá instalá-los com o seguinte comando:

install.packages(c("dplyr","survey","readr"))

Observação: Note que estamos utilizando a função genérica c() que combina três argumentos, nesse caso, três pacotes, a serem instalados (se não o foram previamente).

Com os pacotes já instalados, é necessário realizar a leitura de cada um deles, para isso, utiliza-se a função library, como no código abaixo:

#leitura dos pacotes
library(dplyr)
library(survey)
library(readr)

3.2 Abrindo os dados

Caso o arquivo inicial não esteja aberto (ou caso você queira utilizar outro arquivo salvo previamente), é preciso fazer a leitura do arquivo (salvo em .RDS). Para tanto, vamos utilizar a função readRDS, e a função as_tibble.

Observação: A função as_tibble é parte do pacote dplyr, e se trata de uma forma para ler os dados como dataframes.

pnadc <- as_tibble(readRDS(file = "pnadc2023T02"))

Após a leitura dos dados, no seu environment (canto superior direito) aparecerá um retângulo com o nome pnadc. Clicando nesse item, aparecerá a tabela da PNAD Contínua com todos os entrevistados e as colunas que representam cada uma das perguntas do questionário.

Nota: Observe que a base de dados que estamos utilizando, pnadc2023T02 possui 474.575 linhas, sendo que cada uma das linhas representa um participante da pesquisa. Por sua vez, as 421 colunas representam cada uma das informações do questionário, como: unidade federativa em que reside, raça, idade, educação, característica do trabalho, entre outros.

Para visualizar os nomes e a descrição de cada uma das variáveis, abra o arquivo dicionario_PNADC_microdados_trimestral.xls que foi baixado diretamente do site do IBGE na etapa anterior (e que deve estar salvo no seu diretório de trabalho).

3.3 Copiando variáveis pré-existentes

Vamos começar criando uma variável chamada urbana que é uma cópia dados da variável V1022 da PNAD Contínua. Dessa forma, estamos mantendo intacta a variável original (V1022), que caso necessário, poderá ser utilizada novamente em outro ponto do código.

# Dummy para residentes da área urbana
pnadc$urbana = pnadc$V1022

Observe que, no caso do comando acima, cada uma das colunas da base de dados pnadc está sendo acessada seguindo a lógica: [nome da base]$[nome da variável].

Após executar o comando, você poderá abrir novamente a base de dados (que aparece no seu environment, no canto superior direito do RStudio). Agora, a variável criada vai estar no final, na última coluna. Ela nos dá a informação de se o indivíduo mora na área rural ou na área urbana.

Faremos o mesmo para as variáveis de sexo, idade, raça (raca), renda média de todos os trabalhos (rendatrabtotal), pessoas na força de trabalho (forca) e pessoas ocupadas:

# Sexo
pnadc$sexo = pnadc$V2007
# Idade
pnadc$idade = pnadc$V2009
# Raça
pnadc$raca = pnadc$V2010
# Renda média habitual de todos os trabalhos (VD4019)
pnadc$rendatrabtotal = pnadc$VD4019
# Pessoas na força de trabalho
pnadc$forca = pnadc$VD4001
# Pessoas ocupadas e não ocupadas
pnadc$ocupadas = pnadc$VD4002

3.4 Criando variáveis novas

Podemos criar variáveis novas a partir dos dados existentes. Nos tópicos abaixo, foram selecionados alguns exemplos. Esses exemplos são apenas ilustrativos, para que você conheça funções que são úteis para a criação e modificação de variáveis. Vale ressaltar, que nenhum dos exemplos apresentados exaure todas as possibilidades! Na maioria dos casos, há diversas formas de criar a mesma variável, com funções e códigos diferentes!

3.4.1 Dummy para jovens

A variável V2009 contém informações sobre a idade de cada um dos entrevistados em anos. A partir dela, podemos criar uma variável dummy, ou seja, uma variável indicadora, para a qual será atribuído o número 1 (um) se o indivíduo é jovem, e 0 (zero) em todos os demais casos.

De acordo com o estatudo da juventude, são chamados de jovens os indivíduos com idade entre 15 e 29 anos. Para selecionar essa informação, vamos utilizar a função ifelse, como mostra o código abaixo:

# Jovens (entre 15 e 29 anos, de acordo com o estatuto da juventude)
pnadc$jovens = ifelse(pnadc$V2009 >= 15 & pnadc$V2009 <=29, 1, 0)

Observe que a função ifelse cria uma condição, se (if) o indivíduo possui idade maior ou igual a 15 anos (pnadc$V2009 >= 15) e (&) se o indivíduo possui idade menor ou igual a 29 anos (pnadc$V2009 <=29), a variável assume o valor um (1), caso contrário (else) assume o valor zero (0).

Dica: Para obter mais informações sobre uma função você pode utilizar o console! No caso da função que acabamos de ver, basta digitar ?ifelse no console e abrirá uma janela com as informações da função no canto inferior direito do RStudio.

Uma forma de verificar se essa variável foi criada corretamente, é realizar uma tabulação entre a variável com a informação de idade (V2009) e a variável criada com o código anterior. Para tanto, vamos usar a função table como mostra o código abaixo:

table(pnadc$V2009, pnadc$jovens)
##      
##          0    1
##   0   4330    0
##   1   5351    0
##   2   5440    0
##   3   5691    0
##   4   6263    0
##   5   6110    0
##   6   5929    0
##   7   6300    0
##   8   6533    0
##   9   6209    0
##   10  6453    0
##   11  6425    0
##   12  6668    0
##   13  6619    0
##   14  6850    0
##   15     0 6965
##   16     0 7044
##   17     0 7085
##   18     0 6865
##   19     0 6503
##   20     0 6569
##   21     0 6393
##   22     0 6756
##   23     0 6857
##   24     0 6202
##   25     0 6474
##   26     0 6306
##   27     0 6441
##   28     0 6379
##   29     0 6136
##   30  6382    0
##   31  6006    0
##   32  6123    0
##   33  6304    0
##   34  6507    0
##   35  6791    0
##   36  6679    0
##   37  6799    0
##   38  6834    0
##   39  6859    0
##   40  7885    0
##   41  7217    0
##   42  7196    0
##   43  7179    0
##   44  6685    0
##   45  6828    0
##   46  6547    0
##   47  6436    0
##   48  6488    0
##   49  6104    0
##   50  6636    0
##   51  6130    0
##   52  6190    0
##   53  6268    0
##   54  6040    0
##   55  6071    0
##   56  6019    0
##   57  5893    0
##   58  6095    0
##   59  5994    0
##   60  5947    0
##   61  5329    0
##   62  5473    0
##   63  5126    0
##   64  4918    0
##   65  5055    0
##   66  4403    0
##   67  4378    0
##   68  4076    0
##   69  3810    0
##   70  3890    0
##   71  3359    0
##   72  3387    0
##   73  3165    0
##   74  2863    0
##   75  2682    0
##   76  2430    0
##   77  2156    0
##   78  2029    0
##   79  1811    0
##   80  1821    0
##   81  1441    0
##   82  1481    0
##   83  1286    0
##   84  1127    0
##   85   960    0
##   86   859    0
##   87   758    0
##   88   627    0
##   89   497    0
##   90   452    0
##   91   359    0
##   92   297    0
##   93   242    0
##   94   179    0
##   95   172    0
##   96   123    0
##   97    76    0
##   98    50    0
##   99    36    0
##   100   40    0
##   101   16    0
##   102   20    0
##   103   13    0
##   104    7    0
##   105    6    0
##   106    5    0
##   107    3    0
##   108    2    0
##   110    1    0
##   115    1    0

ATENÇÃO: Nesse caso, não estamos usando os pesos amostrais! Faremos isso mais pra frente! Por hora, o que observamos nos resultados do console, é apenas a quantidade de pessoas de cada uma das idades, que foi entrevistada na pesquisa. Esse tipo de tabulação é bastante útil, principalmente quando estamos verificando se as alterações estão ocorrendo conforme o desejado. Posteriormente, utilizaremos o pacote survey para obter tabulações desses dados que sejam representativas da população Brasileira.

3.4.2 Dummy para chefe

A variável VD2002 informa a condição do respondente no domicílio. Uma categoria bastante utilizada para filtrar informações é obter estatísticas sobre o chefe do domicílio. Para criar uma variável dummy indicativa de sexo, podemos utilizar o seguinte código:

# Chefe de domicílio
pnadc$chefe = factor(ifelse(as.numeric(pnadc$VD2002) == 1, 1, 0),
                     labels = c("Outros", "Chefe"))

Observe que estamos utilizando uma combinação de três funções: as.numeric, ifelse e factor.

De “dentro” do código para fora: a função as.numeric está permitindo utilizar os números referentes a cada label da variável VD2002. Esse número está sendo usado dentro de outra função, ifelse, em que estamos informado que, quando a variável VD2002 assumir o valor 1, a dummy indicativa de chefe de domicílio deve assumir o valor 1, caso contrário, deve assumir valor zero. Todas essas informações, por sua vez, estão dentro de uma função factor, que primeiro estabelece regras para quais serão as categorias [ifelse(as.numeric(pnadc$VD2002) == 1, 1, 0)], e depois define nomes (labels) para cada categoria [labels = c(“Outros”, “Chefe”)]. Observe que os nomes são definidos conforme a ordem numérica, ou seja, nesse caso, do zero para o um.

3.4.3 Faixas de horas de trabalho

A variável V4039 possui a informação do número de horas trabalhadas no trabalho principal em um intervalo do 0 até 120 horas. Usando a função cut podemos criar faixas de horas de trabalho, conforme o exemplo:

# Faixas de horas trabalhadas
pnadc$horas = cut(pnadc$V4039, breaks=c(0,20,40,60,120))

Observe que a função cut possui dois argumentos, no primeiro, colocamos a variável que será “cortada”, nesse caso, V4030, do dataframe pnadc (pnadc$V4039). Em seguida, informamos quais serão os cortes [breaks=c(0,20,40,60,120)]. Com esses cortes, estamos criando quatro grupos. No primeiro estão indivíduos que trabalham entre 1 e 20 horas por semana, no segundo entre 21 e 40 horas, no terceiro entre 41 e 60 horas, e no quarto, entre 60 e 120 horas.

Novamente, conhecidas as devidas precauções (vide tópico anterior), podemos utilizar a função table para verificar como ficou a divisão:

table(pnadc$V4039, pnadc$horas)
##      
##       (0,20] (20,40] (40,60] (60,120]
##   1       85       0       0        0
##   2      248       0       0        0
##   3      229       0       0        0
##   4      552       0       0        0
##   5      549       0       0        0
##   6      486       0       0        0
##   7      313       0       0        0
##   8     1553       0       0        0
##   9      155       0       0        0
##   10    1979       0       0        0
##   11      25       0       0        0
##   12    1212       0       0        0
##   13      34       0       0        0
##   14     470       0       0        0
##   15    1379       0       0        0
##   16    1973       0       0        0
##   17      25       0       0        0
##   18     553       0       0        0
##   19      16       0       0        0
##   20   12804       0       0        0
##   21       0     339       0        0
##   22       0     236       0        0
##   23       0      31       0        0
##   24       0    3405       0        0
##   25       0    2644       0        0
##   26       0      95       0        0
##   27       0     115       0        0
##   28       0     599       0        0
##   29       0      18       0        0
##   30       0   15967       0        0
##   31       0      22       0        0
##   32       0     919       0        0
##   33       0      64       0        0
##   34       0      97       0        0
##   35       0    2012       0        0
##   36       0    4378       0        0
##   37       0      37       0        0
##   38       0     188       0        0
##   39       0      41       0        0
##   40       0   71423       0        0
##   41       0       0      13        0
##   42       0       0    1629        0
##   43       0       0      51        0
##   44       0       0   38114        0
##   45       0       0    3056        0
##   46       0       0     529        0
##   47       0       0      59        0
##   48       0       0   13566        0
##   49       0       0     250        0
##   50       0       0    6963        0
##   51       0       0      40        0
##   52       0       0     375        0
##   53       0       0      33        0
##   54       0       0     570        0
##   55       0       0     566        0
##   56       0       0    1485        0
##   57       0       0      23        0
##   58       0       0      89        0
##   59       0       0      23        0
##   60       0       0    5042        0
##   61       0       0       0        6
##   62       0       0       0       30
##   63       0       0       0      104
##   64       0       0       0       82
##   65       0       0       0      157
##   66       0       0       0      152
##   67       0       0       0        7
##   68       0       0       0       29
##   69       0       0       0        3
##   70       0       0       0     1001
##   71       0       0       0        9
##   72       0       0       0      497
##   73       0       0       0        3
##   74       0       0       0       15
##   75       0       0       0       54
##   76       0       0       0       22
##   77       0       0       0       50
##   78       0       0       0       36
##   79       0       0       0        2
##   80       0       0       0      188
##   81       0       0       0        3
##   82       0       0       0       21
##   83       0       0       0        1
##   84       0       0       0      328
##   85       0       0       0        8
##   86       0       0       0        2
##   87       0       0       0        2
##   88       0       0       0        5
##   90       0       0       0       56
##   91       0       0       0       27
##   92       0       0       0        2
##   94       0       0       0        4
##   95       0       0       0        3
##   96       0       0       0       43
##   98       0       0       0       41
##   99       0       0       0        1
##   100      0       0       0       32
##   105      0       0       0       19
##   108      0       0       0        7
##   110      0       0       0        2
##   112      0       0       0        9
##   115      0       0       0        1
##   118      0       0       0        1
##   119      0       0       0        1
##   120      0       0       0       20

3.4.4 Grandes regiões

Para agrupar as informações em cinco grandes regiões (“Norte”, “Nordeste”, “Sudeste”, “Sul”, “Centro-Oeste”), podemos partir da variável UPA, por exemplo, cujo primeiro algarismo representa a grande região.

# Grandes regiões
pnadc$regioes = factor(
  substr(pnadc$UPA, 1, 1),
  labels = c("Norte", "Nordeste", "Sudeste", "Sul", "Centro-Oeste")
)

Nesse código, estamos fazendo uma seleção do primeiro número e apenas este, da variável UPA [substr(pnadc$UPA, 1, 1)]. Na sequência, definimos os “labels” que atribuem os devidos nomes a cada uma dessas regiões [labels = c(“Norte”, “Nordeste”, “Sudeste”, “Sul”, “Centro-Oeste”)].

3.5 Combinando duas ou mais variáveis

Muitas vezes precisamos combinar diversas variáveis para chegar a algum resultado de interesse. Vejamos a alguns exemplos!

3.5.1 Nível de instrução

Há algumas variáveis na PNAD Contínua que indicam o grau mais elevado de instrução para cada indivíduo. Entre elas, a variável VD3004 traz o detalhamento de sete categorias de educação: Sem instrução e menos de 1 ano de estudo; Fundamental incompleto ou equivalente; Fundamental completo ou equivalente; Médio incompleto ou equivalente; Médio completo ou equivalente; Superior incompleto ou equivalente; e Superior completo.

Já a variável V3009A detalha 15 categorias, que incluem a formação de mestrado e doutorado.

Podemos unir as duas variáveis usando o seguinte código:

# Nível de instrução mais elevado, incluindo mestrado e doutorado
pnadc$educ = factor(
  case_when(
    as.numeric(pnadc$VD3004) == 7 &
      as.numeric(pnadc$V3009A) == 14 ~ 8,
    as.numeric(pnadc$VD3004) == 7 &
      as.numeric(pnadc$V3009A) == 15 ~  9,
    TRUE ~ as.numeric(pnadc$VD3004),
  ),
  labels = c(
    "Sem instrução",
    "Fundamental incompleto",
    "Fundamental completo",
    "Médio incompleto",
    "Médio completo",
    "Superior incompleto",
    "Superior Completo",
    "Mestrado",
    "Doutorado"
  )
)

Observe que estamos criando uma variável com o nome de educ como um fator [função factor] (variável categórica). Isso significa que há um número atribuído a cada uma das categorias, porém esse número não tem significado enquanto valor (dois não é o dobro de um, por exemplos, apenas indica uma categoria diferente). Ou seja, dessa forma, estamos informando no código, que não faz sentido fazer operações matemáticas (como somar e dividir) com esses números.

Seguindo o dicionário da PNAD Contínua para a variável VD3004, o número 1 foi atribuído para indivíduos “Sem instrução”, “Fundamental incompleta” é número 2, “Fundamental incompleto” é número 3, e assim por diante. Assim como fizemos anteriormente para a variável VD2004, agora, como a variável VD3004 também é um fator, estamos utilizando a função as.numeric, para que no código possamos nos referir apenas ao número correspondente a cada categoria. Além disso, estamos usando a função case_when (do pacote dplyr), para informarmos que quando a variável VD3004 é igual a 7 (ou seja, a pessoa possui ensino superior) e a variável V3009A é igual a 14 (indicando que essa pessoal finalizou um mestrado), a variável criada educ deve assumir o número 8, cujo label é “Mestrado”. Na sequência, indicamos que quando a variável VD3004 é igual a 7 (a pessoa possui ensino superior) e a variável V3009A é igual a 15 (indicando que essa pessoal finalizou um doutorado), a variável criada educ deve assumir o número 8, cujo label é “Doutorado”. Para todos os demais casos, estamos mantendo os números da VD3004, e atualizando a lista de nomes (labels) atribuídos a cada número.

Para visualizar o número de indivíduos entrevistas em cada uma das categorias criadas, podemos utilizar o seguinte comando:

table(pnadc$educ) 
## 
##          Sem instrução Fundamental incompleto   Fundamental completo 
##                  41630                 160750                  33927 
##       Médio incompleto         Médio completo    Superior incompleto 
##                  30789                 108143                  17627 
##      Superior Completo               Mestrado              Doutorado 
##                  52089                   1747                    798

ATENÇÃO: Novamente não estamos usando os pesos amostrais!

Com a função table, da forma como o último código mostra, apenas os nomes das variáveis aparecem no resultado. Para visualizarmos as numerações utilizadas, podemos combinar a função table com a função as.numeric:

table(as.numeric(pnadc$educ))
## 
##      1      2      3      4      5      6      7      8      9 
##  41630 160750  33927  30789 108143  17627  52089   1747    798

Nesse caso, vamos ver exatamente os números que foram atribuídos aos fatores.

3.5.2 Experiência em anos

As variáveis V40401, V40402 e V40403, trazem a informação de experiência em meses para o primeiro ano, meses para o segundo ano, e anos após dois anos de experiência. Podemos transformar essa variável para uma única variável (chamada exp) que utiliza a informação das três variáveis e informa a experiência dos indivíduos em anos.

Para tanto, vamos combinar a função mutate, que permite a modificação dos dados, com a função case_when, que permite estabelecer os critérios segundo os quais os dados serão modificados, conforme mostra o código abaixo:

#Experiencia
pnadc = mutate(pnadc, 
                exp = case_when(V40401 <= 11 ~ 0, V40402 <= 11 ~ 1, TRUE ~ V40403))

Ou seja, estamos dizendo que nos casos em que (case_when) o indivíduo respondeu entre 0 e 11 meses como tempo de experiência na pergunta V40401 (respondida apenas por pessoas com menos de 1 ano de experiência), estamos atribuindo valor zero (V40401 <= 11 ~ 0). Para indivíduos que responderam entre 0 e 11 meses como tempo de experiência na pergunta V40402 (respondida apenas para aqueles com experiência entre 1 e 2 anos), estamos atribuindo valor um (V40402 <= 11 ~ 1), e para os demais, com dois ou mais anos de experiência, estamos seguindo a variável V40403 (TRUE ~ V40403).

3.5.3 Tempo no desemprego

A variável de tempo no desemprego em anos segue exatamente a mesma lógica da varíavel anterior:

# Tempo de desemprego
pnadc = mutate (pnadc,
                tempo_desemp = case_when(V40761 <= 11 ~ 0, V40762 <= 11 ~ 1, TRUE ~ V40763))

3.5.4 Número de filhos

Nas variáveis do dicionário da PNAD Contínua não conseguimos saber se um indivíduo possui ou não filhos. No entando, sabemos quem são os filhos e/ou enteados da pessoa responsável pelo domicílio (i.e., chefe), e de seu cônjuge. Da forma como estamos construindo essa variável, não estamos distinguindo filhos de enteados.

Para chegar a informação de quantos filhos e/ou enteados cada chefe ou cônjuge do chefe possui, precisamos combinar várias funções.

Primeiro, precisamos saber quem são os filhos ou enteados dentro de um domicílio. De forma similar a criação da variável chefe, vamos combinar uma variável que indica um para filhos ou enteados, e zero para todas as demais condições do domicílio:

# Filhos e enteados no domicílio
pnadc$filhos = as.numeric(ifelse(as.numeric(pnadc$VD2002) == 3, 1, ifelse(as.numeric(pnadc$VD2002) == 4, 1, 0)))

Agora, dentro de cada domicílio, precisamos somar a quantidade de filhos ou enteados. Para isso, vamos combinar as funções group_by, mutate e sum, usando o pacote dplyr, conforme o código abaixo:

# Número de filhos no domicílio
pnadc = pnadc %>%
  group_by(ID_DOMICILIO) %>%
  mutate(nfilhos_d = sum(filhos, na.rm = FALSE))

Observe no código que estamos modificando o objeto pnadc (primeira linha). Na segunda linha, estamos definindo que, para cada ID_DOMICILIO, ou seja, para cada domicílio entrevistado na PNAD Contínua [group_by(ID_DOMICILIO)], estamos alterando a base de dados (usando a função mutate), para criar a variável nfilhos que é a soma da variável filhos [nfilhos = sum(filhos, na.rm = FALSE)].

De forma similar, podemos ainda criar variáveis para idades específicas, como a faixa etária entre 0 e 5 anos, conforme o código abaixo:

# Filhos de 0 a 5 anos
pnadc$filhos05 = as.numeric(ifelse(
  as.numeric(pnadc$VD2002) == 3 & as.numeric(pnadc$V2009) <= 5,
  1,
  ifelse(as.numeric(pnadc$VD2002) == 4 &
           as.numeric(pnadc$V2009) <= 5, 1, 0)
))
# Número de filhos no domicílio de 0-5anos
pnadc = pnadc %>%
  group_by(ID_DOMICILIO) %>%
  mutate(nfilhos05_d = sum(filhos05, na.rm = FALSE))

Já sabemos o número de filhos total por domicílio e o número de crianças com menos de 5 anos de idade. Resta agora, atribuir esse número de filhos/enteados, apenas para os indivíduos que são chefes ou cônjuges do chefe:

# Número de filhos no domicílio
pnadc$nfilhos = case_when(as.numeric(pnadc$VD2002) != 1 &
                            as.numeric(pnadc$VD2002) != 2 ~ 0,
                          TRUE ~ pnadc$nfilhos_d)
pnadc$nfilhos05 = case_when(as.numeric(pnadc$VD2002) != 1 &
                            as.numeric(pnadc$VD2002) != 2 ~ 0,
                          TRUE ~ pnadc$nfilhos05_d)

3.6 Salvando as informações

No código abaixo estamos usando a função sel_var, que permite criar um objeto com os nomes de uma seleção de variáveis. Essas são as variáveis que gostaríamos manter. Algumas estão sendo mantidas porque são variáveis identificadoras e essenciais para toda pesquisa, e outras são as variáveis que acabaram de ser criadas.

# Selecionar uma parte da base de dados (útil para liberar memória)
# Dica: usar colnames(pnadc) para lista de variáveis
{
  sel_var <-
    c(
      "Ano",
      "Trimestre",
      "UF",
      "Capital",
      "RM_RIDE",
      "UPA",
      "Estrato",
      "V1008",
      "V1014",
      "V1016",
      "V1022",
      "V1023",
      "V1027",
      "V1028",
      "V1029",
      "V1033",
      "posest",
      "posest_sxi",
      "ID_DOMICILIO",
      "urbana",
      "sexo",
      "idade" ,
      "raca" ,
      "educ"  ,
      "jovens"  ,
      "rendatrabtotal",
      "forca",
      "ocupadas",
      "horas"     ,
      "regioes"    ,
      "exp"       ,
      "tempo_desemp",
      "chefe"  ,
      "filhos",
      "nfilhos_d",
      "nfilhos",
      "filhos05",
      "nfilhos05_d",
      "nfilhos05"
    )
}

Finalmente, a partir da lista, vamos criar uma nova base de dados chamada “pnadc”, que é um subset da base de dados anterior. Na sequência, salvamos esse objeto alterado, com a função saveRDS:

# Salvando variáveis selecionadas
pnadc <-
  subset(pnadc, select = sel_var)
saveRDS(pnadc, "pnadc2023T02r")

4 Tabulação de dados

Dado o tamanho da base de dados torna-se essencial fazer tabulações estatísticas, ou seja, construir tabelas, gráficos e estatísticas para analisar os dados.

Nesse capítulo vamos instalar novos pacotes, abrir novamente os dados e gerar estatísticas.

4.1 Pacotes necessários

Para realizar a tabulação de dados e criar gráficos, será necessário instalar mais quatro pacotes: survey, tidyverse, dplyr, srvyr. Caso você ainda não tenha utilizado esses pacotes, poderá utilizar a função install.packages, seguida pelos nomes dos pacotes desejados, entre aspas, como no exemplo abaixo:

install.packages(c("survey", "tidyverse", "dplyr", "srvyr"))

Após inserir esse código no console e pressionar “Enter”, o R iniciará o processo de download e instalação dos pacotes automaticamente.

Antes de começar a fazer as tabulações, vamos entender um pouco sobre cada um desses pacotes.

4.1.1 Pacote “survey”

O pacote survey é utilizado para a análise de dados com amostras complexas. Na prática, esse pacote possui a função de vincular os “grandes dados” àqueles que serão analisados. Ou seja, por meio dele, vamos fazer a expansão da amostra considernado o desenho complexo da PNAD Contínua, de forma a obter as estatísticas referentes à população brasileira.

Essas operações são feitas de forma automática e confiável, por meio de funções como svydesign e svrepdesign, que incorporam as informações do desenho de pesquisa nos dados, e de funções como svymean e svytable que permitem o cálculo de estatísticas para a população.

Com o pacote instalado, para acioná-lo, precisamos do comando:

library(survey)

4.1.2 Pacote “tidyverse”

O tidyverse é uma coleção de pacotes que possui a finalidade de manipulação e visualização de dados em geral, podendo ser ativado (após instalação) com o comando abaixo.

library(tidyverse)

Algumas de suas funções são: readr (leitura de dados), tibble (transforma a base de dados em um data frame), e dplyr (gramática de manipulação de dados), ggplot2 (criação de gráficos). Caso queira saber mais sobre o pacote, sugerimos a leitura do material complementar: Os pacotes tidyverse

4.1.3 Pacote “srvyr”

O pacote srvyr irá auxliar na construção de estatísticas em pesquisas do tipo survey, garantindo mais flexibilidad no uso das funções do paocte survey.

#library(dplyr)
library(srvyr)

4.1.4 Pacote “PNADcIBGE”

Vamos ativar novamente o pacote PNADcIBGE (usado na leitura dos dados), fornecido pelo IBGE, e que contém funções específicas para a utilização do design complexo da PNAD contínua. Se você seguiu todos os passos das seções anteriores, o pacote já foi instalado, então basta ativá-lo com o comando:

#library(dplyr)
library(PNADcIBGE)

4.2 Abrindo os dados

Caso os dados não estejam no seu environment, abra novamente os dados salvos anteriormente no diretório com o seguinte comando:

pnadc <- readRDS(file = "pnadc2023T02r")

ATENÇÃO: Observe que estamos abrindo o arquivo que possui apenas as variáveis selecionadas no capítulo anterior!

É possível observar a base de dados criada clicando no objeto destacado em vermelho:

Para a melhor visualização dos dados, podemos deixar os valores sem notação científica com o código abaixo:

options(scipen = 999)

Precisamos informar ao R que a amostra da PNAD contínua é complexa. O design da amostra desempenha um papel fundamental em várias etapas, desde o planejamento de experimentos, a estruturação de dados e a criação de gráficos até a apresentação de resultados. Um bom design ajuda a tornar a análise de dados mais eficiente e a comunicação de resultados mais eficaz.

No caso da PNAD contínua caso, vamos usar o design estabelecido pelo IBGE, por meio da função pnadc_design, disponível no pacote PNADcIBGE:

spnadc <- pnadc_design(data_pnadc = pnadc)

ATENÇÃO: As operações com amostras complexas costumam demorar, a depender da capacidade do seu computador, o último comando pode levar alguns minutos.

Feito isso, criamos um novo objeto, chamado spnadc que incorpora as informações do design complexo da PNAD contínua. Com esse objeto poderemos calcular médias, tabular estatísticas, verificar outros dados da pesquisa, e depois utilizar esses resultados para visualizações em gráficos e figuras.

4.3 Médias

Para calcular as médias, vamos utilizar a função svymean do pacote survey. Nesse caso, estaremos calculado a média de uma variável considerando as ponderações da amostra complexa, de forma que a média reflita a população e não apenas a amostra de dados.

No comando a seguir estamos calculando a media de renda a partir dos dados sobre o rendimento mensal habitual de todos os trabalhos para pessoas de 14 anos ou mais de idade (na base de dados original, trata-se da variável VD4019)

# Renda média habitual de todos os trabalhos (criada a partir da VD4019)
svymean( ~ rendatrabtotal, design = spnadc, na.rm = TRUE)
##                  mean     SE
## rendatrabtotal 2921.3 30.636

Observe que no comando acima, no primeiro argumento da função svymean, estamos usando a variável VD4019, que foi renomeada para rendatrabtotal. No segundo argumento, estamos informando que o design da pesquisa está salvo no objeto spnadc (design = spnadc), e no último argumento, informamos que as informações não disponíveis, i.e. com NA (Not Available), não devem ser utilizados para computar essa média (na.rm = TRUE). No caso da variável de interesse, o rendimento habitual de todos os trabalhos, temos muitas pessoas com informações não disponíveis (NA), a maior parte delas são pessoas que não estão no mercado de trabalho (como crianças, idosos e pessoas fora da força de trabalho em geral, ou pessoas desempregadas). Assim, ao incluir na.rm = TRUE, a média de rendimento será calculada considerando apenas as pessoas que informaram algum rendimento do trabalho.

No exemplo a seguir é realizada uma análise da mesma variável, “rendimento mensal habitual de todos os trabalhos para pessoas de 14 anos ou mais de idade”, mas agora olhando os dados por “sexo” (variável criada a partir da V2007). Para obter esses dados vamos continuar usando o pacote survey, combinando as funções svyby e svymean:

# Renda média habitual (VD4019) por sexo (V2007)
svyby(~ rendatrabtotal,
        ~ sexo,
        design = spnadc,
        svymean ,
        na.rm = TRUE)
##          sexo rendatrabtotal       se
## Homem   Homem       3196.466 35.47102
## Mulher Mulher       2551.297 29.25132

Na primeira linha, observe que estamos usando a função svyby, que permite calcular uma estatística para subconjuntos dados dados. Nesse caso, calcular a renda de todos os trabalhos separadamente para os subconjuntos de homens e mulheres. Ainda na primeira linha o símbolo “~” é usado para indicar que rendatrabtotal é a variável que estamos interessados em analisar. O segundo argumento, indica que os subgrupos serão separados pela variável sexo de cada entrevistado. O terceiro argumento informa que objeto spnadc contém o design da pesquisa (design = spnadc); o quarto argumento informa qual será a função aplicada (svymean); e, o quinto argumento, novamente informa que as informações não disponíveis não devem entrar no cômputo da média (na.rm = TRUE)

Com uma modificação simples no código, podemos calcular a renda média para outros grupos, por exemplo, por Unidade da Federação, utilizando a variável UF:

# Renda média habitual (VD4019) por UF
svyby(~ rendatrabtotal,
        ~ UF,
        design = spnadc,
        svymean ,
        na.rm = TRUE)
##                                      UF rendatrabtotal        se
## Rondônia                       Rondônia       2576.006  89.87499
## Acre                               Acre       2413.048  91.97916
## Amazonas                       Amazonas       2201.684  99.04714
## Roraima                         Roraima       2690.296 173.99268
## Pará                               Pará       2202.990 103.97174
## Amapá                             Amapá       2528.578 144.98758
## Tocantins                     Tocantins       2554.678  93.65067
## Maranhão                       Maranhão       1835.986  67.91854
## Piauí                             Piauí       2288.828 241.28635
## Ceará                             Ceará       1999.905  87.12939
## Rio Grande do Norte Rio Grande do Norte       2131.392 100.88478
## Paraíba                         Paraíba       2085.125 129.16129
## Pernambuco                   Pernambuco       2091.947  83.89958
## Alagoas                         Alagoas       1978.850  72.27104
## Sergipe                         Sergipe       2135.287 146.14576
## Bahia                             Bahia       1836.098  59.84501
## Minas Gerais               Minas Gerais       2660.155  71.56524
## Espírito Santo           Espírito Santo       2904.066 103.66434
## Rio de Janeiro           Rio de Janeiro       3528.855  91.70051
## São Paulo                     São Paulo       3537.097 106.85987
## Paraná                           Paraná       3133.132  74.25169
## Santa Catarina           Santa Catarina       3237.611  53.29280
## Rio Grande do Sul     Rio Grande do Sul       3193.539  65.73715
## Mato Grosso do Sul   Mato Grosso do Sul       3184.303 133.40108
## Mato Grosso                 Mato Grosso       3161.414  83.41328
## Goiás                             Goiás       2969.192  91.97766
## Distrito Federal       Distrito Federal       4823.385 228.95826

ATENÇÃO: Você pode adaptar os códigos para gerar análises do seu interesse. Experimente verificar outras possibilidades do pacote survey e outras variáveis da PNAD contínua.

Podemos ainda combinar mais de uma variável para agrupar as informações, por exemplo, podemos verificar qual é o rendimento por “sexo” em cada uma das Unidades da Federação (“UF”):

# Renda média por sexo e UF
svyby(
  ~ rendatrabtotal,
  ~ UF + sexo,
  design = spnadc,
  svymean ,
  na.rm = TRUE,
  keep.names =  FALSE
)
##                     UF   sexo rendatrabtotal        se
## 1             Rondônia  Homem       2755.172 110.14936
## 2                 Acre  Homem       2457.120 105.86895
## 3             Amazonas  Homem       2278.055 104.32611
## 4              Roraima  Homem       2820.968 188.89135
## 5                 Pará  Homem       2324.440 123.07943
## 6                Amapá  Homem       2465.894 148.00588
## 7            Tocantins  Homem       2785.274 118.76864
## 8             Maranhão  Homem       1934.434  77.99617
## 9                Piauí  Homem       2301.412 217.75103
## 10               Ceará  Homem       2108.896  99.65692
## 11 Rio Grande do Norte  Homem       2227.528 119.28918
## 12             Paraíba  Homem       2218.988 155.60473
## 13          Pernambuco  Homem       2257.881 106.98358
## 14             Alagoas  Homem       2080.571  81.67845
## 15             Sergipe  Homem       2227.445 159.46357
## 16               Bahia  Homem       1882.200  66.72238
## 17        Minas Gerais  Homem       2966.612  92.67313
## 18      Espírito Santo  Homem       3273.285 135.97490
## 19      Rio de Janeiro  Homem       3871.474 119.68211
## 20           São Paulo  Homem       3961.078 124.03140
## 21              Paraná  Homem       3539.310  98.18075
## 22      Santa Catarina  Homem       3564.148  64.93505
## 23   Rio Grande do Sul  Homem       3530.916  80.17418
## 24  Mato Grosso do Sul  Homem       3632.298 180.15573
## 25         Mato Grosso  Homem       3523.457 100.64622
## 26               Goiás  Homem       3336.891 111.51521
## 27    Distrito Federal  Homem       5609.039 323.05766
## 28            Rondônia Mulher       2284.732 102.33556
## 29                Acre Mulher       2347.789 104.72195
## 30            Amazonas Mulher       2079.010 124.53731
## 31             Roraima Mulher       2491.415 180.96035
## 32                Pará Mulher       2013.791 102.31035
## 33               Amapá Mulher       2621.686 161.47158
## 34           Tocantins Mulher       2226.546  92.09521
## 35            Maranhão Mulher       1695.850  69.08747
## 36               Piauí Mulher       2270.540 287.29541
## 37               Ceará Mulher       1841.421  85.59155
## 38 Rio Grande do Norte Mulher       1987.062 111.53765
## 39             Paraíba Mulher       1890.957 113.98740
## 40          Pernambuco Mulher       1851.276  69.63050
## 41             Alagoas Mulher       1832.771  68.58657
## 42             Sergipe Mulher       2002.260 147.82424
## 43               Bahia Mulher       1766.996  70.34023
## 44        Minas Gerais Mulher       2239.296  57.71033
## 45      Espírito Santo Mulher       2398.768  74.34018
## 46      Rio de Janeiro Mulher       3090.970  80.84703
## 47           São Paulo Mulher       3016.579  98.86539
## 48              Paraná Mulher       2580.450  56.36999
## 49      Santa Catarina Mulher       2822.313  49.15438
## 50   Rio Grande do Sul Mulher       2767.760  63.37677
## 51  Mato Grosso do Sul Mulher       2594.384  95.41669
## 52         Mato Grosso Mulher       2627.747  77.54448
## 53               Goiás Mulher       2461.966  95.20454
## 54    Distrito Federal Mulher       3912.948 176.73463

Observe que nos últimos três trechos de código, os resultados foram obtidos na janela Console do RStudio. Porém, em alguns casos será interessante salvar esses resultados como um objeto, que possa posteriormente ser acessado de forma mais simples. Para tanto, basta incluir um nome para o objeto e o símbolo de igualdade (=) ou <-:

# Renda média por sexo e UF - SALVANDO COMO OBJETO!
rendaUFsexo = svyby(
  ~ rendatrabtotal,
  ~ UF + sexo,
  design = spnadc,
  svymean ,
  na.rm = TRUE,
  keep.names =  FALSE
)

Observe que agora, há um objeto chamado rendaUFsexo no seu environment, que contém exatamente os mesmos dados antes observados no Console. Esse objeto pode ser manipulado separadamente, e utilizado por exemplo, para criar gráficos dessas variáveis (faremos isso no próximo capítulo!).

4.4 Tabelas de Frequência

A função svytable é utilizada para tabelas de contingência, e é parte do pacote survey. Ele calcula a tabulação cruzada, ou seja, a relação entre duas ou mais variáveis, ponderada, de acordo com as informações da amostra complexa.

No exemplo a seguir, estamos usando a função svytable para criar uma tabela de frequência ponderada da variável de “Condição de ocupação na semana de referência para pessoas de 14 anos ou mais de idade” (originalmente VD4002). Essa variável foi salva com o nome ocupadas no capítulo anterior.

 # Numero de pessoas ocupadas (VD4002)
svytable( ~ ocupadas,
    design = subset(spnadc, forca == "Pessoas na força de trabalho")
  )
## ocupadas
##    Pessoas ocupadas Pessoas desocupadas 
##            98909564             8647021

Observe que dentro do argumento design, estamos utilizando também a função subset, que seleciona um subconjunto de dados. Nesse caso, definimos o subconjunto como forca == “Pessoas na força de trabalho”. Dessa forma, estamos selecionando apenas pessoas que estejam na força de trabalho, ou seja, apenas pessoas que estão trabalhando, ou estão procurando por emprego. Os demais indivíduos, não entram no cálculo!

Nota: A função subset é utilizada para criar um subconjunto de um quadro de dados, ou também para a eliminação de colunas. Nesse caso, o quadro de dados original permanece intacto, ao mesmo tempo em que é gerado o subconjunto pedido. Essa função é frequentemente usada para filtrar as linhas de um quadro de dados (data frame) ou de um vetor (vector) de acordo com critérios específicos. No caso de amostras complexas, o uso de subsets permite manter as informações completas do design, mesmo ao tabular dados para apenas uma parte da amostra.

Seguindo a mesma lógica anterior, podemos fazer uma tabela relacionando duas variáveis.

Observe que o script abaixo cria um objeto chamado ocupadoUF que contém uma tabela de frequência ponderada, criada com base nas variáveis UF e pessoas ocupadas ou não (variável ocupadas). Novamente, estamos usando um desenho amostral específico no qual os casos são filtrados para incluir apenas “Pessoas na força de trabalho” (design = subset(spnadc, forca == “Pessoas na força de trabalho”)).

# número de pessoas ocupadas (VD4002) por UF (apenas para pessoas na força de trabalho)
ocupadoUF = data.frame(svytable(
    ~ UF + ocupadas,
    design = subset(spnadc, forca == "Pessoas na força de trabalho")
  ))

Podemos modificar o código para incluir mais variáveis.

No código seguinte, além do número de pessoas ocupadas por UF, estamos incluindo a informação de sexo do entrevistado (V2007). Novamente, estamos considerando apenas as pessoas na força de trabalho e salvando os resultados no objeto ocupadoUFsexo.

Pode-se observar que do comando anterior para o comando abaixo o objeto criado passa de duas para três variáveis. É sempre importante lembrar que todos os objetos que se deseja salvar devem ter nomes diferentes.

# número de trabalhadores ocupados (VD4002) por UF e sexo (apenas para pessoas na força de trabalho)
ocupadoUFsexo = data.frame(svytable(
  ~ UF + sexo + ocupadas,
  design = subset(spnadc, forca == "Pessoas na força de trabalho")
))

Nota: Observe que, como estamos usando três variáveis categóricas (Unidade da Federação, sexo e condição de ocupação) a ordem das variáveis não altera os valores obtidos no resultado.

4.5 Reorganizando dados

4.5.1 Função “pivot_wider”

A função pivot_wider é parte do pacote tidyverse, e tem por objeto reorganizar uma tabela. No código abaixo, o objetivo é fazer com que as informações de pessoas ocupadas e não ocupadas se transformem em colunas da base de dados, e apenas as UF’s sejam colocadas nas linhas:

ocupadoUF_w = pivot_wider(
    ocupadoUF,
    id_cols = "UF",
    names_from = c("ocupadas"),
    values_from = "Freq"
  )

Observe que após definir quais será o objeto modificado no primeiro argumento (ocupadoUF), o segundo argumento (id_cols) define quais serão os identificadores da coluna que nomeia os dados (id_cols = “UF”). O terceiro argumento, controla quais serão os nomes das novas colunas (names_from = c(“ocupadas”)); enquanto o último argumento controla quais são os valores que formarão o conteúdo dessas colunas (values_from = “Freq”).

Essa modificação será útil para análises posteriores, especialmente quando desejamos comparar valores em diferentes categorias.

Podemos utilizar a mesma lógica para alterar a disposição dos dados com informações por UF e sexo. Note que nesse caso, no argumento names_from, estamos usando um vetor c() com duas variáveis:

ocupadoUFsexo_w = pivot_wider(
  ocupadoUFsexo,
  id_cols = "UF",
  names_from = c("sexo", "ocupadas"),
  values_from = "Freq"
)

De forma similar, a função pivot_wider também pode ser utilizada para rearranjar a variável de renda por sexo e UF. Como mostra o trecho de código abaixo:

rendaUFsexo_w = pivot_wider(
  rendaUFsexo,
  id_cols = "UF",
  names_prefix = "Renda_",
  names_from = c("sexo"),
  values_from = "rendatrabtotal"
)

Observe que no comando acima, em relação aos anteriores, foi acrescida o argumento names_prefix = “Renda_”. Quando fazemos isso, estamos definindo um prefixo para os nomes das novas colunas criadas após a transformação. Ou seja, todas as novas colunas terão nomes que começam com “Renda_”.

Com isso, o código está transformando o objeto rendaUFsexo de um formato longo (wide), em que os valores de renda estão empilhados sob diferentes categorias. Ou seja, cada categoria da variável sexo se torna uma coluna separada e os valores de renda são distribuídos nas colunas correspondentes. Clique duas vezes para abrir o objeto no seu environment e observe os dados criados. Observe, que a UF continua a ser usada como um identificador para cada linha.

4.5.2 Função “merge”

A função merge no R é usada para combinar dois ou mais conjuntos de dados (data frames, por exemplo) com base em uma ou mais colunas em comum. Isso é muito útil ao trabalhar com dados que estão em diferentes tabelas, mas que compartilham um identificador ou chave comum. O merge permite unir esses dados com base nessa chave, criando um único conjunto de dados que combina informações de várias fontes.

No codigo abaixo estamos realizando duas operações de mesclagem entre os data frames ocupadoUF_w, ocupadoUFsexo_w e rendaUFsexo_w com base em UF.

UF = merge(ocupadoUF_w, ocupadoUFsexo_w, by = "UF") %>%  merge(rendaUFsexo_w,  by = "UF")

Observe que primeiro fazemos a mesclagem entre ocupadoUF e ocupadoUFsexo com base na coluna UF, e o resultado é então mesclado novamente com o data frame rendaUFsexo, utilizando a mesma coluna.

Isso cria um novo data frame, chamado “UF”, que combina informações de ocupação e renda por unidade federativa.

Observe que, ao manipular esses objetos, não estamos mais utilizando o pacote survey (provavelmente, as últimas operações foram muito mais rápidas!). Isso porque, já tabulamos todas as estatísticas para a população, agora, estamos apenas reunindo essas informações para utilizá-las posteriormente em outros pacotes.

5 Gráficos

Em geral, o R, em sua versão básica, inclui funções para criação de gráficos. No entanto, ainda que úteis para análises exploratórias, essas ferramentas são bastante limitadas em termos das possibilidades de edição.

Um dos pacotes mais utilizados para gráficos é o ggplot2, que tem a função de visualização de dados. Vale ressaltar, que o ggplot2 utiliza apenas tabelas em formato tidy, em que as colunas são variáveis e as linhas são observações,, como as que foram geradas na seção anterior.

Caso você ainda não tenha usado o ggplot2 será necessário instalar:

install.packages("ggplot2")

Caso o pacote já esteja instalado, ou após instalá-lo, basta acioná-lo com o código:

library(ggplot2)

5.1 Renda por UF e Sexo

Para montar um gráfico vamos vamos utilizar as tabulações desenvolvidas da seção anterior. Caso você não tenha o objeto rendaUFsexo no seu environment, será preciso refazer as seções anteriores.

Com o objeto rendaUFsexo no seu environment, temos condições de montar o gráfico com o código a seguir:

# Grafico de salario medio por UF e sexo
ggplot(data = rendaUFsexo, aes(x = UF, y = rendatrabtotal)) +
  geom_bar(aes(fill = sexo), stat = "identity", position = "dodge") +
  scale_fill_manual(values=c("lightskyblue2", "steelblue3")) + 
  xlab("Unidades da Federação") +
  ylab("Renda de todos os trabalhos") +
  scale_x_discrete(guide = guide_axis(angle = 90)) +
  ggtitle("PNAD Contínua") +
  labs(subtitle = "Segundo trimestre de 2023") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(plot.subtitle = element_text(hjust = 0.5))

Neste código, um gráfico de barras é criado. Na primeira linha do código, estamos informando que vamos utilizar os dados do objeto rendaUFsexo, e que as variáveis usadas são UF no eixo x e rendatrabtotal no eixo y ((data = rendaUFsexo, aes(x = UF, y = rendatrabtotal)). A segunda linha, indica que as barras serão coloridas com base na variável sexo, e as demais argumentos indicam como os dados serão usados, como serão ajustas as barras e a posição das barras. A paleta de cores utilizada foi definida manualmente na terceira linha com a função scale_fill_manual. Você pode checar mais cores em r-charts. As linhas seguintes, indicam os rótulos dos eixos x e y são definidos com xlab e ylab, respectivamente, com a orientação dos rótulos do eixo x ajustada para 90 graus. O título do gráfico foi definido como “PNAD Contínua” (ggtitle(“PNAD Contínua”)) com um subtítulo “Segundo trimestre de 2023 (labs(subtitle = “Segundo trimestre de 2023”)). As configurações de alinhamento para o título e o subtítulo também são ajustadas nas duas últimas linhas.

5.2 Desemprego por UF

No capítulo anterior, criamos um objeto, ocupadoUF_w com o número de pessoas ocupadas e desocupadas por UF. Agora, queremos criar uma taxa de desemprego por UF para visualizarmos graficamente. Observe que estamos utilizando apenas o objeto ocupadoUF_w e não mais a base de dados completa. Nesse caso, basta fazer uma operação matemática simples com as colunas do objeto:

ocupadoUF_w$desemprego = 100 * ocupadoUF_w$`Pessoas desocupadas` / (ocupadoUF_w$`Pessoas desocupadas` + ocupadoUF_w$`Pessoas ocupadas`)

Ou seja, este código está atribuindo uma nova coluna chamada “desemprego” ao data frame “ocupadoUF”. O valor dessa coluna é calculado como a porcentagem de pessoas desocupadas em relação ao total de pessoas desocupadas mais ocupadas. Multiplicando por 100. Assim, podemos visualizar o resultado como um percentual.

A partir desses dados, no código abaixo, estamos criando um gráfico de barras (colunas):

# Gráfico
ggplot(data = ocupadoUF_w, aes(x = UF, y = desemprego)) +
  geom_col (fill = "lightskyblue2") +
  xlab("Unidades da Federação") +
  scale_x_discrete(guide = guide_axis(angle = 90)) +
  ylab("taxa % de desemprego") +
  ggtitle("PNAD Contínua - Taxa de desemprego") +
  labs(subtitle = "Segundo trimestre de 2023") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(plot.subtitle = element_text(hjust = 0.5))

Observe que a lógica desse código é semelhante ao anterior. O eixo x representa as unidades da federação (UF), o eixo y representa a taxa de desemprego em porcentagem (%). As barras são preenchidas com a cor “lightskyblue2”. O gráfico possui rótulos para os eixos x e y, bem como um título (“PNAD Contínua - Taxa de desemprego”) e um subtítulo (“Segundo trimestre de 2023”). A orientação dos rótulos no eixo x é ajustada para 90 graus. As configurações de alinhamento para o título e o subtítulo também são ajustadas.