Notebook para criação de tabela de indicadores da PNS - módulo P 2019 Atividade Física

Bibliotecas Utilizadas

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

Carregando microdados da PNS

In [14]:
#Carregando banco de dados para R versão 3.5.0 ou superior
load("<coloque aqui o caminho para o arquivo dos microdados formato RDATA>")

Definição do peso e filtragem de respondentes do questionario

In [15]:
#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 [16]:
#Desfechos - Indicadores

#P017P - Tempo de televisão de 3h ou mais por dia
pns2019.1$P04501[which(is.na(pns2019.1$P04501))] <- 0
pns2019.1 <- pns2019.1 %>% filter(P04501!=9) %>% mutate(P017P = ifelse(P04501==4|P04501==5, 1,2))
pns2019.1$P017P<-factor(pns2019.1$P017P, levels=c(1,2), labels=c("Sim","Nao"))
summary(pns2019.1$P017P)


#P018P - Uso de telas (computador, celular ou tablets) por 3h ou mais no tempo livre
pns2019.1$P04502[which(is.na(pns2019.1$P04502))] <- 0
pns2019.1 <- pns2019.1 %>% filter(P04502!=9) %>% mutate(P018P = ifelse(P04502==4|P04502==5, 1,2))
pns2019.1$P018P<-factor(pns2019.1$P018P, levels=c(1,2), labels=c("Sim","Nao"))
summary(pns2019.1$P018P)
Sim
19719
Nao
71127
Sim
18087
Nao
72759

Definições de abrangências

Situação urbana ou rural

In [17]:
#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 [18]:
#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 [19]:
#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("Rondonia","Acre","Amazonas","Roraima","Para","Amapa","Tocantins","Maranhao","Piaui","Ceara",
                                        "Rio Grande do Norte","Paraiba","Pernambuco","Alagoas","Sergipe","Bahia",
                                        "Minas Gerais","Espirito Santo","Rio de Janeiro","Sao Paulo",
                                        "Parana","Santa Catarina","Rio Grande do Sul", 
                                        "Mato Grosso do Sul","Mato Grosso","Goias","Distrito Federal"))
summary(pns2019.1$Unidades_da_Federacao)
Rondonia
2176
Acre
2380
Amazonas
3479
Roraima
2238
Para
3853
Amapa
1554
Tocantins
1922
Maranhao
5080
Piaui
2740
Ceara
4265
Rio Grande do Norte
2962
Paraiba
3158
Pernambuco
4083
Alagoas
2987
Sergipe
2610
Bahia
3659
Minas Gerais
5209
Espirito Santo
3541
Rio de Janeiro
4966
Sao Paulo
6114
Parana
3967
Santa Catarina
3738
Rio Grande do Sul
3767
Mato Grosso do Sul
2863
Mato Grosso
2468
Goias
2702
Distrito Federal
2365

Grandes Regiões

In [20]:
#Grandes Regiões
pns2019.1 <- pns2019.1 %>% 
  mutate(GrandesRegioes = fct_collapse(Unidades_da_Federacao, 
                                          `1 Norte` = c("Rondonia","Acre","Amazonas","Roraima","Para", "Amapa","Tocantins"),
                                          `2 Nordeste` = c("Maranhao", "Piaui", "Ceara", "Rio Grande do Norte", "Paraiba","Pernambuco", "Alagoas","Sergipe","Bahia"),
                                          `3 Sudeste` = c("Minas Gerais", "Espirito Santo","Rio de Janeiro", "Sao Paulo"), 
                                          `4 Sul` = c("Parana", "Santa Catarina", "Rio Grande do Sul"),
                                          `5 Centro-Oeste`= c("Mato Grosso do Sul","Mato Grosso", "Goias", "Distrito Federal")))
summary(pns2019.1$GrandesRegioes)
1 Norte
17602
2 Nordeste
31544
3 Sudeste
19830
4 Sul
11472
5 Centro-Oeste
10398

Capital

In [21]:
#Capital
pns2019.1<- pns2019.1 %>% mutate(Capital= fct_collapse(Unidades_da_Federacao,
                                        `Porto Velho`= "Rondonia", 
                                        `Boa Vista`= "Roraima",              
                                        `Rio Branco `= "Acre", 
                                        `Manaus` = "Amazonas",
                                        `Boa Vista`= "Roraima",
                                        `Belem` = "Para" ,
                                        `Macapa`= "Amapa",
                                        `Palmas` = "Tocantins",
                                        `Sao Luis` = "Maranhao",
                                        `Teresina`= "Piaui" ,
                                        `Fortaleza`= "Ceara",
                                        `Natal`= "Rio Grande do Norte",
                                        `Joao Pessoa`= "Paraiba",
                                        `Recife`= "Pernambuco",
                                        `Maceio`= "Alagoas",
                                        `Aracaju`= "Sergipe",
                                        `Salvador`= "Bahia",
                                        `Belo Horizonte`= "Minas Gerais",
                                        `Vitoria`= "Espirito Santo",
                                        `Rio de Janeiro`= "Rio de Janeiro",
                                        `Sao Paulo`= "Sao Paulo",
                                        `Curitiba`= "Parana",
                                        `Florianopolis`= "Santa Catarina",
                                        `Porto Alegre`= "Rio Grande do Sul",
                                        `Campo Grande`=  "Mato Grosso do Sul",
                                        `Cuiaba`= "Mato Grosso",
                                        `Goiania` = "Goias",
                                        `Brasilia`= "Distrito Federal"))
summary(pns2019.1$Capital)
Porto Velho
2176
Rio Branco
2380
Manaus
3479
Boa Vista
2238
Belem
3853
Macapa
1554
Palmas
1922
Sao Luis
5080
Teresina
2740
Fortaleza
4265
Natal
2962
Joao Pessoa
3158
Recife
4083
Maceio
2987
Aracaju
2610
Salvador
3659
Belo Horizonte
5209
Vitoria
3541
Rio de Janeiro
4966
Sao Paulo
6114
Curitiba
3967
Florianopolis
3738
Porto Alegre
3767
Campo Grande
2863
Cuiaba
2468
Goiania
2702
Brasilia
2365

Faixa Etária

In [22]:
#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 [23]:
#Raça
pns2019.1 <- pns2019.1 %>% filter(C009!=3|C009!=5|C009!=9)%>% mutate(Raca= ifelse(C009==1, 1, 
                        ifelse(C009==2 , 2, 3)))
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
47368

Renda per Capita

In [24]:
#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("Ate 1/2 SM","1/2 ate 1 SM","1 ate 2 SM",
                                                                                   "2 ate 3 SM","Mais de 3 SM"))
summary(pns2019.1$rend_per_capita)
Ate 1/2 SM
23697
1/2 ate 1 SM
26406
1 ate 2 SM
22466
2 ate 3 SM
7612
Mais de 3 SM
10665

Escolaridade

In [25]:
# 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("Sem instrucao e fundamental incompleto","Fundamental completo e medio incompleto",
                                           "Medio completo e superior incompleto","Superior completo"))
summary(pns2019.1$gescol)
Sem instrucao e fundamental incompleto
36276
Fundamental completo e medio incompleto
13520
Medio completo e superior incompleto
27433
Superior completo
13617

Criando Indicadores

Filtrando base de indicadores

In [26]:
#Selecionando variáveis para cálculo de indicadores no survey_ALTERAR
pns2019Psurvey<- pns2019.1 %>% select("V0024","UPA_PNS","peso_morador_selec","P017P","P018P",
                                    "C008","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 P017P      
 Min.   :1110011   Min.   :110000016   Min.   : 0.00582   Sim:19719  
 1st Qu.:2210011   1st Qu.:220001391   1st Qu.: 0.27579   Nao:71127  
 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              
                                                                     
 P018P            C008            V0031       Sit_Urbano_Rural
 Sim:18087   Min.   : 15.00   Min.   :1.000   Urbano:69873    
 Nao:72759   1st Qu.: 32.00   1st Qu.:1.000   Rural :20973    
             Median : 45.00   Median :2.000                   
             Mean   : 46.39   Mean   :2.605                   
             3rd Qu.: 60.00   3rd Qu.:4.000                   
             Max.   :107.00   Max.   :4.000                   
                                                              
        Sexo          Unidades_da_Federacao        GrandesRegioes 
 Masculino:42799   Sao Paulo     : 6114     1 Norte       :17602  
 Feminino :48047   Minas Gerais  : 5209     2 Nordeste    :31544  
                   Maranhao      : 5080     3 Sudeste     :19830  
                   Rio de Janeiro: 4966     4 Sul         :11472  
                   Ceara         : 4265     5 Centro-Oeste:10398  
                   Pernambuco    : 4083                           
                   (Other)       :61129                           
           Capital               faixa_idade        Raca      
 Sao Paulo     : 6114   18 a 29 anos   :15394   Branca:33133  
 Belo Horizonte: 5209   30 a 44 anos   :26754   Preta :10345  
 Sao Luis      : 5080   45 a 59 anos   :23655   Parda :47368  
 Rio de Janeiro: 4966   60 a 74 anos   :16767                 
 Fortaleza     : 4265   75 anos ou mais: 5961                 
 Recife        : 4083   NA's           : 2315                 
 (Other)       :61129                                         
     rend_per_capita                                      gescol     
 Ate 1/2 SM  :23697   Sem instrucao e fundamental incompleto :36276  
 1/2 ate 1 SM:26406   Fundamental completo e medio incompleto:13520  
 1 ate 2 SM  :22466   Medio completo e superior incompleto   :27433  
 2 ate 3 SM  : 7612   Superior completo                      :13617  
 Mais de 3 SM:10665                                                  
                                                                     
                                                                     

Exporta tabela filtrada

In [63]:
#Salvando csv para cálculo de indicadores no survey_ALTERAR
path <- "<coloque aqui o caminho onde deseja salvar a base filtrada>"
write.csv(pns2019Psurvey, file.path(path, "pns2019Psurvey.csv"))

Cria plano amostral complexo

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

Criação da tabela de indicadores

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

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

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

In [29]:
ListaIndicadores = c(~P017P,~P018P)
ListaIndicadoresTexto = c("P017P","P018P")
ListaDominios = c(~Sexo,~Raca,~rend_per_capita,~faixa_idade,~Sit_Urbano_Rural,~Unidades_da_Federacao,~GrandesRegioes,~Capital,~gescol)
ListaDominiosTexto = c("Sexo","raca","rend_per_capita","fx_idade_18","urb_rur","uf","regiao","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 [30]:
#Cálculo dos indicadores usando o pacote survey 
i <- 0
for( indicador in ListaIndicadores){
    i <- i + 1
    j <- 1
    for (dominio in ListaDominios){
                if (ListaDominiosTexto[j]=="capital"){
                   dataframe_indicador<-svyby( indicador , dominio , desPNSPC18 , svymean,vartype="ci")
               }else{
                   dataframe_indicador<-svyby( indicador , dominio , desPNSP18 , svymean,vartype="ci")
               }
               dataframe_indicador<-data.frame(dataframe_indicador)
               
               colnames(dataframe_indicador) <- c("abr_nome","Sim","Não","LowerS","LowerN","UpperS","UpperN")
               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","Não","LowerS","LowerN","UpperS","UpperN")
               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 [34]:
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)
        }
        
        dataframe_indicador <- cbind(data.frame(dataframe_indicador),data.frame(confint(dataframe_indicador)))
        dataframe_indicador <- dataframe_indicador %>% 
                               select('mean','X2.5..','X97.5..') 
        dataframe_indicador_S <- dataframe_indicador %>% 
                                 slice(1)
        dataframe_indicador_N <- dataframe_indicador %>% 
                                 slice(2)
        dataframe_indicador <- cbind(dataframe_indicador_S,dataframe_indicador_N)
        colnames(dataframe_indicador) <- c('Sim','LowerS','UpperS','Não','LowerN','UpperN')
        dataframe_indicador <- dataframe_indicador %>% 
                               select('Sim','Não','LowerS','LowerN','UpperS','UpperN')
        dataframe_indicador$Indicador <- ListaIndicadoresTexto[i]
        dataframe_indicador$abr_tipo <- "total"
        dataframe_indicador$abr_nome <- total
        dataframe_indicador$Ano <- Ano 
        dataframe_indicador <- dataframe_indicador %>% 
                             select("abr_tipo","abr_nome","Ano","Indicador","Sim","Não","LowerS","LowerN","UpperS","UpperN")
        
        matriz_totais <-rbind(matriz_totais,dataframe_indicador)
        
    }
}

Unindo tabela de indicadores e de totais

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

Exportando tabela de indicadores

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