Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exemplo de vínculo entre as tabelas #12

Open
thainasantos opened this issue Feb 1, 2022 · 2 comments
Open

Exemplo de vínculo entre as tabelas #12

thainasantos opened this issue Feb 1, 2022 · 2 comments
Assignees

Comments

@thainasantos
Copy link

thainasantos commented Feb 1, 2022

Olá, Tomas! Tudo bem? Vou usar esse espaço para tirar duas dúvidas:

  1. A primeira, é se você poderia dar um exemplo em como você realiza o vínculo entre as tabelas, ex: depois de criar as chaves para arquivo MORADOR e arquivo DESPESAS INDIVIDUAIS, depois que você faz o join pela chave "cod_pessoa", por exemplo, as linhas não ficam duplicadas? Fiz um teste com a renda total do arquivo morador depois do join e não bateu com o relatório do IBGE, mas quando fiz só com o arquivo MORADOR sim.

  2. Em outros tutoriais sobre a POF, vejo as pessoas usando o arquivo de pós estratificação para aplicar os pesos antes de criar o objeto survey, você também realiza essa etapa?

Muito obrigada! Abraços,

@tomasbarcellos
Copy link
Owner

Oi Thaina. Tudo bem? Você poderia compartilhar o código que usou para criar esse problema descrito em 1? O que fiz nas vinhetas foi apenas reproduzir os scripts da documentação do IBGE (com outra sintaxe).

Sobre o ponto 2: Nada impede que as tabelas lidas por nesse pacote sejam usadas posteriormente com o survey. Apenas não fiz isso imediatamente porque me parece que ele é ineficiente para os casos de estatísticas descritivas (sobretudo medidas de centralidade) usadas corriqueiramente em análises exploratórias. Caso tenha um exemplo de código que use o survey para estatísticas descritivas, podemos fazer um benchmark.

@thainasantos
Copy link
Author

thainasantos commented Feb 2, 2022

Oi, Tomas! Valeu pelo retorno e desculpe poluir aqui as Issues, apago depois os comentários. Inclusive vou deixar meu contato se pudermos continuar por e-mail: [email protected].

Vou copiar o script todo porque contempla as duas dúvidas que comentei antes. O resultado esperado foi quando testei a versão seguindo o mesmo passo-a-passo, mas sem unir o arquivo de despesas individuais. Pela diferença do que encontrei quando faço o join, acredito que tenha linhas duplicadas pela forma que o banco é desenhado, mas não sei quais duplicatas precisaria remover. Obrigada mesmo pela ajuda!

Abrindo os pacotes

library("survey")
library("srvyr")
library("tidyverse")
library ("ggplot2")
library("readxl")

Definindo para não exibir números em exponencial

aviso <- getOption("warn")
options(warn=-1)
options(scipen=999)
options(warn=aviso)
rm(aviso)

Ajuste

options( survey.lonely.psu = "adjust" )

Abrindo os arquivos de interesse: MORADOR, DESPESA INDIVIDUAL, POS_ESTRAT

poststr <- read_excel("Pos_estratos_totais.xlsx") 
MORADOR <- read_rds("MORADOR.rds")
DESP_I <- read_rds ("DESPESA_INDIVIDUAL.rds")

Transformado o pos_estrato em data datble e renomeando

poststr <- data.table::as.data.table(poststr)
data.table::setnames(poststr , "COD_UPA(UF+SEQ+DV)" , "COD_UPA")

#####################################
##################################### MANIPULANDO ARQUIVO MORADOR
#####################################

Selecionando variáveis do arquivo MORADOR

MORADOR <- MORADOR %>% select(UF,
                                ESTRATO_POF,
                                TIPO_SITUACAO_REG,
                                COD_UPA,
                                NUM_DOM,
                                NUM_UC,
                                COD_INFORMANTE,
                                V0306, #Variável Condição na UC 
                                V0403, #Variável Idade
                                V0404, #Variável Sexo 
                                V0405, #Variável Cor/Raça
                                V0425,
                                PESO,
                                PESO_FINAL,
                                RENDA_TOTAL,
                                INSTRUCAO,
                                COMPOSICAO,
                                PC_RENDA_DISP,
                                PC_RENDA_MONET, 
                                PC_RENDA_NAO_MONET, 
                                PC_DEDUCAO) %>%
                          rename("Idade" = V0403,
                                 "Sexo" = V0404,
                                 "Raca" = V0405,
                                 "Escolaridade" = V0425) %>% 
                          mutate(Sexo =  if_else(Sexo == 1, "Homem", "Mulher"),  
                                 Raca = case_when(Raca == 1 ~ "Branca",
                                                 Raca == 2 ~ "Preta",
                                                 Raca == 3 ~ "Amarela",
                                                 Raca == 4 ~ "Parda",
                                                 Raca == 5 ~ "Indigena"))

Gerando chave ID para o arquivo MORADOR

MORADOR <- MORADOR %>% mutate(ID_FAMILIA = paste0(COD_UPA, NUM_DOM, NUM_UC))
View(MORADOR)

MORADOR <- MORADOR %>% mutate(ID_PESSOA = paste0(COD_UPA, NUM_DOM, NUM_UC, COD_INFORMANTE))
View(MORADOR)

Atribuindo o arquivo de pós_estratificação no arquivo MORADOR

MORADOR <- merge( MORADOR , poststr , by = intersect( colnames( MORADOR ) , colnames( poststr ) ) , all.x = TRUE )
View(MORADOR)

#####################################
##################################### MANIPULANDO: DESPESA INDIVIDUAL
#####################################

Selecionando variáveis do arquivo DESPESA INDIVIDUAL

DESP_I <- DESP_I %>% select ( UF,
                              ESTRATO_POF,
                              TIPO_SITUACAO_REG,
                              COD_UPA,
                              NUM_DOM,
                              NUM_UC,
                              COD_INFORMANTE,
                              QUADRO,
                              SEQ,
                              V9001, #Tipo Produto
                              V9002, #Forma_Pgto
                              V8000, #Valor_Gasto 
                              V4104, #Motivo 
                              V4105, #Origem_Nac_Inter  
                              DEFLATOR,
                              V8000_DEFLA,
                              COD_IMPUT_VALOR,
                              FATOR_ANUALIZACAO,
                              PESO,
                              PESO_FINAL,
                              RENDA_TOTAL,
                              V9004) #Código do Local da Aquisição 

Gerando chave ID para o arquivo MORADOR

DESP_I <- DESP_I %>% mutate(ID_FAMILIA = paste0(COD_UPA, NUM_DOM, NUM_UC))
DESP_I <- DESP_I %>% mutate(ID_PESSOA = paste0(COD_UPA, NUM_DOM, NUM_UC,COD_INFORMANTE))
DESP_I <- DESP_I %>% mutate(ID_DESPESA = paste0 (ID_PESSOA, QUADRO, SEQ))
View(DESP_I)

Unindo arquivos MORADOR e DESP_I

POF <- MORADOR %>% right_join(DESP_I, by = "ID_PESSOA")

######################################
###################################### ATRIBUIÇÃO DO DESENHO AMOSTRAL
######################################

Cria o objeto de pré-estratificação

pre_stratified_design <- 
    survey::svydesign(
        id = ~COD_UPA.x , 
        strata = ~ESTRATO_POF.x ,
        weights = ~PESO_FINAL.x ,
        data = POF,
        nest = TRUE
    )

Total população por estrato

population_totals <- 
    data.frame(
        pos_estrato = unique( POF$pos_estrato ) , 
        Freq = unique( POF$TOTAL_PESSOAS_REFERENCIA ))

Cria o objeto de desenho amostral com estratificação da POF

POF_design <-
    survey::postStratify(
        design = pre_stratified_design , 
        strata = ~pos_estrato , 
        population = population_totals
    )

Teste - Renda Total

survey::svymean(~RENDA_TOTAL.x, 
                design = subset(POF_design,(V0306 == 1),
                na.rm = TRUE, 
                level = 0.95))

# Resultado esperado: R$ 5426.7
# Resultado encontrado: R$ 6744.1`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants