Da necessidade de abrir os microdados do IBGE

O IBGE divulga diversas tabulações em planilhas e na plataforma SIDRA, mas o conjunto de possibilidades de relatórios que essas fontes são capazes de gerar não correspondem à diversidade de cruzamentos que botar a mão nos microdados proporciona.

Em uma pesquisa rápida nos pedidos do e-SIC, é possível ver que vários profissionais que recorrem à lei 12.527/2011 para obtenção de dados oficiais se esbarram na dificuldade de abrir e manipular as tabelas de dados brutos. Como a lei não obriga as instituições públicas a produzirem dados derivados daqueles divulgados oficialmente, muitos estudantes ou jornalistas se veem diante da necessidade de aprender a fazer as suas próprias análises, sem terceirizar este processo tão importante.

Considerações

Este manual se destina a qualquer pessoa que tenha a necessidade de abrir os microdados do Censo Demográfico do IBGE, e de produzir relatórios diversificados. Visa, também, enriquecer as fontes em português sobre o assunto, que são poucas.

Para garantir a verificabilidade do script, será reproduzida a tabela 1378 do SIDRA, todavia, qualquer operação entre variáveis está limitada somente às possibilidades do R e do pacote survey.

Assume-se aqui que o leitor saiba abrir dados tabulares em R e manipulá-los minimamente através do ecossistema tidyverse.

Este script e a tabela de exemplo estão hospedados no GitHub. A tabela usada aqui é derivada dos microdados originais e representa apenas o município de Montes Claros. Os microdados originais são distribuídos em formato de texto e estão organizados em colunas de largura fixa, e podem ser abertos utilizando as funções read_fwf e read.fwf. Os cabeçalhos com as respectivas larguras são encontrados no servidor FTP do IBGE, junto com os microdados.

Script

A biblioteca tidyverse servirá para manipular os dados tabulares e a biblioteca survey servirá para expandirmos a amostra do Censo Demográfico de 2010.

library(tidyverse)
library(survey)

Ao contrário do arquivo original, este arquivo de exemplo está separado por pontos e vírgulas (;). Também não é garantido que o arquivo obtido no IBGE estará codificado em UTF-8.

sample <- read.table(
  file = "./data/1378.csv",
  header = TRUE,
  sep = ";",
  encoding = "UTF-8"
)

str(sample)
## 'data.frame':    35718 obs. of  9 variables:
##  $ V0001: int  31 31 31 31 31 31 31 31 31 31 ...
##  $ V0002: int  43302 43302 43302 43302 43302 43302 43302 43302 43302 43302 ...
##  $ V1006: int  1 1 1 1 1 1 1 1 1 1 ...
##  $ V0010: num  13.31 13.31 9.63 9.63 9.63 ...
##  $ V0011: num  3.14e+12 3.14e+12 3.14e+12 3.14e+12 3.14e+12 ...
##  $ V0502: int  16 1 4 1 4 4 4 2 4 2 ...
##  $ V0601: int  1 1 1 2 2 2 2 1 1 2 ...
##  $ V6036: int  27 32 47 79 60 56 54 80 32 74 ...
##  $ V6037: int  NA NA NA NA NA NA NA NA NA NA ...

Nota-se que algumas variáveis não estão classificadas adequadamente. A função read_fwf permite especificar os tipos de dados no momento da leitura, mas pode ser necessário convertê-las para o tipo adequado. Vale dizer que não necessariamente os tipos especificados na planilha (A, C ou N) correspondem aos tipos de dados com os quais o R trabalha, sendo necessária alguma abstração por parte do profissional.

sample$V1006 <- as.factor(sample$V1006)
sample$V0502 <- as.factor(sample$V0502)
sample$V0601 <- as.factor(sample$V0601)
sample$V0502 <- as.factor(sample$V0502)
sample$V0011 <- as.character(sample$V0011)
sample$V6036 <- as.factor(sample$V6036)
sample$V6037 <- as.factor(sample$V6037)

str(sample)
## 'data.frame':    35718 obs. of  9 variables:
##  $ V0001: int  31 31 31 31 31 31 31 31 31 31 ...
##  $ V0002: int  43302 43302 43302 43302 43302 43302 43302 43302 43302 43302 ...
##  $ V1006: Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
##  $ V0010: num  13.31 13.31 9.63 9.63 9.63 ...
##  $ V0011: chr  "3143302005001" "3143302005001" "3143302005001" "3143302005001" ...
##  $ V0502: Factor w/ 20 levels "1","2","3","4",..: 16 1 4 1 4 4 4 2 4 2 ...
##  $ V0601: Factor w/ 2 levels "1","2": 1 1 1 2 2 2 2 1 1 2 ...
##  $ V6036: Factor w/ 103 levels "0","1","2","3",..: 28 33 48 80 61 57 55 81 33 75 ...
##  $ V6037: Factor w/ 12 levels "0","1","2","3",..: NA NA NA NA NA NA NA NA NA NA ...

Agora que as variáveis estão adequadamente tipadas, é necessário gerar uma variável importante: a quantidade de indivíduos por estrato.

O censo demográfico é uma pesquisa realizada em todo o território nacional. Todas as edificações no país são classificadas, e em cada endereço considerado como Domicílio Particular Permanente é feita uma visita, salvo raras exceções como tribos indígenas que optam por não ter contato com os demais cidadãos, e outros casos mais excepcionais que são trabalhados pelo canal Vsauce.

No entanto, para otimizar a coleta, alguns questionamentos não são feitos em todos os domicílios. Em 2010, aproximadamente 10% de todos os domicílios foram aplicados questionários mais abrangentes e para manter a comparabilidade entre todos os recortes territoriais, o IBGE trabalha com amostras estratificadas. Embora, as amostras não são representativas para os setores censitários, elas são representativas para as áreas de ponderação.

As áreas de ponderação são conjuntos de setores censitários agrupados de maneira especificada por manual do IBGE. Para oficializar a divulgação de dados a estas escalas, o IBGE divulga suas próprias áreas de ponderação, suas tabelas agregadas e seus vetores para manipulação em SIG.

A variável N criada no próximo passo representa o número de pessoas por área de ponderação, o estrato da amostragem do Censo.

sample <-
  sample %>%
  group_by(V0011) %>%
  mutate(qtdPessoas = n()) %>%
  ungroup()

str(sample)
## tibble [35,718 × 10] (S3: tbl_df/tbl/data.frame)
##  $ V0001     : int [1:35718] 31 31 31 31 31 31 31 31 31 31 ...
##  $ V0002     : int [1:35718] 43302 43302 43302 43302 43302 43302 43302 43302 43302 43302 ...
##  $ V1006     : Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
##  $ V0010     : num [1:35718] 13.31 13.31 9.63 9.63 9.63 ...
##  $ V0011     : chr [1:35718] "3143302005001" "3143302005001" "3143302005001" "3143302005001" ...
##  $ V0502     : Factor w/ 20 levels "1","2","3","4",..: 16 1 4 1 4 4 4 2 4 2 ...
##  $ V0601     : Factor w/ 2 levels "1","2": 1 1 1 2 2 2 2 1 1 2 ...
##  $ V6036     : Factor w/ 103 levels "0","1","2","3",..: 28 33 48 80 61 57 55 81 33 75 ...
##  $ V6037     : Factor w/ 12 levels "0","1","2","3",..: NA NA NA NA NA NA NA NA NA NA ...
##  $ qtdPessoas: int [1:35718] 1425 1425 1425 1425 1425 1425 1425 1425 1425 1425 ...

Para reconstruir o plano amostral é necessário criar um objeto para o desenho amostral, do tipo survey design. Para o parâmetro strata (estrato), passa-se uma fórmula indicando a coluna com a identificação do estrato; para o parâmetro fpc (fator de correção para população finita), passa-se a quantidade de pessoas por área de ponderação; para o parâmetro weights (pesos), passa-se a coluna com os pesos; para o parâmetro data (dados), passa-se o data.frame.

design <- svydesign(
  ids = ~1,
  strata = ~V0011,
  fpc = ~qtdPessoas,
  weights = ~V0010,
  data = sample
)

Construído o desenho amostral, parte-se para as tabulações.

Habitantes por situação do domicílios

svytotal(~V1006, design)
##         total SE
## V10061 344427  0
## V10062  17488  0
svymean(~V1006, design)
##            mean SE
## V10061 0.951679  0
## V10062 0.048321  0

Habitantes por sexo

svytotal(~V0601, design)
##         total SE
## V06011 174249  0
## V06012 187666  0
svymean(~V0601, design)
##           mean SE
## V06011 0.48146  0
## V06012 0.51854  0

Habitantes por idade (em anos)

svytotal(~V6036, design)
##              total SE
## V60360   4726.3222  0
## V60361   4802.2414  0
## V60362   5037.1114  0
## V60363   5268.6548  0
## V60364   5507.6178  0
## V60365   5457.2743  0
## V60366   5139.7116  0
## V60367   5555.1255  0
## V60368   5715.4010  0
## V60369   5769.4875  0
## V603610  6584.0946  0
## V603611  6216.2229  0
## V603612  6336.9650  0
## V603613  6001.1364  0
## V603614  6414.5811  0
## V603615  6591.7750  0
## V603616  6981.3248  0
## V603617  6449.7788  0
## V603618  6787.0476  0
## V603619  7333.0738  0
## V603620  7434.4546  0
## V603621  7353.3743  0
## V603622  7189.0894  0
## V603623  7686.5545  0
## V603624  7614.5272  0
## V603625  7061.4142  0
## V603626  7091.6840  0
## V603627  7162.1406  0
## V603628  7258.2889  0
## V603629  6931.4723  0
## V603630  7147.6467  0
## V603631  6525.7244  0
## V603632  6300.6566  0
## V603633  5545.0341  0
## V603634  6088.9382  0
## V603635  6016.4575  0
## V603636  5213.3031  0
## V603637  5341.6838  0
## V603638  5283.0688  0
## V603639  5085.4868  0
## V603640  5093.2440  0
## V603641  5068.9269  0
## V603642  4988.2765  0
## V603643  4771.6595  0
## V603644  4488.8932  0
## V603645  4649.7382  0
## V603646  4222.0895  0
## V603647  4685.0772  0
## V603648  4127.8926  0
## V603649  3907.2025  0
## V603650  4064.4938  0
## V603651  3500.3025  0
## V603652  3682.7939  0
## V603653  3871.2829  0
## V603654  3538.8306  0
## V603655  3137.1146  0
## V603656  2816.0455  0
## V603657  2727.9731  0
## V603658  2555.9913  0
## V603659  2571.1719  0
## V603660  2635.2109  0
## V603661  2242.0964  0
## V603662  2233.5338  0
## V603663  1929.1781  0
## V603664  2170.0111  0
## V603665  1727.8883  0
## V603666  1813.3313  0
## V603667  1551.3242  0
## V603668  1377.7966  0
## V603669  1378.6293  0
## V603670  1748.8101  0
## V603671  1341.1673  0
## V603672  1182.0622  0
## V603673  1110.0382  0
## V603674  1217.4279  0
## V603675   873.4947  0
## V603676   848.8906  0
## V603677   694.7797  0
## V603678   640.3204  0
## V603679   650.1041  0
## V603680   578.0294  0
## V603681   472.1570  0
## V603682   463.3694  0
## V603683   427.3406  0
## V603684   410.5174  0
## V603685   224.4825  0
## V603686   224.0822  0
## V603687   176.5799  0
## V603688   167.3136  0
## V603689   239.5958  0
## V603690   199.5308  0
## V603691    77.4415  0
## V603692    67.4052  0
## V603693    90.3649  0
## V603694    51.0089  0
## V603695    73.1495  0
## V603696    43.3884  0
## V603697    43.9029  0
## V603698     9.0867  0
## V603699    11.2804  0
## V6036100    8.6035  0
## V6036102    8.4762  0
## V6036106    6.8504  0
svymean(~V6036, design)
##                mean SE
## V60360   1.3059e-02  0
## V60361   1.3269e-02  0
## V60362   1.3918e-02  0
## V60363   1.4558e-02  0
## V60364   1.5218e-02  0
## V60365   1.5079e-02  0
## V60366   1.4201e-02  0
## V60367   1.5349e-02  0
## V60368   1.5792e-02  0
## V60369   1.5942e-02  0
## V603610  1.8192e-02  0
## V603611  1.7176e-02  0
## V603612  1.7510e-02  0
## V603613  1.6582e-02  0
## V603614  1.7724e-02  0
## V603615  1.8214e-02  0
## V603616  1.9290e-02  0
## V603617  1.7821e-02  0
## V603618  1.8753e-02  0
## V603619  2.0262e-02  0
## V603620  2.0542e-02  0
## V603621  2.0318e-02  0
## V603622  1.9864e-02  0
## V603623  2.1239e-02  0
## V603624  2.1040e-02  0
## V603625  1.9511e-02  0
## V603626  1.9595e-02  0
## V603627  1.9790e-02  0
## V603628  2.0055e-02  0
## V603629  1.9152e-02  0
## V603630  1.9750e-02  0
## V603631  1.8031e-02  0
## V603632  1.7409e-02  0
## V603633  1.5321e-02  0
## V603634  1.6824e-02  0
## V603635  1.6624e-02  0
## V603636  1.4405e-02  0
## V603637  1.4759e-02  0
## V603638  1.4598e-02  0
## V603639  1.4052e-02  0
## V603640  1.4073e-02  0
## V603641  1.4006e-02  0
## V603642  1.3783e-02  0
## V603643  1.3184e-02  0
## V603644  1.2403e-02  0
## V603645  1.2848e-02  0
## V603646  1.1666e-02  0
## V603647  1.2945e-02  0
## V603648  1.1406e-02  0
## V603649  1.0796e-02  0
## V603650  1.1231e-02  0
## V603651  9.6716e-03  0
## V603652  1.0176e-02  0
## V603653  1.0697e-02  0
## V603654  9.7781e-03  0
## V603655  8.6681e-03  0
## V603656  7.7810e-03  0
## V603657  7.5376e-03  0
## V603658  7.0624e-03  0
## V603659  7.1044e-03  0
## V603660  7.2813e-03  0
## V603661  6.1951e-03  0
## V603662  6.1714e-03  0
## V603663  5.3305e-03  0
## V603664  5.9959e-03  0
## V603665  4.7743e-03  0
## V603666  5.0104e-03  0
## V603667  4.2864e-03  0
## V603668  3.8070e-03  0
## V603669  3.8093e-03  0
## V603670  4.8321e-03  0
## V603671  3.7058e-03  0
## V603672  3.2661e-03  0
## V603673  3.0671e-03  0
## V603674  3.3638e-03  0
## V603675  2.4135e-03  0
## V603676  2.3456e-03  0
## V603677  1.9197e-03  0
## V603678  1.7693e-03  0
## V603679  1.7963e-03  0
## V603680  1.5971e-03  0
## V603681  1.3046e-03  0
## V603682  1.2803e-03  0
## V603683  1.1808e-03  0
## V603684  1.1343e-03  0
## V603685  6.2026e-04  0
## V603686  6.1916e-04  0
## V603687  4.8790e-04  0
## V603688  4.6230e-04  0
## V603689  6.6202e-04  0
## V603690  5.5132e-04  0
## V603691  2.1398e-04  0
## V603692  1.8625e-04  0
## V603693  2.4968e-04  0
## V603694  1.4094e-04  0
## V603695  2.0212e-04  0
## V603696  1.1989e-04  0
## V603697  1.2131e-04  0
## V603698  2.5107e-05  0
## V603699  3.1169e-05  0
## V6036100 2.3772e-05  0
## V6036102 2.3421e-05  0
## V6036106 1.8928e-05  0

Habitantes por idade (em meses para menores de 1 ano)

svytotal(~V6037, design, na.rm = TRUE)
##          total SE
## V60370  499.88  0
## V60371  366.02  0
## V60372  391.70  0
## V60373  405.20  0
## V60374  435.92  0
## V60375  257.02  0
## V60376  320.00  0
## V60377  417.78  0
## V60378  349.14  0
## V60379  368.50  0
## V603710 472.80  0
## V603711 442.35  0
svymean(~V6037, design, na.rm = TRUE)
##             mean SE
## V60370  0.105766  0
## V60371  0.077444  0
## V60372  0.082876  0
## V60373  0.085734  0
## V60374  0.092233  0
## V60375  0.054381  0
## V60376  0.067706  0
## V60377  0.088394  0
## V60378  0.073871  0
## V60379  0.077967  0
## V603710 0.100035  0
## V603711 0.093593  0

Habitantes por condição no domicílio

svytotal(~V0502, design)
##              total SE
## V05021  104162.473  0
## V05022   65885.442  0
## V05023      59.687  0
## V05024   98131.761  0
## V05025   42283.510  0
## V05026    4383.546  0
## V05027    3241.952  0
## V05028    3329.008  0
## V05029     763.824  0
## V050210  16804.545  0
## V050211    451.608  0
## V050212   9099.110  0
## V050213    150.613  0
## V050214   7955.756  0
## V050215    511.859  0
## V050216   2353.784  0
## V050217    117.616  0
## V050218   1079.857  0
## V050219     16.522  0
## V050220   1132.527  0
svymean(~V0502, design)
##               mean SE
## V05021  0.28780922  0
## V05022  0.18204673  0
## V05023  0.00016492  0
## V05024  0.27114588  0
## V05025  0.11683271  0
## V05026  0.01211209  0
## V05027  0.00895777  0
## V05028  0.00919832  0
## V05029  0.00211051  0
## V050210 0.04643230  0
## V050211 0.00124783  0
## V050212 0.02514157  0
## V050213 0.00041615  0
## V050214 0.02198239  0
## V050215 0.00141431  0
## V050216 0.00650369  0
## V050217 0.00032498  0
## V050218 0.00298373  0
## V050219 0.00004565  0
## V050220 0.00312926  0

Habitantes por sexo, por condição do domicílio

svytotal(~interaction(V1006, V0601), design)
##                               total SE
## interaction(V1006, V0601)1.1 164985  0
## interaction(V1006, V0601)2.1   9264  0
## interaction(V1006, V0601)1.2 179442  0
## interaction(V1006, V0601)2.2   8224  0
svymean(~interaction(V1006, V0601), design)
##                                  mean SE
## interaction(V1006, V0601)1.1 0.455867  0
## interaction(V1006, V0601)2.1 0.025597  0
## interaction(V1006, V0601)1.2 0.495813  0
## interaction(V1006, V0601)2.2 0.022724  0