Notebook para criação de tabela de indicadores da PNS - módulo P 2019 Alimentação

Bibliotecas Utilizadas

In [ ]:
#Lendo pacotes necessários
library(survey)
library(ggplot2)
library(dplyr)
library(foreign)
library(forcats)
library(tidyverse)

Carregando microdados da PNS

In [ ]:
#Carregando banco de dados
load("<coloque aqui o caminho para o arquivo dos microdados formato RDATA>")

Definição do peso e filtragem de respondentes do questionário

In [3]:
#Selecionando registros válidos para o módulo P e calculando peso amostral - summary de verificação
pns2019.1<-pns2019v3 %>% filter(V0025A==1)
pns2019.1<-pns2019.1 %>% mutate(peso_morador_selec=((V00291*(94114/168426190))))
pns2019.1<-pns2019.1 %>% filter(!is.na(peso_morador_selec))
summary(pns2019.1$peso_morador_selec)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
 0.00582  0.27579  0.56358  1.03597  1.16822 63.29775 

Criação de variáveis dos indicadores

In [4]:
#Desfechos - Indicadores

#Indivíduos de 18 anos ou mais que consomem feijão regularmente  - P001P
pns2019.1 <- pns2019.1 %>% filter(P006!=9) %>% mutate(P001P = ifelse(P006>=5, 1,2))
pns2019.1$P001P<-factor(pns2019.1$P001P, levels=c(1,2), labels=c("Sim","Nao"))
summary(pns2019.1$P001P)

#Indivíduos de 18 anos ou mais com consumo adequado de frutas, legumes e verduras - P002P
pns2019.1 <- pns2019.1 %>% mutate(P002P = ifelse(P00901 >= 5 & P018>=5,1,2))                                         
pns2019.1$P002P<-factor(pns2019.1$P002P, levels=c(1,2), labels=c("Sim","Não"))
summary(pns2019.1$P002P)


#Indivíduos de 18 anos ou mais que consomem peixe pelo menos um dia por semana  - P003P
pns2019.1 <- pns2019.1 %>% filter(P015!=9) %>% mutate(P003P = ifelse(P015>=1, 1,2))
pns2019.1$P003P<-factor(pns2019.1$P003P, levels=c(1,2), labels=c("Sim","Nao"))
summary(pns2019.1$P003P)


#Indivíduos de 18 anos ou mais que consomem refrigerantes regularmente  - P004P
pns2019.1 <- pns2019.1 %>% filter(P02002!=9) %>% mutate(P004P = ifelse(P02002>=5, 1,2))
pns2019.1$P004P<-factor(pns2019.1$P004P, levels=c(1,2), labels=c("Sim","Nao"))
summary(pns2019.1$P004P)

#Indivíduos de 18 anos ou mais que consomem alimentos doces regularmente  - P005P
pns2019.1 <- pns2019.1 %>% filter(P02501!=9) %>% mutate(P005P = ifelse(P02501>=5, 1,2))
pns2019.1$P005P<-factor(pns2019.1$P005P, levels=c(1,2), labels=c("Sim","Nao"))
summary(pns2019.1$P005P)

#Indivíduos de 18 anos ou mais que substituem o almoço por sanduiches, salgados ou pizzas regularmente  - P006P
pns2019.1 <- pns2019.1 %>% filter(P02602!=9) %>% mutate(P006P = ifelse(P02602>=5, 1,2))
pns2019.1$P006P<-factor(pns2019.1$P006P, levels=c(1,2), labels=c("Sim","Nao"))
summary(pns2019.1$P006P)

#Indivíduos de 18 anos ou mais que referem consumo elevado de sal - P007P
pns2019.1 <- pns2019.1 %>% filter(P02601!=9) %>% mutate(P007P = ifelse(P02601==1|P02601==2, 1,2))
pns2019.1$P007P<-factor(pns2019.1$P007P, levels=c(1,2), labels=c("Sim","Nao"))
summary(pns2019.1$P007P)

#Consumo de alguma hortaliça no dia anterior à pesquisa - P030P
pns2019.1 <- pns2019.1 %>% mutate(P030P = ifelse(P00607==1 | P00608==1 | P00609==1,1,
                                          ifelse(P00607==2 & P00608==2 & P00609==2,2,2)))                                        
pns2019.1$P030P<-factor(pns2019.1$P030P, levels=c(1,2), labels=c("Sim","Não"))
summary(pns2019.1$P030P)

#Consumo de pelo menos uma fruta no dia anterior à pesquisa  - P031P
pns2019.1 <- pns2019.1 %>% mutate(P031P = ifelse(P00610 ==1 | P00611 ==1,1,
                                          ifelse(P00610 ==2 & P00611 ==2 ,2,2)))                                        
pns2019.1$P031P<-factor(pns2019.1$P031P, levels=c(1,2), labels=c("Sim","Não"))
summary(pns2019.1$P031P)

#Não consumiu alimento ultraprocessado no dia anterior à pesquisa - P032P 
pns2019.1 <- pns2019.1 %>% mutate(P032P = ifelse(P00614 == 1 | P00615 == 1 | P00616 == 1 | P00617 == 1 | P00618 == 1 
                                                 | P00619 == 1 | P00620 == 1 | P00621 == 1 | P00622 == 1 | P00623 == 1,2,
                                          ifelse(P00614 == 2 & P00615 == 2 & P00616 == 2 & P00617 == 2 & P00618 == 2 
                                                 & P00619 == 2 & P00620 == 2 & P00621 == 2 & P00622 == 2 & P00623 == 2 ,1,1)))                                        
pns2019.1$P032P<-factor(pns2019.1$P032P, levels=c(1,2), labels=c("Sim","Não"))
summary(pns2019.1$P032P)
Sim
58325
Nao
32521
Sim
27673
Não
63173
Sim
48902
Nao
41944
Sim
6850
Nao
83996
Sim
11628
Nao
79218
Sim
1612
Nao
89234
Sim
10247
Nao
80599
Sim
67236
Não
23610
Sim
61663
Não
29183
Sim
16532
Não
74314

Definições de abrangências

Situação urbana ou rural

In [5]:
#Situação Urbano ou Rural
pns2019.1 <- pns2019.1 %>% rename(Sit_Urbano_Rural=V0026)
pns2019.1$Sit_Urbano_Rural<-factor(pns2019.1$Sit_Urbano_Rural, levels=c(1,2), labels=c("Urbano", "Rural"))
summary(pns2019.1$Sit_Urbano_Rural)
Urbano
69873
Rural
20973

Sexo

In [6]:
#Sexo
pns2019.1 <- pns2019.1 %>% rename(Sexo=C006)
pns2019.1$Sexo<-factor(pns2019.1$Sexo, levels=c(1,2), labels=c("Masculino", "Feminino"))
summary(pns2019.1$Sexo)
Masculino
42799
Feminino
48047

UF

In [7]:
#Estados - UFs
pns2019.1 <- pns2019.1 %>% rename(Unidades_da_Federacao=V0001)
pns2019.1$Unidades_da_Federacao<-factor(pns2019.1$Unidades_da_Federacao, levels=c(11,12,13,14,15,16,17,21,22,23,24,25,26,27,28,29,31,32,33,35,41,42,43,50,51,52,53),
                                       label=c("Rondônia","Acre","Amazonas","Roraima","Pará","Amapá","Tocantins","Maranhão","Piauí","Ceará",
                                        "Rio Grande do Norte","Paraíba","Pernambuco","Alagoas","Sergipe","Bahia",
                                        "Minas Gerais","Espírito Santo","Rio de Janeiro","São Paulo",
                                        "Paraná","Santa Catarina","Rio Grande do Sul", 
                                        "Mato Grosso do Sul","Mato Grosso","Goiás","Distrito Federal"))
summary(pns2019.1$Unidades_da_Federacao)
Rondônia
2176
Acre
2380
Amazonas
3479
Roraima
2238
Pará
3853
Amapá
1554
Tocantins
1922
Maranhão
5080
Piauí
2740
Ceará
4265
Rio Grande do Norte
2962
Paraíba
3158
Pernambuco
4083
Alagoas
2987
Sergipe
2610
Bahia
3659
Minas Gerais
5209
Espírito Santo
3541
Rio de Janeiro
4966
São Paulo
6114
Paraná
3967
Santa Catarina
3738
Rio Grande do Sul
3767
Mato Grosso do Sul
2863
Mato Grosso
2468
Goiás
2702
Distrito Federal
2365

Grandes Regiões

In [8]:
#Grandes Regiões
pns2019.1 <- pns2019.1 %>% 
  mutate(GrandesRegioes = fct_collapse(Unidades_da_Federacao, 
                                          `Norte` = c("Rondônia","Acre","Amazonas","Roraima","Pará", "Amapá","Tocantins"),
                                          `Nordeste` = c("Maranhão", "Piauí", "Ceará", "Rio Grande do Norte", "Paraíba","Pernambuco", "Alagoas","Sergipe","Bahia"),
                                          `Sudeste` = c("Minas Gerais", "Espírito Santo","Rio de Janeiro", "São Paulo"), 
                                          `Sul` = c("Paraná", "Santa Catarina", "Rio Grande do Sul"),
                                          `Centro-Oeste`= c("Mato Grosso do Sul","Mato Grosso", "Goiás", "Distrito Federal")))
summary(pns2019.1$GrandesRegioes)
Norte
17602
Nordeste
31544
Sudeste
19830
Sul
11472
Centro-Oeste
10398

Capitais

In [9]:
#Capital
pns2019.1<- pns2019.1 %>% mutate(Capital= fct_collapse(Unidades_da_Federacao,
                                        `Porto Velho`= "Rondônia", 
                                        `Boa Vista`= "Roraima",              
                                        `Rio Branco`= "Acre", 
                                        `Manaus` = "Amazonas",
                                        `Belém` = "Pará" ,
                                        `Macapá`= "Amapá",
                                        `Palmas` = "Tocantins",
                                        `São Luís` = "Maranhão",
                                        `Teresina`= "Piauí" ,
                                        `Fortaleza`= "Ceará",
                                        `Natal`= "Rio Grande do Norte",
                                        `João Pessoa`= "Paraíba",
                                        `Recife`= "Pernambuco",
                                        `Maceió`= "Alagoas",
                                        `Aracaju`= "Sergipe",
                                        `Salvador`= "Bahia",
                                        `Belo Horizonte`= "Minas Gerais",
                                        `Vitória`= "Espírito Santo",
                                        `Rio de Janeiro`= "Rio de Janeiro",
                                        `São Paulo`= "São Paulo",
                                        `Curitiba`= "Paraná",
                                        `Florianópolis`= "Santa Catarina",
                                        `Porto Alegre`= "Rio Grande do Sul",
                                        `Campo Grande`=  "Mato Grosso do Sul",
                                        `Cuiabá`= "Mato Grosso",
                                        `Goiânia` = "Goiás",
                                        `Brasília`= "Distrito Federal"))
summary(pns2019.1$Capital)
Porto Velho
2176
Rio Branco
2380
Manaus
3479
Boa Vista
2238
Belém
3853
Macapá
1554
Palmas
1922
São Luís
5080
Teresina
2740
Fortaleza
4265
Natal
2962
João Pessoa
3158
Recife
4083
Maceió
2987
Aracaju
2610
Salvador
3659
Belo Horizonte
5209
Vitória
3541
Rio de Janeiro
4966
São Paulo
6114
Curitiba
3967
Florianópolis
3738
Porto Alegre
3767
Campo Grande
2863
Cuiabá
2468
Goiânia
2702
Brasília
2365

Faixa Etária

In [10]:
#Faixas Etárias
pns2019.1 <-  pns2019.1 %>% mutate(faixa_idade=cut(C008,
  breaks = c(18,30, 45, 60, 75,Inf),
  labels = c("18 a 29 anos","30 a 44 anos","45 a 59 anos","60 a 74 anos","75 anos ou mais"), 
  ordered_result = TRUE, right = FALSE))
summary(pns2019.1$faixa_idade)
18 a 29 anos
15394
30 a 44 anos
26754
45 a 59 anos
23655
60 a 74 anos
16767
75 anos ou mais
5961
NA's
2315

Raça

In [11]:
#Raça
pns2019.1 <- pns2019.1 %>% mutate(Raca= ifelse(C009==1, 1, 
                        ifelse(C009==2, 2, 
                            ifelse(C009==4, 3, 9))))

pns2019.1$Raca<-factor(pns2019.1$Raca, levels=c(1,2,3),labels=c("Branca", "Preta", "Parda"))

summary(pns2019.1$Raca)
Branca
33133
Preta
10345
Parda
45994
NA's
1374

Renda per capita

In [12]:
#Rendimento domiciliar per capita

pns2019.1 <- pns2019.1 %>% mutate(rend_per_capita = ifelse(VDF004 %in% 1:2, 1, 
                        ifelse(VDF004%in% 3, 2, 
                        ifelse(VDF004%in% 4, 3,
                        ifelse(VDF004%in% 5, 4,5)))))

pns2019.1$rend_per_capita<-factor(pns2019.1$rend_per_capita, levels=c(1,2,3,4,5), labels=c("Até 1/2 SM","1/2 até 1 SM","1 até 2 SM",
                                                                                   "2 até 3 SM","Mais de 3 SM"))
summary(pns2019.1$rend_per_capita)
Até 1/2 SM
23697
1/2 até 1 SM
26406
1 até 2 SM
22466
2 até 3 SM
7612
Mais de 3 SM
10665

Escolaridade

In [13]:
# Escolaridade
pns2019.1 <- pns2019.1 %>% mutate(gescol = ifelse(VDD004A %in% 1:2, 1, 
                        ifelse(VDD004A%in% 3:4, 2, 
                        ifelse(VDD004A%in% 5:6, 3,4
                        ))))

pns2019.1$gescol<-factor(pns2019.1$gescol, levels=c(1,2,3,4), 
                                  labels=c("Fundamental incompleto ou equivalente","Médio incompleto ou equivalente",
                                           "Superior incompleto ou equivalente","Superior completo"))
summary(pns2019.1$gescol)
Fundamental incompleto ou equivalente
36276
Médio incompleto ou equivalente
13520
Superior incompleto ou equivalente
27433
Superior completo
13617

Criando indicadores

Filtrando base de indicadores

In [14]:
#Selecionando variáveis para cálculo de indicadores no survey_ALTERAR
pns2019Psurvey<- pns2019.1 %>% select("V0024","UPA_PNS","peso_morador_selec","P001P","P002P","P003P","P004P", "P005P","P006P","P007P","P030P","P031P","P032P",
                                    "C008","C009","V0031", "Sit_Urbano_Rural","Sexo","Unidades_da_Federacao", "GrandesRegioes",
                                     "Capital","faixa_idade", "Raca","rend_per_capita","gescol", "Capital")
summary(pns2019Psurvey)
     V0024            UPA_PNS          peso_morador_selec P001P      
 Min.   :1110011   Min.   :110000016   Min.   : 0.00582   Sim:58325  
 1st Qu.:2210011   1st Qu.:220001391   1st Qu.: 0.27579   Nao:32521  
 Median :2853020   Median :280039950   Median : 0.56358              
 Mean   :2998072   Mean   :296695855   Mean   : 1.03597              
 3rd Qu.:3553013   3rd Qu.:350588998   3rd Qu.: 1.16822              
 Max.   :5310220   Max.   :530051067   Max.   :63.29775              
                                                                     
 P002P       P003P       P004P       P005P       P006P       P007P      
 Sim:27673   Sim:48902   Sim: 6850   Sim:11628   Sim: 1612   Sim:10247  
 Não:63173   Nao:41944   Nao:83996   Nao:79218   Nao:89234   Nao:80599  
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
 P030P       P031P       P032P            C008             C009      
 Sim:67236   Sim:61663   Sim:16532   Min.   : 15.00   Min.   :1.000  
 Não:23610   Não:29183   Não:74314   1st Qu.: 32.00   1st Qu.:1.000  
                                     Median : 45.00   Median :4.000  
                                     Mean   : 46.39   Mean   :2.679  
                                     3rd Qu.: 60.00   3rd Qu.:4.000  
                                     Max.   :107.00   Max.   :9.000  
                                                                     
     V0031       Sit_Urbano_Rural        Sexo          Unidades_da_Federacao
 Min.   :1.000   Urbano:69873     Masculino:42799   São Paulo     : 6114    
 1st Qu.:1.000   Rural :20973     Feminino :48047   Minas Gerais  : 5209    
 Median :2.000                                      Maranhão      : 5080    
 Mean   :2.605                                      Rio de Janeiro: 4966    
 3rd Qu.:4.000                                      Ceará         : 4265    
 Max.   :4.000                                      Pernambuco    : 4083    
                                                    (Other)       :61129    
      GrandesRegioes            Capital               faixa_idade   
 Norte       :17602   São Paulo     : 6114   18 a 29 anos   :15394  
 Nordeste    :31544   Belo Horizonte: 5209   30 a 44 anos   :26754  
 Sudeste     :19830   São Luís      : 5080   45 a 59 anos   :23655  
 Sul         :11472   Rio de Janeiro: 4966   60 a 74 anos   :16767  
 Centro-Oeste:10398   Fortaleza     : 4265   75 anos ou mais: 5961  
                      Recife        : 4083   NA's           : 2315  
                      (Other)       :61129                          
     Raca           rend_per_capita 
 Branca:33133   Até 1/2 SM  :23697  
 Preta :10345   1/2 até 1 SM:26406  
 Parda :45994   1 até 2 SM  :22466  
 NA's  : 1374   2 até 3 SM  : 7612  
                Mais de 3 SM:10665  
                                    
                                    
                                   gescol     
 Fundamental incompleto ou equivalente:36276  
 Médio incompleto ou equivalente      :13520  
 Superior incompleto ou equivalente   :27433  
 Superior completo                    :13617  
                                              
                                              
                                              

Exporta tabela filtrada

In [15]:
#Salvando csv para cálculo de indicadores no survey_ALTERAR
path <- "../dados/"
write.csv(pns2019Psurvey, file.path(path, "pns2019Psurvey.csv"))

Cria plano amostral complexo

In [16]:
#survey design
desPNSP=svydesign(id=~UPA_PNS, strat=~V0024, weight=~peso_morador_selec, nest=TRUE, data=pns2019Psurvey)
desPNSP18=subset(desPNSP, C008>=18)
desPNSPC18=subset(desPNSP, C008>=18 & V0031==1)
desPNSPR18=subset(desPNSP, C008>=18 & Raca!=9)

Criação da tabela de indicadores

Essa tabela é responsável por unir os indicadores no formato do painel de indicadores

In [27]:
matrizIndicadores = data.frame()

Definição de variáveis para iteração dos indicadores

In [28]:
ListaIndicadores = c(~P001P,~P002P,~P003P,~P004P,~P005P,~P006P,~P007P,~P030P,~P031P,~P032P)
ListaIndicadoresTexto = c("P001P","P002P","P003P","P004P","P005P","P006P","P007P","P030P","P031P","P032P")
ListaDominios = c(~Sexo,~Raca,~rend_per_capita,~faixa_idade,~Sit_Urbano_Rural,~Unidades_da_Federacao,~GrandesRegioes,~Capital,~gescol)
ListaDominiosTexto = c("Sexo","raça","rend_per_capita","fx_idade_18","urb_rur","uf","região","capital","gescol")
ListaTotais = c('Brasil','Capital')
Ano <- "2019"

Preenchendo a tabela de indicadores

Essas iterações rodam por indicador, abrangência e por design

In [29]:
#Cálculo dos indicadores usando o pacote survey 
i <- 0
#Para cada indicador
for( indicador in ListaIndicadores){
    i <- i + 1
    j <- 1
    #Para cada dominio
    for (dominio in ListaDominios){
               #design especifico para capital que é subconjunto do dataframe total
               if (ListaDominiosTexto[j]=="capital"){
                   #designs especificos por variavel que são subconjuntos do dataset total
                   dataframe_indicador<-svyby( indicador , dominio , desPNSPC18 , svymean,vartype= c("ci","cv"))
               #Uso design do subconjunto para raça/cor que inclui preta, branca e parda as outras 
               #não possuiam dados suficientes para os dominios dos indicadores
               }else if (ListaDominiosTexto[j]=="raça"){
                    dataframe_indicador<-svyby( indicador , dominio , desPNSPR18 , svymean,vartype= c("ci","cv"))
               #design geral para o subconjunto maior que 18 anos    
               }else {
                    dataframe_indicador<-svyby( indicador , dominio , desPNSP18 , svymean,vartype= c("ci","cv"))
               }
               #União do dataframe de indicadores no formato do painel disponibilizado para PNS
               dataframe_indicador<-data.frame(dataframe_indicador)
               colnames(dataframe_indicador) <- c("abr_nome","Sim","Não","LowerS","LowerN","UpperS","UpperN","cvS","cvN")
               dataframe_indicador$Indicador <- ListaIndicadoresTexto[i]
               dataframe_indicador$abr_tipo <- ListaDominiosTexto[j]
               dataframe_indicador$Ano <- Ano
               dataframe_indicador <- dataframe_indicador %>% select("abr_tipo","abr_nome","Ano","Indicador","Sim","LowerS","UpperS","cvS")
               matrizIndicadores <-rbind(matrizIndicadores,dataframe_indicador)
               j <- j + 1
               
    }
}

Criando a tabela pela abrangência total

In [31]:
matriz_totais <- data.frame()

Preenchendo a tabela com as abrangencia Brasil e total das capitais

In [ ]:
i=0
for(indicador in ListaIndicadores){
    i <- i+1
    for(total in ListaTotais){
        dataframe_indicador <- data.frame()
        dataframe_indicador_S <- data.frame()
        dataframe_indicador_N <- data.frame()
        if(total == 'Capital'){
            dataframe_indicador <- svymean(indicador,desPNSPC18)
        }else{
            dataframe_indicador <- svymean(indicador,desPNSP18)
        }
        
        intervalo_confianca <- confint(dataframe_indicador)
        coeficiente_variacao <- cv(dataframe_indicador)
        dataframe_indicador <- cbind(data.frame(dataframe_indicador),data.frame(intervalo_confianca))
        dataframe_indicador <- cbind(data.frame(dataframe_indicador),data.frame(coeficiente_variacao))
        
        dataframe_indicador <- dataframe_indicador %>% 
                               select('mean','X2.5..','X97.5..',coeficiente_variacao) 
        dataframe_indicador_S <- dataframe_indicador %>% 
                                 slice(1)
                
        colnames(dataframe_indicador_S) <- c('Sim','LowerS','UpperS', 'cvS')
        dataframe_indicador_S <- dataframe_indicador_S %>% 
                               select('Sim','LowerS','UpperS','cvS')
        dataframe_indicador_S$Indicador <- ListaIndicadoresTexto[i]
        print(ListaIndicadoresTexto[i])
        dataframe_indicador_S$abr_tipo <- "total"
        dataframe_indicador_S$abr_nome <- total
        dataframe_indicador_S$Ano <- Ano 
        print(colnames(dataframe_indicador_S))
        dataframe_indicador_S <- dataframe_indicador_S %>% 
                             select("abr_tipo","abr_nome","Ano","Indicador","Sim","LowerS","UpperS",'cvS')
        
        matriz_totais <-rbind(matriz_totais,dataframe_indicador_S)
        
    }
}

Unindo tabela de indicadores e de totais

In [34]:
matrizIndicadores<-rbind(matrizIndicadores,matriz_totais)

Exportando tabela de indicadores

In [36]:
write.table(matrizIndicadores,file="<coloque aqui o caminho para exportação da matriz de indicadores>",sep = ";",dec = ",",row.names = FALSE)