Skip to contents

O pacote pdadr dá acesso aos microdados da Pesquisa Distrital por Amostra de Domicílios do Distrito Federal e entorno (PDAD-A) 2024, divulgados pelo IPE/DF em https://pdad.ipe.df.gov.br/, e acompanha uma tabela de metadados completa das bases de domicílios e moradores.

Metadados

A tabela pdadmeta reúne, em formato longo (tidy), o dicionário de variáveis oficial: para cada variável, sua descrição e, quando codificada, os códigos e respectivos rótulos.

# consultar os metadados de uma variável
dicionario(coluna = "localidade")

# todas as variáveis da base de moradores
dicionario(base = "moradores")

# busca por expressão regular: todas as variáveis de renda
dicionario(coluna = "^renda|renda$")

A coluna anexo indica de qual planilha do dicionário oficial os códigos foram extraídos (“anexo_1” a “anexo_11”).

Microdados

get_pdad() baixa e lê as bases, com cache local (o download ocorre uma única vez por máquina):

dom <- get_pdad("domicilios")
mor <- get_pdad("moradores")

# as duas bases de uma vez (lista nomeada)
dados <- get_pdad(c("domicilios", "moradores"))

Com rotular = TRUE, as variáveis codificadas já retornam como factor com os rótulos do dicionário:

dom <- get_pdad("domicilios", rotular = TRUE)
table(dom$localidade)

Também é possível rotular um data.frame já carregado com rotular(), que infere a base a partir das colunas presentes.

Pesos e análise

As bases trazem pesos de expansão: peso_dom (domicílios) e peso_mor (moradores), além do deflator infla_ipcadf (as variáveis de renda com sufixo _r já vêm corrigidas pela inflação).

estimar() calcula médias, totais e proporções ponderadas, com desagregação por qualquer coluna:

dom <- get_pdad("domicilios")

# renda domiciliar média por RA (valores corrigidos pela inflação)
estimar(dom, "renda_domiciliar_r", tipo = "media", por = "localidade")

# proporção ponderada de domicílios por situação (após rotular)
estimar(rotular(dom), "A01uf", tipo = "proporcao")

Antes de estimar variáveis com códigos reservados (77777 = Recusa, 88888 = Não sabe, 99999 = Não se aplica), converta-os em NA com limpar_reservados().

Para usar o ecossistema do pacote survey, design_pdad() cria o desenho amostral ponderado:

desenho <- design_pdad(dom)
survey::svymean(~renda_domiciliar_r, desenho)
survey::svyby(~renda_domiciliar_r, ~localidade, desenho, survey::svymean)

Como o IPE/DF não divulga as unidades primárias de amostragem nem os estratos, o desenho é apenas ponderado (ids = ~1): erros-padrão do survey subestimam a variância amostral e não devem ser usados para inferência (as estimativas pontuais não são afetadas).

Por fim, juntar_bases() cruza as bases pela chave do domicílio (A01nficha), sufixando as colunas comuns com _dom/_mor:

bases <- get_pdad(c("domicilios", "moradores"))
dados <- juntar_bases(bases$domicilios, bases$moradores)

# com os dois pesos presentes, informe qual usar
estimar(dados, "renda_total_r", peso = "peso_mor")

Territórios e harmonização com o IBGE e o geobr

A variável localidade identifica os 48 territórios da amostra: 36 Regiões Administrativas (RAs) do DF e 12 municípios goianos do entorno. As funções localidades() e setores() trazem a correspondência com os códigos do IBGE:

head(localidades())
setores(localidade = "Ceilândia")

A estrutura territorial importa para a harmonização:

  • o IBGE trata o DF como um único município (5300108, Brasília); no recorte mais fino do Censo 2022, as RAs correspondem aos subdistritos do distrito de Brasília (coluna cod_ibge_subdistrito, com 11 dígitos);
  • os municípios goianos correspondem diretamente a municípios IBGE (cod_ibge_municipio);
  • as localidades Arapoanga, Água Quente e Área Rural não têm correspondente no Censo 2022 (as duas primeiras foram criadas após o Censo; a última não é subdistrito) e ficam com cod_ibge_subdistrito = NA.

Mapas em nível de município

library(geobr)

# todos os territórios da amostra sobre o mapa de municípios do Censo 2022
muns <- read_municipality(code = "all", year = 2022)
mapa_mun <- merge(muns, localidades(), by.x = "code_muni",
                  by.y = "cod_ibge_municipio")
plot(mapa_mun["nome"])

Mapas em nível de RA

Como as RAs não existem como unidade própria nas tabelas do IBGE, o polígono de cada RA é obtido agregando os setores censitários do Censo 2022 por subdistrito:

# setores censitários do DF e agregação por subdistrito (= RA)
ct <- read_census_tract(5300108, year = 2022)
ras <- stats::aggregate(
  ct["code_subdistrict"],
  by = list(cod_ibge_subdistrito = ct$code_subdistrict),
  FUN = function(x) x[1]
)
mapa_ra <- merge(ras, localidades(), by = "cod_ibge_subdistrito")
plot(mapa_ra["nome"])

Com os dados agregados por RA (ex.: renda média via estimar(..., por = "localidade")), basta um novo merge() pela coluna valor para produzir cartogramas temáticos da PDAD-A 2024.

Códigos reservados e particularidades dos dados

O questionário usa códigos reservados, presentes no dicionário em 185 variáveis:

Código Significado
77777 Recusa
88888 Não sabe
99999 Não se aplica

Outras particularidades constatadas na auditoria dos microdados contra o dicionário (data-raw/auditoria_metadados.csv no repositório):

  • Vírgula decimal misturada: parte das colunas numéricas (peso_dom, peso_mor, infla_ipcadf e todas as rendas com sufixo _r) usa vírgula como separador decimal, enquanto o restante dos arquivos usa ponto. get_pdad() normaliza essas colunas para numeric automaticamente.
  • Colunas de quantidade: em 47 variáveis (ex.: C07_x, C11_x, B12) o dicionário só codifica 0 = Não tem e os códigos reservados; os demais valores são as próprias quantidades, lidas como numéricas.
  • Lacunas do dicionário oficial: localidade não tem códigos na planilha de moradores (use os códigos da base de domicílios); D15 registra 99999 e 0 não previstos; E15_B e G06_1/G06_2 têm valores observados fora da lista oficial; E08_1 (CEP) é texto livre. Nessas colunas rotular() preserva os valores originais.