Notebook para criação de tabela de indicadores da PNS - módulo N 2019 Percepção do Estado de Saúde

Bibliotecas Utilizadas

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

Carregando microdados da PNS

In [8]:
#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 PNS 2019>")

#conferindo as dimensões (número de linhas e colunas)
dim("<Coloque aqui o nome do arquivo RDATA PNS 2019>")
  1. 293726
  2. 1087

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

In [9]:
#Selecionando registros válidos para o módulo P e calculando peso amostral - summary de verificação
pns2019.1<- <Coloque aqui o nome do arquivo RDATA>  %>% 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 [10]:
#Desfechos - Indicadores

# Autoavaliação de saúde boa ou muito boa - N001P 
pns2019.1 <- pns2019.1 %>% mutate(N001P = if_else(N001 %in% 1:2,1,2,missing=2))
pns2019.1$N001P<-factor(pns2019.1$N001P, levels=c(1,2), labels=c("Sim","Não"))
summary(pns2019.1$N001P)

# Autoavaliação de saúde ruim ou muito ruim - N002P  
pns2019.1 <- pns2019.1 %>% mutate(N002P = if_else(N001 %in% 4:5,1,2,missing=2))
pns2019.1$N002P<-factor(pns2019.1$N002P, levels=c(1,2), labels=c("Sim","Não"))
summary(pns2019.1$N002P)
Sim
56822
Não
34024
Sim
6108
Não
84738

Definições de abrangências

Situação urbana ou rural

In [11]:
#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 [12]:
#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 [13]:
#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 [14]:
#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

Capital

In [15]:
#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 [16]:
#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 [17]:
#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 [18]:
#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

Escolariadade

In [19]:
# 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 instrução e fundamental incompleto","Fundamental completo e médio incompleto",
                                           "Médio completo e superior incompleto","Superior completo"))
summary(pns2019.1$gescol)
Sem instrução e fundamental incompleto
36276
Fundamental completo e médio incompleto
13520
Médio completo e superior incompleto
27433
Superior completo
13617

Criando indicadores

Filtrando base de indicadores

In [20]:
#Selecionando variáveis para cálculo de indicadores no survey
pns2019Nsurvey<- pns2019.1 %>% select("V0024","UPA_PNS","peso_morador_selec", "N001P","N002P",
                                     "C008","V0031","C009","Sit_Urbano_Rural","Sexo","Unidades_da_Federacao", "GrandesRegioes",
                                     "faixa_idade", "Raca","rend_per_capita","gescol","Capital")
summary(pns2019Nsurvey)
     V0024            UPA_PNS      peso_morador_selec N001P       N002P      
 1210010: 1167   140001681:   18   Min.   : 0.00582   Sim:56822   Sim: 6108  
 1410011:  792   140003815:   18   1st Qu.: 0.27579   Não:34024   Não:84738  
 2710111:  779   140005777:   18   Median : 0.56358                          
 2410011:  745   140006746:   18   Mean   : 1.03597                          
 5010011:  738   140007081:   18   3rd Qu.: 1.16822                          
 3210011:  711   140007715:   18   Max.   :63.29775                          
 (Other):85914   (Other)  :90738                                             
      C008            V0031            C009       Sit_Urbano_Rural
 Min.   : 15.00   Min.   :1.000   Min.   :1.000   urbano:69873    
 1st Qu.: 32.00   1st Qu.:1.000   1st Qu.:1.000   rural :20973    
 Median : 45.00   Median :2.000   Median :4.000                   
 Mean   : 46.39   Mean   :2.605   Mean   :2.679                   
 3rd Qu.: 60.00   3rd Qu.:4.000   3rd Qu.:4.000                   
 Max.   :107.00   Max.   :4.000   Max.   :9.000                   
                                                                  
        Sexo          Unidades_da_Federacao      GrandesRegioes 
 Masculino:42799   São Paulo     : 6114     Norte       :17602  
 Feminino :48047   Minas Gerais  : 5209     Nordeste    :31544  
                   Maranhão      : 5080     Sudeste     :19830  
                   Rio de Janeiro: 4966     Sul         :11472  
                   Ceará         : 4265     Centro-Oeste:10398  
                   Pernambuco    : 4083                         
                   (Other)       :61129                         
          faixa_idade        Raca           rend_per_capita 
 18 a 29 anos   :15394   Branca:33133   Até 1/2 SM  :23697  
 30 a 44 anos   :26754   Preta :10345   1/2 até 1 SM:26406  
 45 a 59 anos   :23655   Parda :45994   1 até 2 SM  :22466  
 60 a 74 anos   :16767   NA's  : 1374   2 até 3 SM  : 7612  
 75 anos ou mais: 5961                  Mais de 3 SM:10665  
 NA's           : 2315                                      
                                                            
                                     gescol                Capital     
 Sem instrução e fundamental incompleto :36276   São Paulo     : 6114  
 Fundamental completo e médio incompleto:13520   Belo Horizonte: 5209  
 Médio completo e superior incompleto   :27433   São Luís      : 5080  
 Superior completo                      :13617   Rio de Janeiro: 4966  
                                                 Fortaleza     : 4265  
                                                 Recife        : 4083  
                                                 (Other)       :61129  

Exporta tabela filtrada com os dados específicos - Módulo N 2019

In [17]:
#Salvando csv para cálculo de indicadores no survey
diretorio_saida <- "<coloque aqui o diretório>"
write.csv(pns2019survey, file.path(diretorio_saida, "pns2019Nsurvey.csv"))

Cria plano amostral complexo

In [21]:
#survey design
desPNSN=svydesign(id=~UPA_PNS, strat=~V0024, weight=~peso_morador_selec, nest=TRUE, data=pns2019Nsurvey)
desPNSN18=subset(desPNSN, C008>=18)
desPNSNC=svydesign(id=~UPA_PNS, strat=~V0024, weight=~peso_morador_selec, nest=TRUE, data=pns2019Nsurvey)
desPNSNC18=subset(desPNSNC, C008>=18 & V0031==1)
desPNSNR18=subset(desPNSN, C008>=18 & C009!=9)

Criação da tabela de indicadores

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

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

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

In [23]:
ListaIndicadores = c(~N001P,~N002P)
ListaIndicadoresTexto = c("N001P","N002P")
ListaDominios = c(~Sexo,~Raca,~rend_per_capita,~faixa_idade,~Sit_Urbano_Rural,~Unidades_da_Federacao,~GrandesRegioes,~gescol,~Capital)
ListaDominiosTexto = c("sexo","raça","rend_per_capita","fx_idade_18","urb_rur","uf","região","gescol","capital")
ListaTotais = c('Brasil','Capital')
Ano <- "2019"

Preenchendo a tabela de indicadores

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

In [24]:
#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 , desPNSNC18 , svymean,vartype= c("ci","cv"))
               }else if(ListaDominiosTexto[j]=="raça"){
                   dataframe_indicador<-svyby( indicador , dominio , desPNSNR18 , svymean,vartype= c("ci","cv"))
                  }else{ 
                    dataframe_indicador<-svyby( indicador , dominio , desPNSN18 , 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 [25]:
matriz_totais <- data.frame()

Preenchendo a tabela com as abrangencia Brasil e total das capitais

In [26]:
i=0
for(indicador in ListaIndicadores){
    i <- i+1
    for(total in ListaTotais){
        dataframe_indicador <- data.frame()
        dataframe_indicador_S <- data.frame()
        if(total == 'Capital'){
            dataframe_indicador <- svymean(indicador,desPNSNC18)
        }else{
            dataframe_indicador <- svymean(indicador,desPNSN18)
        }
        
       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$Indicador <- ListaIndicadoresTexto[i]
        dataframe_indicador_S$abr_tipo <- "total"
        dataframe_indicador_S$abr_nome <- total
        dataframe_indicador_S$Ano <- Ano 
        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 [27]:
matrizIndicadores<-rbind(matrizIndicadores,matriz_totais)

Visualizando a tabela de indicadores

In [28]:
matrizIndicadores
A data.frame: 164 × 8
abr_tipoabr_nomeAnoIndicadorSimLowerSUpperScvS
<chr><fct><chr><chr><dbl><dbl><dbl><dbl>
Masculinosexo Masculino 2019N001P0.70409830.69583990.71235660.005984263
Femininosexo Feminino 2019N001P0.62326140.61519280.63132990.006605067
Brancaraça Branca 2019N001P0.71019870.70136590.71903160.006345581
Pretaraça Preta 2019N001P0.62945540.61377640.64513440.012708813
Pardaraça Parda 2019N001P0.62071700.61175920.62967490.007363099
Até 1/2 SMrend_per_capitaAté 1/2 SM 2019N001P0.57562320.56335290.58789360.010876009
1/2 até 1 SMrend_per_capita1/2 até 1 SM 2019N001P0.59913100.58839810.60986390.009140023
1 até 2 SMrend_per_capita1 até 2 SM 2019N001P0.68716990.67630290.69803700.008068624
2 até 3 SMrend_per_capita2 até 3 SM 2019N001P0.76349630.74560720.78138540.011954558
Mais de 3 SMrend_per_capitaMais de 3 SM 2019N001P0.83687940.82436000.84939880.007632592
18 a 29 anosfx_idade_18 18 a 29 anos 2019N001P0.80673890.79504610.81843160.007394960
30 a 44 anosfx_idade_18 30 a 44 anos 2019N001P0.74579590.73687860.75471320.006100490
45 a 59 anosfx_idade_18 45 a 59 anos 2019N001P0.59816850.58520340.61113360.011058705
60 a 74 anosfx_idade_18 60 a 74 anos 2019N001P0.49098710.47684870.50512550.014692044
75 anos ou maisfx_idade_18 75 anos ou mais 2019N001P0.41102670.39012910.43192430.025940509
urbanourb_rur urbano 2019N001P0.67694080.67016560.68371590.005106466
ruralurb_rur rural 2019N001P0.56250450.55075330.57425560.010658774
Rondôniauf Rondônia 2019N001P0.61435490.58482100.64388890.024527562
Acreuf Acre 2019N001P0.59949950.57049390.62850510.024685695
Amazonasuf Amazonas 2019N001P0.68186200.65786100.70586300.017959114
Roraimauf Roraima 2019N001P0.62866230.59838060.65894390.024576139
Paráuf Pará 2019N001P0.59471440.57053590.61889290.020743041
Amapáuf Amapá 2019N001P0.58936260.55867350.62005170.026567684
Tocantinsuf Tocantins 2019N001P0.58852770.55751140.61954390.026889005
Maranhãouf Maranhão 2019N001P0.52040150.50038940.54041360.019620354
Piauíuf Piauí 2019N001P0.54770470.52039720.57501220.025438264
Cearáuf Ceará 2019N001P0.60000990.57988580.62013400.017112358
Rio Grande do Norteuf Rio Grande do Norte2019N001P0.60098120.57135200.63061040.025154232
Paraíbauf Paraíba 2019N001P0.59486390.56828170.62144600.022799436
Pernambucouf Pernambuco 2019N001P0.59037360.56604670.61470050.021023828
Rio Branco 1capitalRio Branco 2019N002P0.053374690.0382215490.068527830.144850241
Manaus1capitalManaus 2019N002P0.034419090.0245840770.044254100.145789903
Boa Vista1capitalBoa Vista 2019N002P0.056044880.0417628350.070326920.130018860
Belém1capitalBelém 2019N002P0.034829320.0216649440.047993690.192844455
Macapá1capitalMacapá 2019N002P0.063668680.0460850110.081252360.140908001
Palmas1capitalPalmas 2019N002P0.047603960.0309060230.064301890.178966437
São Luís1capitalSão Luís 2019N002P0.056154870.0410478230.071261910.137259987
Teresina1capitalTeresina 2019N002P0.064479580.0464539840.082505180.142632796
Fortaleza1capitalFortaleza 2019N002P0.064927210.0441334250.085721000.163402513
Natal1capitalNatal 2019N002P0.060692340.0424836390.078901050.153072457
João Pessoa1capitalJoão Pessoa 2019N002P0.051567820.0364907970.066644840.149172471
Recife1capitalRecife 2019N002P0.047596360.0327694530.062423270.158938388
Maceió1capitalMaceió 2019N002P0.089676150.0714332930.107919010.103792948
Aracaju1capitalAracaju 2019N002P0.057365950.0394238500.075308050.159577264
Salvador1capitalSalvador 2019N002P0.063707140.0426547850.084759490.168602660
Belo Horizonte1capitalBelo Horizonte2019N002P0.027579880.0185222730.036637490.167561041
Vitória1capitalVitória 2019N002P0.040659280.0280289110.053289650.158492333
Rio de Janeiro3capitalRio de Janeiro2019N002P0.044668430.0335389000.055797950.127124106
São Paulo2capitalSão Paulo 2019N002P0.033562990.0247479530.042378030.134003293
Curitiba1capitalCuritiba 2019N002P0.047939260.0325205910.063357940.164099611
Florianópolis1capitalFlorianópolis 2019N002P0.020459600.0092740250.031645180.278941499
Porto Alegre1capitalPorto Alegre 2019N002P0.032599570.0201017650.045097370.195602194
Campo Grande1capitalCampo Grande 2019N002P0.044725630.0328746240.056576630.135191888
Cuiabá1capitalCuiabá 2019N002P0.026513210.0143737610.038652650.233608408
Goiânia1capitalGoiânia 2019N002P0.054481980.0395059910.069457970.140247329
Brasília1capitalBrasília 2019N002P0.039161230.0291916600.049130810.129888941
N001PSimtotal Brasil 2019N001P0.661123790.6550460800.667201500.004690393
N001PSim1total Capital 2019N001P0.711212410.7027486090.719676210.006071808
N002PSimtotal Brasil 2019N002P0.057847150.0552596630.060434650.022821748
N002PSim1total Capital 2019N002P0.044454650.0409345860.047974710.040400364

Exportando tabela de indicadores calculados - Módulo N 2019

In [26]:
diretorio_saida <- "<coloque aqui o diretório>"
write.table(matrizIndicadores,file=paste0(diretorio_saida,"Indicadores_2019N_R.csv"),sep = ";",dec = ",",row.names = FALSE)