Leitura de dados da PNAD 2008 com o pacote dicionariosIBGE

Bom dia, pessoal. Estou começando a namorar os microdados da Pesquisa Nacional por Amostra de Domicílios de 2008, mas não estou conseguindo utilizar o pacote dicionariosIBGE para ler os microdados. Na saída abaixo, substituí o prompt ">" por "." para evitar que clientes de e-mail interpretem como citação de e-mails prévios. . library("dicionariosIBGE") . data(dicPNAD2008) . dicdom2008 inicio cod tamanho desc 1 1 V0101 4 ANO DA PESQUISA 2 5 UF 2 UNIDADE DA FEDERACAO 3 5 V0102 8 NUMERO DE CONTROLE 4 13 V0103 3 NUMERO DE SERIE 5 16 V0104 2 TIPO DE ENTREVISTA [...] . amostra <- le.pesquisa(dicdom2008, "~/Dropbox/Cobertura/2008/dados/DOM2008.txt", codigos = c("V0101", "UF", "V0102", "V0103", "V4105", "V4106", "V4606", "V4604", "V4605", "V4606", "V4607", "V4608", "V4609", "V4610", "V4611", "SUBAMO", "V0223"), nlines = 150591) |=====================================================================| 100% . summary(amostra$V0101) Mode NA's logical 1015101 . summary(amostra$UF) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 0.00 3.00 12.00 19.69 31.00 99.00 264343 Como os microdados da PNAD 2008 estão reponderados utilizando informações posteriores à publicação original do arquivo, considerei a possibilidade de que a organização dos dados tivesse mudado. Mas, conferindo o dicionário de dados atualmente disponibilizado, vi que os números de início, código e tamanho continuam os mesmos, pelo menos para as primeiras variáveis (são setenta variáveis, só neste banco de dados). O que será que estou fazendo de errado? Grato, Leonardo Ferreira Fontenelle http://lattes.cnpq.br/9234772336296638

Não sei o quanto ajuda, mas percebi que o dataframe gerado está com o número errado de linhas: Num terminal: . wc DOM2008.txt --lines 150591 DOM2008.txt No R: . nrow(amostra) [1] 1015101 Essa diferença não se resolve pedindo ao le.pesquisa() para ler todas as variáveis: . amostra <- le.pesquisa(dicdom2008, "~/Dropbox/Cobertura/2008/dados/DOM2008.txt", codigos = dicdom2008[, 2], nlines = 150591) |======================================================================| 100% . nrow(amostra) [1] 1015101 -- Leonardo Ferreira Fontenelle http://lattes.cnpq.br/9234772336296638 Em Sáb 30 ago. 2014, às 11:19, Leonardo Ferreira Fontenelle escreveu:
Bom dia, pessoal.
Estou começando a namorar os microdados da Pesquisa Nacional por Amostra de Domicílios de 2008, mas não estou conseguindo utilizar o pacote dicionariosIBGE para ler os microdados. Na saída abaixo, substituí o prompt ">" por "." para evitar que clientes de e-mail interpretem como citação de e-mails prévios.
. library("dicionariosIBGE") . data(dicPNAD2008) . dicdom2008 inicio cod tamanho desc 1 1 V0101 4 ANO DA PESQUISA 2 5 UF 2 UNIDADE DA FEDERACAO 3 5 V0102 8 NUMERO DE CONTROLE 4 13 V0103 3 NUMERO DE SERIE 5 16 V0104 2 TIPO DE ENTREVISTA [...] . amostra <- le.pesquisa(dicdom2008, "~/Dropbox/Cobertura/2008/dados/DOM2008.txt", codigos = c("V0101", "UF", "V0102", "V0103", "V4105", "V4106", "V4606", "V4604", "V4605", "V4606", "V4607", "V4608", "V4609", "V4610", "V4611", "SUBAMO", "V0223"), nlines = 150591) |=====================================================================| 100% . summary(amostra$V0101) Mode NA's logical 1015101 . summary(amostra$UF) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 0.00 3.00 12.00 19.69 31.00 99.00 264343
Como os microdados da PNAD 2008 estão reponderados utilizando informações posteriores à publicação original do arquivo, considerei a possibilidade de que a organização dos dados tivesse mudado. Mas, conferindo o dicionário de dados atualmente disponibilizado, vi que os números de início, código e tamanho continuam os mesmos, pelo menos para as primeiras variáveis (são setenta variáveis, só neste banco de dados).
O que será que estou fazendo de errado?
Grato,
Leonardo Ferreira Fontenelle http://lattes.cnpq.br/9234772336296638

Este código importa os dados com sucesso: # Pelo dicionario, o terceiro campo (variável de controle) engloba o segundo (UF) # Mas isso é dificil para a função entender. novodic <- within(dicdom2008, {inicio[3] <- 7; tamanho[3] <- 6}) amostra <- read.fwf(file = "2008/dados/DOM2008.txt", widths = novodic$tamanho, header = FALSE, col.names = novodic$cod, strip.white = TRUE) amostra[, 3] <- factor(paste0(amostra[, 2], amostra[, 3])) Fornecer esse "novodic" em vez do dicdom2008 para a função le.pesquisa() do pacote dicionariosIBGE não resolveu o problema já relatado. -- Leonardo Ferreira Fontenelle http://lattes.cnpq.br/9234772336296638 Em Sáb 30 ago. 2014, às 11:45, Leonardo Ferreira Fontenelle escreveu:
Não sei o quanto ajuda, mas percebi que o dataframe gerado está com o número errado de linhas:
Num terminal: . wc DOM2008.txt --lines 150591 DOM2008.txt
No R: . nrow(amostra) [1] 1015101
Essa diferença não se resolve pedindo ao le.pesquisa() para ler todas as variáveis: . amostra <- le.pesquisa(dicdom2008, "~/Dropbox/Cobertura/2008/dados/DOM2008.txt", codigos = dicdom2008[, 2], nlines = 150591) |======================================================================| 100% . nrow(amostra) [1] 1015101
-- Leonardo Ferreira Fontenelle http://lattes.cnpq.br/9234772336296638
Em Sáb 30 ago. 2014, às 11:19, Leonardo Ferreira Fontenelle escreveu:
Bom dia, pessoal.
Estou começando a namorar os microdados da Pesquisa Nacional por Amostra de Domicílios de 2008, mas não estou conseguindo utilizar o pacote dicionariosIBGE para ler os microdados. Na saída abaixo, substituí o prompt ">" por "." para evitar que clientes de e-mail interpretem como citação de e-mails prévios.
. library("dicionariosIBGE") . data(dicPNAD2008) . dicdom2008 inicio cod tamanho desc 1 1 V0101 4 ANO DA PESQUISA 2 5 UF 2 UNIDADE DA FEDERACAO 3 5 V0102 8 NUMERO DE CONTROLE 4 13 V0103 3 NUMERO DE SERIE 5 16 V0104 2 TIPO DE ENTREVISTA [...] . amostra <- le.pesquisa(dicdom2008, "~/Dropbox/Cobertura/2008/dados/DOM2008.txt", codigos = c("V0101", "UF", "V0102", "V0103", "V4105", "V4106", "V4606", "V4604", "V4605", "V4606", "V4607", "V4608", "V4609", "V4610", "V4611", "SUBAMO", "V0223"), nlines = 150591) |=====================================================================| 100% . summary(amostra$V0101) Mode NA's logical 1015101 . summary(amostra$UF) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 0.00 3.00 12.00 19.69 31.00 99.00 264343
Como os microdados da PNAD 2008 estão reponderados utilizando informações posteriores à publicação original do arquivo, considerei a possibilidade de que a organização dos dados tivesse mudado. Mas, conferindo o dicionário de dados atualmente disponibilizado, vi que os números de início, código e tamanho continuam os mesmos, pelo menos para as primeiras variáveis (são setenta variáveis, só neste banco de dados).
O que será que estou fazendo de errado?
Grato,
Leonardo Ferreira Fontenelle http://lattes.cnpq.br/9234772336296638

Em benefício dos futuros leitores desta thread, aviso que depois percebi que a chamada para read.fwf() precisa também do argumento na.string = "", para reconhecer adequadamente os valores faltantes. De qualquer forma, o seguinte código, que depende do pacote "LaF", abre o arquivo bem mais rápido: tipos.laf.domicilios <- c( "integer", "categorical", "categorical", "categorical", "categorical", "integer", "integer", "categorical", "categorical", "categorical", "categorical", "integer", "integer", "categorical", "double", "double", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "integer", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "categorical", "integer", "integer", "categorical", "integer", "double", "integer", "double", "double", "double", "integer", "double", "double", "categorical", "categorical", "categorical", "double", "integer", "double", "categorical", "categorical", "categorical", "categorical", "categorical", "string") laf.domicilios <- laf_open_fwf(filename = "2008/dados/DOM2008.txt", column_types = tipos.laf.domicilios[-2], column_widths = dicdom2008$tamanho[-2], column_names = dicdom2008$cod[-2]) uf.domicilios = data.frame(UF = factor(substr(lapply(laf.domicilios[, "V0102"]$V0102, as.character), 1, 2))) # As seguintes colunas têm valores 10^12 - 1 que na verdade são NA: limpar.missing.domicilios <- c("V0208", "V0209", "V4614", "V4619", "V4621") Quer dizer, a função laf_open_fwf só cria uma conexão para o arquivo, mas rodar summary(laf.domicilios[ , ]) é bem mais rápido do que ler o arquivo com read.fwf() e então rodar o summary(). Abraços, -- Leonardo Ferreira Fontenelle http://lattes.cnpq.br/9234772336296638 Em Sáb 30 ago. 2014, às 12:49, Leonardo Ferreira Fontenelle escreveu:
Este código importa os dados com sucesso:
# Pelo dicionario, o terceiro campo (variável de controle) engloba o segundo (UF) # Mas isso é dificil para a função entender. novodic <- within(dicdom2008, {inicio[3] <- 7; tamanho[3] <- 6}) amostra <- read.fwf(file = "2008/dados/DOM2008.txt", widths = novodic$tamanho, header = FALSE, col.names = novodic$cod, strip.white = TRUE) amostra[, 3] <- factor(paste0(amostra[, 2], amostra[, 3]))
Fornecer esse "novodic" em vez do dicdom2008 para a função le.pesquisa() do pacote dicionariosIBGE não resolveu o problema já relatado.
-- Leonardo Ferreira Fontenelle http://lattes.cnpq.br/9234772336296638
Em Sáb 30 ago. 2014, às 11:45, Leonardo Ferreira Fontenelle escreveu:
Não sei o quanto ajuda, mas percebi que o dataframe gerado está com o número errado de linhas:
Num terminal: . wc DOM2008.txt --lines 150591 DOM2008.txt
No R: . nrow(amostra) [1] 1015101
Essa diferença não se resolve pedindo ao le.pesquisa() para ler todas as variáveis: . amostra <- le.pesquisa(dicdom2008, "~/Dropbox/Cobertura/2008/dados/DOM2008.txt", codigos = dicdom2008[, 2], nlines = 150591) |======================================================================| 100% . nrow(amostra) [1] 1015101
-- Leonardo Ferreira Fontenelle http://lattes.cnpq.br/9234772336296638
Em Sáb 30 ago. 2014, às 11:19, Leonardo Ferreira Fontenelle escreveu:
Bom dia, pessoal.
Estou começando a namorar os microdados da Pesquisa Nacional por Amostra de Domicílios de 2008, mas não estou conseguindo utilizar o pacote dicionariosIBGE para ler os microdados. Na saída abaixo, substituí o prompt ">" por "." para evitar que clientes de e-mail interpretem como citação de e-mails prévios.
. library("dicionariosIBGE") . data(dicPNAD2008) . dicdom2008 inicio cod tamanho desc 1 1 V0101 4 ANO DA PESQUISA 2 5 UF 2 UNIDADE DA FEDERACAO 3 5 V0102 8 NUMERO DE CONTROLE 4 13 V0103 3 NUMERO DE SERIE 5 16 V0104 2 TIPO DE ENTREVISTA [...] . amostra <- le.pesquisa(dicdom2008, "~/Dropbox/Cobertura/2008/dados/DOM2008.txt", codigos = c("V0101", "UF", "V0102", "V0103", "V4105", "V4106", "V4606", "V4604", "V4605", "V4606", "V4607", "V4608", "V4609", "V4610", "V4611", "SUBAMO", "V0223"), nlines = 150591) |=====================================================================| 100% . summary(amostra$V0101) Mode NA's logical 1015101 . summary(amostra$UF) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 0.00 3.00 12.00 19.69 31.00 99.00 264343
Como os microdados da PNAD 2008 estão reponderados utilizando informações posteriores à publicação original do arquivo, considerei a possibilidade de que a organização dos dados tivesse mudado. Mas, conferindo o dicionário de dados atualmente disponibilizado, vi que os números de início, código e tamanho continuam os mesmos, pelo menos para as primeiras variáveis (são setenta variáveis, só neste banco de dados).
O que será que estou fazendo de errado?
Grato,
Leonardo Ferreira Fontenelle http://lattes.cnpq.br/9234772336296638

Esse link pode ser útil. http://roneyfraga.tumblr.com/post/51043730168/microdados-no-r-parte-1 A maneira mais fácil de baixar os microdados é com as funções criadas por Anthony Damico, que baixa os microdados e salva em um arquivo de sqlite. Vale notar que as funções de Damico consideram a desenho amostral das pesquisas. https://github.com/ajdamico/usgsd Com as funções de Damico é possível baixar os dados do censo, pnad e pof. Att Roney

Boa dica, Roney! abs, Rogério 2014-08-31 17:47 GMT-03:00 Roney Fraga Souza <roneyfraga@gmail.com>:
Esse link pode ser útil.
http://roneyfraga.tumblr.com/post/51043730168/microdados-no-r-parte-1
A maneira mais fácil de baixar os microdados é com as funções criadas por Anthony Damico, que baixa os microdados e salva em um arquivo de sqlite. Vale notar que as funções de Damico consideram a desenho amostral das pesquisas.
https://github.com/ajdamico/usgsd
Com as funções de Damico é possível baixar os dados do censo, pnad e pof.
Att Roney _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Obrigado pela dica, Roney! Eu não conhecia este seu post, embora já tenha visto o de Anthony Damico. Provavelmente não rodei os scripts de Anthony por teimosia. Eu queria me familiarizar com ferramentas convencionais mais (read.fwf, le.pesquisa), e queria entender o que estava acontecendo em cada passo. Mas confesso que, no mínimo, "colei" dos scripts dele (1) a omissão da variável UF do dicionário, em vez da minha tentativa inicial de encurtar a variável seguinte; e, mais importante (2) quais variáveis especificar para o svydesign e o postStratify. Lendo a lista de variáveis da PNAD, imagino que dê para especificar cada um dos três níveis do plano amostral, mas não consigo encontrar uma correspondência direta entre as notas metodológicas da PNAD e a distribuição das variáveis relativas ao plano amostral. Usar o read.fwf para o banco de dados de pessoas (em vez do de domicílios) se mostrou uma tortura. Felizmente, um hora acabou, e sem travar o computador, o que já é alguma coisa (até salvei em um arquivo rda por via das dúvidas). Tentei abrir o arquivo fornecido pelo IBGE como no exemplo 6f do sqldf [https://code.google.com/p/sqldf/], mas por algum motivo obscuro todas as variáveis estavam sendo interpretadas como character(). Estava difícil descobrir como consertar isso, então fui aprender a utilizar o laf_open_fwf. O laf_open_fwf tem dois problemas. Um é que o objeto nem sempre se comporta como esperaríamos de um data.frame. Ao menos para mim, isso implica em ir experimentando o que dá certo e o que não dá. Outro problema é que, para ler o arquivo, precisamos especificar o tipo de cada uma das variáveis (integer, double, ...), o que pode se tornar rapidamente um problema para quase 800 variáveis. Usei um ou outro truque para conseguir isso numa escala de tempo razoável e com muito poucos erros (pelo menos que eu tenha detectado até agora com o summary!) mas o melhor mesmo seria, Roney, eu ter usado esse truque maravilhoso de skip1, skip2 etc que você utiliza em seu código. (Não assisti aos vídeos, prefiro texto.) A solução de transformar o arquivo original em CSV, e transformar este em SQL, deve ser a mais prática, mas me incomodou um pouco. Como eu não consegui transformar o arquivo de largura fixa diretamente em SQL, talvez eu faça isso a partir da conexão criada pelo LaF. Ainda não sei se vai valer a pena, porque um banco de dados com poucas variáveis deve caber bem na minha memória. -- Leonardo Ferreira Fontenelle http://lattes.cnpq.br/9234772336296638 Em Dom 31 ago. 2014, às 17:47, Roney Fraga Souza escreveu:
Esse link pode ser útil.
http://roneyfraga.tumblr.com/post/51043730168/microdados-no-r-parte-1
A maneira mais fácil de baixar os microdados é com as funções criadas por Anthony Damico, que baixa os microdados e salva em um arquivo de sqlite. Vale notar que as funções de Damico consideram a desenho amostral das pesquisas.
https://github.com/ajdamico/usgsd
Com as funções de Damico é possível baixar os dados do censo, pnad e pof.
Att Roney _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Como eu tinha dito anteriormente, não consegui encontrar uma correspondência entre as notas técnicas da PNAD e as variáveis do banco de dados público. A PNAD utilizou um plano amostral por conglomerados com três etapas, mas por enquanto estou utilizando uma aproximação para uma etapa, com as variáveis do [1]código de Anthony Damico: V4617 para definir o estrato, V4618 para definir o conglomerado, o produto de V4619 e V4610 para definir os pesos amostrais. Para pós-estratificação, V4609 como o tamanho da população em cada estrato populacional V4617. No entanto, as variáveis V4105 a V4107, V4602 a V4608, e V4611 também parecem ser úteis. Alguém poderia me apontar para uma explicação de como incorporá-las na chamada da função svydesign? Grato! [2]Leonardo Ferreira Fontenelle References 1. https://github.com/ajdamico/usgsd/tree/master/Pesquisa%20Nacional%20por%20Am... 2. http://lattes.cnpq.br/9234772336296638

Leonardo, Embora use os comandos do Anthony, talvez essa apresentação te ajude: http://eventos.ibge.gov.br/images/smi2013/downloads/MC2/CursoMC2.pdf Abs, 2014-09-01 21:30 GMT-03:00 Leonardo Ferreira Fontenelle < leonardof@leonardof.med.br>:
Como eu tinha dito anteriormente, não consegui encontrar uma correspondência entre as notas técnicas da PNAD e as variáveis do banco de dados público. A PNAD utilizou um plano amostral por conglomerados com três etapas, mas por enquanto estou utilizando uma aproximação para uma etapa, com as variáveis do código de Anthony Damico <https://github.com/ajdamico/usgsd/tree/master/Pesquisa%20Nacional%20por%20Amostra%20de%20Domicilios>: *V4617* para definir o estrato, *V4618* para definir o conglomerado, o produto de *V4619* e *V4610* para definir os pesos amostrais. Para pós-estratificação, *V4609* como o tamanho da população em cada estrato populacional *V4617*.
No entanto, as variáveis V4105 a V4107, V4602 a V4608, e V4611 também parecem ser úteis. Alguém poderia me apontar para uma explicação de como incorporá-las na chamada da função *svydesign*?
Grato!
Leonardo Ferreira Fontenelle <http://lattes.cnpq.br/9234772336296638>
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Em Ter 2 set. 2014, às 08:21, Rodrigo Coster escreveu: Leonardo, Embora use os comandos do Anthony, talvez essa apresentação te ajude: [1]http://eventos.ibge.gov.br/images/smi2013/downloads/M C2/CursoMC2.pdf Obrigado, Rodrigo! O curso é bom, mas com relação ao delineamento amostra também utiliza a aproximação em estágio único. [2]Leonardo Ferreira Fontenelle References 1. http://eventos.ibge.gov.br/images/smi2013/downloads/MC2/CursoMC2.pdf 2. http://lattes.cnpq.br/9234772336296638
participantes (4)
-
Leonardo Ferreira Fontenelle
-
Rodrigo Coster
-
Rogério Barbosa
-
Roney Fraga Souza