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.
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")
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.
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)
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).
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
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!
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.
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.
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
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”)].
Muitas vezes precisamos combinar diversas variáveis para chegar a algum resultado de interesse. Vejamos a alguns exemplos!
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.
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).
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))
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)
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")
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.
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.
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)
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
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)
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)
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.
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!).
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.
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.
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.
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)
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.
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.
Seguem algumas sugestões de materiais disponíveis online sobre a linguagem R:
Analysis of Complex Survey Samples
El arte de programa en R: un lenguaje para la estadística
Introdução ao uso do programa R - Victor Lemes Landeiro/ UFMG