Trabalhando com amostras complexas no R: usando o pacote survey

Ao contrário da amostra aleatória simples, nos planos amostrais complexos as unidades amostrais (geralmente, pessoas) possuem probabilidades diferentes de serem amostradas quando comparadas com outras unidades amostrais e, devido a isso, todas as análises realizadas sobre amostras complexas devem levar em consideração a probabilidade de cada um dos indivíduos amostrados. Nessa postagem, mostrarei como utilizar o pacote survey, que permite a realização de inferências e análises em amostras complexas. Para tal, utilizarei os dados da amostra do Censo de 2010.

Como assim, amostra do censo?!

Como já precisei explicar mais de uma vez, acho que vale a pena explicar aqui também: paralelo ao censo demográfico - onde todas as pessoas respondem o mesmo questionário, o IBGE desenvolve também uma pesquisa amostral, onde um determinado percentual de domicílios são sorteados e todos os moradores desse domicílio respondem, além do questionário do universo, um questionário mais longo e detalhado (coloquei os questionários no meu Drive). Esse percentual varia de cidade para cidade, sendo que em 2010 um total de 6.192.332 (10,67%) domicílios foram amostrados. Os 2 questionários possuem perguntas em comum, o que permite, após juntar os setores censitários em Áreas de Expansão dos Dados da amostra (AEDs), calcular pesos para cada uma das unidades amostrais (tanto domicílio quanto pessoas). Maiores detalhes sobre a metodologia usada podem ser encontrados na documentação disponibilizada pelo IBGE aqui.

Ta, mas qual é o delineamento? E como incorporar ele às análises?

Infelizmente não existe (ou eu não encontrei) um documento do IBGE que deixe claro qual é o delineamento amostral utilizado. Depois de um tempo pesquisando, conclui que, para domicílios é uma amostra estratificada (onde os estratos são as AEDs) e, para pessoas é uma amostra em cluster estratificada em 1 etapa (onde os estratos são as AEDs e os clusters as residências). Há ainda outros dois bancos disponibilizados nos microdados: o de emigrantes e o de pessoas falecidas. Os dados podem ser baixados aqui. Alguns municípios tiveram as suas AEDs alteradas após a primeira publicação, e seus novos microdados encontram-se aqui. Para os exemplos, utilizarei os de Porto Alegre, que está entre os 14 municípios que tiveram suas AEDs alteradas.

Após carregar os dados (e aplicar os labels das variáveis de interesse) e o pacote survey, devemos informar o delineamento amostral. Tanto para domicílio quanto para pessoas, o comando para definir o delineamento utilizado é:

amostra <- svydesign(ids = ~ V0300,  strata = ~ V0011, weights = ~ V0010, fpc = ~ FPC, data = dados)

No parâmetro ids informamos os clusters, identificados através da variável V0300 (no layout dos dados, disponível junto com a documentação, ela é identificada como variável controle), que é um valor único para cada residência amostrada. No parâmetro strata informamos os estratos, identificados pela variável V0011, que é o código das áreas de ponderação. O IBGE fornece o peso amostral de cada unidade amostral (com precisão de 13 decimais!) na variável V0010, que é informado pelo parâmetro weights. Por fim, informo a população de cada estrato através do parâmetro fpc (Finite Population Correction), sendo o único parâmetro não dado no banco disponibilizado pelo IBGE, se fazendo necessário a sua obtenção através da soma dos pesos de todas unidades amostrais do estrato.

E as análises?

O pacote apresenta uma série de análises já corrigidas para diversos delineamentos amostrais. Por exemplo, podemos fazer uma tabela de frequência através do svytable(~ V0633, design = amostra). Para calcular uma média, podemos utilizar svymean(~ V6525, amostra, na.rm = TRUE). Caso queiramos calcular a média de acordo com os fatores de uma variável categória, podemos utilizar o svyby(), que é uma versão do by() para objetos do pacote survey, ficando assim  svyby(~ V6525, ~ V0633, amostra, svymean, na.rm = TRUE). Note que esses 2 comandos retornam também o erro padrão da estimativa (SE). É possível realizar alguns testes estatísticos também, como o Teste-t (svyttest()), Qui-quadrado (svychisq()) e até mesmo ANOVA (svyglm()), entre outros. Disponibilizei também no meu Drive alguns exemplos de análises utilizando os dados de Porto Alegre, junto com o comando de leitura do banco disponibilizado.

Dúvidas? Críticas? Sugestões? Deixe seu comentário!

9 comentários:

  1. Excelente post! Para compartilhar, o Anthony Damico (em colaboracao com o Djalma Pessoa do IBGE) fez uns posts com dicas de amostra complexa para analise da PNAD em R - http://www.asdfree.com/2013/04/analyze-pesquisa-nacional-por-amostra.html . O Damico compartilhou tambem as rotinas para ler PME (http://www.asdfree.com/2014/02/analyze-pesquisa-mensal-de-emprego-pme.html) e POF (http://www.asdfree.com/2013/06/analyze-pesquisa-de-orcamentos.html)

    ResponderExcluir
    Respostas
    1. As postagens do Anthony são muito boas mesmo. Foram com elas que aprendi a manusear os dados da amostra. Aconselho também essa apresentação do Djalma (http://eventos.ibge.gov.br/images/smi2013/downloads/MC2/CursoMC2.pdf) para quem tem dificuldades em inglês.

      Excluir
  2. Caros,

    o calculo do FPC (Finite Population Correction) eh o mesmo para as bases de obitos domiciliares? Vi esse material do Djalma* que ele calculpa duas FPCs, uma para estados e outra para areas de ponderacao. Qual a diferenca, quando usar uma e quando usar a outra?

    * http://eventos.ibge.gov.br/images/smi2013/downloads/MC2/CursoMC2.pdf

    ResponderExcluir
    Respostas
    1. Rafael,

      O Djalma utilizou dois valores para mostrar a diferença que o plano amostral faz. No primeiro caso ele faz a amostragem sem estratos - uma AAS simples -, e por isso corrige pelo tamanho populacional do estado. Já no segundo ele utiliza o delineamento amostral - estratificada, veja que ele informa o parâmetro strata - e por isso informa o tamanho amostral do estrato, e não da UF.

      Note que nos 2 casos as estimativas pontuais são as mesmas (slide 88). Isso porque o FPC 'só' é utilizado para correção do cálculo da variância, e não da estimativa pontual.

      Excluir
  3. Obrigado pelo esclarecimento Rodrigo. Aproveito para compartilhar essa pulga atras da orelha sobre como aumentar a velocidade do codigo na hora de fazer consultas usando o pacote survey.
    http://stackoverflow.com/questions/32380663/improve-speed-of-queries-using-complex-survey-design-in-r

    ResponderExcluir
  4. Rodrigo,

    Primeiro, muito bom o post e o blog! Parabéns!

    Você tem alguma sugestão de como fazer o delineamento amostral dos dados do SAEB 2013? Estou estudando o Relatório da Amostragem da ANEB/SAEB 2013, mas ainda não ficou claro qual(is) variável(is) devo utilizar no parâmetro "weights" (a base do SAEB traz dois pesos por aluno em português e em matemática) e como devo calcular o "fcp".

    Obrigado!

    André Vieira

    ResponderExcluir
    Respostas
    1. André,

      Nunca trabalhei com os dados do SAEB, mas dando uma olhada neles podemos notar que os pesos são iguais em Português e Matemática, com exceção dos alunos que fizeram somente 1 das provas (dai o peso é 0 nessa prova). Há algumas raras exceções de alunos que possuem os 2 pesos diferentes.

      Quanto ao FPC, na documentação diz que utilizam os dados do Censo Escolar 2013, mas das escolas presentes no Censo Escolar 2012. Então tu precisa usar essa população (Arquivo Relatorio_Amostragem_Aneb_2013.pdf, no capítulo 'Sistema de referência'). Tu consegue o tamanho da população pelo banco TS_ESCOLA, nas variáveis NU_MATRICULADOS_CENSO_5EF e NU_MATRICULADOS_CENSO_9EF (Por alguma razão, não tem a população do 3EM)

      Espero ter ajudado!


      []'s

      Excluir
  5. Bom dia!

    Alguém sabe como fazer a rotina para o Censo 2010 no Stata?
    Nunca trabalhei com pacote survey, sabem de algum material para que eu possa estudar?

    Obrigada

    ResponderExcluir
    Respostas
    1. Juzinha,

      Como não trabalho com o STATA, não saberia te ajudar. Mas os dados do Censo 2010 estão em CSV, então a leitura deles deve ser bastante simples em qualquer programa estatístico. Quanto a material para aprender o survey, tem o site do Anthony Damico, que realiza diversas análises de dados públicos de vários países, muitas dela com o survey (se não forem todas com o survey). Passa la para dar uma olhada: http://www.asdfree.com/

      Excluir