-
Notifications
You must be signed in to change notification settings - Fork 1
/
README.Rmd
154 lines (121 loc) · 4.03 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
---
output: github_document
---
<!-- README.md is generated from README.Rmd. Please edit that file -->
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%"
)
library(pnadc)
```
# pnadc
<!-- badges: start -->
[![Lifecycle: experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://www.tidyverse.org/lifecycle/#experimental)
<!-- badges: end -->
O objetivo desse pacote é automatizar algumas análises feitas com os
microdados da PNAD Contínua.
> Ainda em fase MEGA-EXPERIMENTAL.
A API VAI MUDAR
## Instalação
``` r
install.packages("pnadc")
```
## Como usar
O pacote foi pensado para que possa ser usado assim:
### Ler dados da PNAD Continua
Há funções de utilidade para baixar os dados da PNAD e para
extrair os arquivos.
```{r download, eval = FALSE}
library(pnadc)
# Vai baixar numa pasta "dados" na raiz do projeto.
# Isso não vai ser possível de alterar pelo pacote para dar uma
# estrutura de trabalho homogênea e que possa ser confiada
download_pnad(2019, 4)
unzip_pnad(2019, 4)
```
Assim como para leitura dos dados com as variaveis padronizadas.
```{r leitura}
pnad2019_4 <- ler_pnad(2019, 4)
```
### Funções de utilidade
A PNAD é uma pesquisa estratificada e em geral é analisada usando o pacote
`survey`. Mas esse pacote é muito lento para realizar alguns cálculos e
principalemente para fazer análises exploratórias.
```{r utils}
pnad2019_4 %>%
# Na verdade um contador respeitando os pesos
participacao(sexo)
# Deve funcionar com group_by
# Ainda não funciona
library(dplyr)
pnad2019_4 %>%
group_by(vinculo_primario) %>%
participacao(sexo)
pnad2019_4 %>%
tidyr::nest(data = -vinculo_primario) %>%
mutate(prop = purrr::map(data, participacao, sexo)) %>%
select(-data) %>%
tidyr::unnest(prop)
```
```
O ideal era que essas funções de utilidade não se contivessem apenas
a dados relativos mas também fossem capazes de somar totais.
```{r totais, eval = FALSE}
pnad2019_4 %>%
# Na verdade um somador respeitando os pesos e as projeções de pop
total(sexo)
# Deve funcionar com group_by
pnad2019_4 %>%
grou_by(regiao) %>%
total(sexo)
```
O pacote possibilita fazer coisas como
```{r anim, eval = FALSE}
pnad <- tibble::tibble(
ano = c(rep(2012:2019, each = 4), 2020),
trimestre = rep(1:4, length.out = 33)
) %>%
mutate(dado = purrr::map2(ano, trimestre, ler_pnad)) %>%
pull(dado) %>%
map_df(~nest(.x, dado = -c(ano, trimestre, vinculo_primario)))
mais_comum <- function(x) {
resp <- sort(table(x), decreasing = TRUE)
if (length(resp) == 0) return("")
names(resp)[[1]]
}
estats <- pnad %>%
group_by(ano, trimestre, vinculo_primario) %>%
mutate(
brancos = map_dbl(dado, ~weighted.mean(.x$cor == 1, .x$peso_posestrat, na.rm = TRUE)),
homens = map_dbl(dado, ~weighted.mean(.x$sexo == 1, .x$peso_posestrat, na.rm = TRUE)),
idade = map_dbl(dado, ~weighted.mean(.x$idade, .x$peso_posestrat, na.rm = TRUE)),
renda = map_dbl(dado, ~weighted.mean(.x$rendimento_primario, .x$peso_posestrat, na.rm = TRUE)),
jornada = map_dbl(dado, ~weighted.mean(.x$jornada_principal, .x$peso_posestrat, na.rm = TRUE)),
profissao = map_chr(dado, ~mais_comum(.x$profissao_principal)),
vinculo = map_chr(vinculo_primario, ~case_when(
.x == "01" ~ "Privado carteira",
.x == "02" ~ "Privado informal",
.x == "03" ~ "Doméstico carteira",
.x == "04" ~ "Doméstico informal",
.x == "05" ~ "Público carteira",
.x == "06" ~ "Público s/ carteira",
.x == "07" ~ "Militar",
.x == "08" ~ "Empregador",
.x == "09" ~ "Conta-própria",
.x == "10" ~ "Familiar",
TRUE ~ NA_character_
)),
periodo = ano + (trimestre - 1) / 4
)
pontos <- ggplot(filter(estats, !is.na(periodo)), aes(brancos, homens, col = vinculo)) +
geom_point()
anim <- pontos +
labs(title = 'Year: {ano}T{trimestre}', x = '% brancos', y = '% homens') +
gganimate::transition_time(periodo) +
gganimate::ease_aes('linear')
anim
```
![](pnad.gif)