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

Bibliotecas Utilizadas

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

Carregando microdados da PNS

In [49]:
#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 2013>")

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

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

In [50]:
#Selecionando registros válidos para o módulo P e calculando peso amostral - summary de verificação
pns2013.1<- <Coloque aqui o nome do arquivo RDATA> %>% filter(M001==1)
pns2013.1<-pns2013.1 %>% mutate(peso_morador_selec=((V00291*(60202/145572211))))
pns2013.1<-pns2013.1 %>% filter(!is.na(peso_morador_selec))
summary(pns2013.1$peso_morador_selec)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
 0.004156  0.243959  0.521557  1.000000  1.147413 31.179597 

Criação de variáveis dos indicadores

In [51]:
#Desfechos - Indicadores

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

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

Definições de abrangências

Situação urbana ou rural

In [52]:
#Situação Urbano ou Rural
pns2013.1 <- pns2013.1 %>% rename(Sit_Urbano_Rural=V0026)
pns2013.1$Sit_Urbano_Rural<-factor(pns2013.1$Sit_Urbano_Rural, levels=c(1,2), labels=c("urbano", "rural"))
summary(pns2013.1$Sit_Urbano_Rural)
urbano
49245
rural
10957

Sexo

In [53]:
#Sexo
pns2013.1 <- pns2013.1 %>% rename(Sexo=C006)
pns2013.1$Sexo<-factor(pns2013.1$Sexo, levels=c(1,2), labels=c("Masculino", "Feminino"))
summary(pns2013.1$Sexo)
Masculino
25920
Feminino
34282

UF

In [54]:
#Estados - UFs
pns2013.1 <- pns2013.1 %>% rename(Unidades_da_Federacao=V0001)
pns2013.1$Unidades_da_Federacao<-factor(pns2013.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(pns2013.1$Unidades_da_Federacao)
Rondônia
1694
Acre
1814
Amazonas
2586
Roraima
1591
Pará
2004
Amapá
1332
Tocantins
1515
Maranhão
1774
Piauí
1804
Ceará
2560
Rio Grande do Norte
1691
Paraíba
1943
Pernambuco
2591
Alagoas
1748
Sergipe
1553
Bahia
2641
Minas Gerais
3779
Espírito Santo
1724
Rio de Janeiro
3486
São Paulo
5305
Paraná
3012
Santa Catarina
1623
Rio Grande do Sul
2913
Mato Grosso do Sul
1809
Mato Grosso
1476
Goiás
2423
Distrito Federal
1811

Grandes Regiões

In [55]:
#Grandes Regiões

pns2013.1 <- pns2013.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(pns2013.1$GrandesRegioes)
Norte
12536
Nordeste
18305
Sudeste
14294
Sul
7548
Centro-Oeste
7519

Capital

In [56]:
#Capital
pns2013.1<- pns2013.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(pns2013.1$Capital)
Porto Velho
1694
Rio Branco
1814
Manaus
2586
Boa Vista
1591
Belém
2004
Macapá
1332
Palmas
1515
São Luís
1774
Teresina
1804
Fortaleza
2560
Natal
1691
João Pessoa
1943
Recife
2591
Maceió
1748
Aracaju
1553
Salvador
2641
Belo Horizonte
3779
Vitória
1724
Rio de Janeiro
3486
São Paulo
5305
Curitiba
3012
Florianópolis
1623
Porto Alegre
2913
Campo Grande
1809
Cuiabá
1476
Goiânia
2423
Brasília
1811

Faixa Etária

In [57]:
#Faixas Etárias
pns2013.1 <-  pns2013.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(pns2013.1$faixa_idade)
18 a 29 anos
14321
30 a 44 anos
20242
45 a 59 anos
14462
60 a 74 anos
8290
75 anos ou mais
2887

Raça

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

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

summary(pns2013.1$Raca)
Branca
24106
Preta
5631
Parda
29512
NA's
953

Renda per capita

In [59]:
#Rendimento domiciliar per capita
pns2013.1 <-  pns2013.1 %>% drop_na(VDF003) %>% mutate(rend_per_capita=cut(VDF003,
  breaks = c(-Inf,339, 678, 1356, 2034,Inf),
  labels=c("Até 1/2 SM","1/2 até 1 SM","1 até 2 SM","2 até 3 SM","Mais de 3 SM"), 
  ordered_result = TRUE, right = TRUE, na.exclude= TRUE))

summary(pns2013.1$rend_per_capita)
Até 1/2 SM
14256
1/2 até 1 SM
17504
1 até 2 SM
15493
2 até 3 SM
5335
Mais de 3 SM
7603

Escolaridade

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

pns2013.1$gescol<-factor(pns2013.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(pns2013.1$gescol)
Sem instrução e fundamental incompleto
24080
Fundamental completo e médio incompleto
9212
Médio completo e superior incompleto
19145
Superior completo
7754

Criando indicadores

Filtrando base de indicadores

In [61]:
#Selecionando variáveis para cálculo de indicadores no survey
pns2013Nsurvey<- pns2013.1 %>% select("V0024","UPA_PNS","peso_morador_selec", "N001P","N002P",
                                   "C008","V0031","C009", "Sit_Urbano_Rural","Sexo","Unidades_da_Federacao", "GrandesRegioes",
                                     "Capital","faixa_idade", "Raca","rend_per_capita","gescol")
summary(pns2013Nsurvey)
     V0024            UPA_PNS        peso_morador_selec  N001P      
 Min.   :1110011   Min.   :1100001   Min.   : 0.004156   Sim:39133  
 1st Qu.:2210013   1st Qu.:2200075   1st Qu.: 0.243935   Não:21058  
 Median :2951023   Median :2900192   Median : 0.521557              
 Mean   :3035304   Mean   :3007768   Mean   : 1.000020              
 3rd Qu.:4110111   3rd Qu.:4100002   3rd Qu.: 1.147380              
 Max.   :5310220   Max.   :5300180   Max.   :31.179597              
                                                                    
 N002P            C008            V0031            C009      Sit_Urbano_Rural
 Sim: 3864   Min.   : 18.00   Min.   :1.000   Min.   :1.00   urbano:49234    
 Não:56327   1st Qu.: 30.00   1st Qu.:1.000   1st Qu.:1.00   rural :10957    
             Median : 41.00   Median :2.000   Median :3.00                   
             Mean   : 43.32   Mean   :2.308   Mean   :2.61                   
             3rd Qu.: 55.00   3rd Qu.:4.000   3rd Qu.:4.00                   
             Max.   :101.00   Max.   :4.000   Max.   :9.00                   
                                                                             
        Sexo             Unidades_da_Federacao      GrandesRegioes 
 Masculino:25915   São Paulo        : 5304     Norte       :12535  
 Feminino :34276   Minas Gerais     : 3779     Nordeste    :18302  
                   Rio de Janeiro   : 3485     Sudeste     :14291  
                   Paraná           : 3009     Sul         : 7545  
                   Rio Grande do Sul: 2913     Centro-Oeste: 7518  
                   Bahia            : 2640                         
                   (Other)          :39061                         
           Capital               faixa_idade        Raca      
 São Paulo     : 5304   18 a 29 anos   :14315   Branca:24101  
 Belo Horizonte: 3779   30 a 44 anos   :20239   Preta : 5631  
 Rio de Janeiro: 3485   45 a 59 anos   :14461   Parda :29506  
 Curitiba      : 3009   60 a 74 anos   : 8289   NA's  :  953  
 Porto Alegre  : 2913   75 anos ou mais: 2887                 
 Salvador      : 2640                                         
 (Other)       :39061                                         
     rend_per_capita                                      gescol     
 Até 1/2 SM  :14256   Sem instrução e fundamental incompleto :24080  
 1/2 até 1 SM:17504   Fundamental completo e médio incompleto: 9212  
 1 até 2 SM  :15493   Médio completo e superior incompleto   :19145  
 2 até 3 SM  : 5335   Superior completo                      : 7754  
 Mais de 3 SM: 7603                                                  
                                                                     
                                                                     

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

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

Cria plano amostral complexo

In [63]:
#survey design
desPNSN=svydesign(id=~UPA_PNS, strat=~V0024, weight=~peso_morador_selec, nest=TRUE, data=pns2013Nsurvey)
desPNSN18=subset(desPNSN, C008>=18)
desPNSNC=svydesign(id=~UPA_PNS, strat=~V0024, weight=~peso_morador_selec, nest=TRUE, data=pns2013Nsurvey)
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 [64]:
matrizIndicadores = data.frame()

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

In [65]:
#Cálculo dos indicadores usando o pacote survey - alterar
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 <- "2013"

Preenchendo a tabela de indicadores

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

In [66]:
#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"))
               }
               
               dataframe_indicador<-data.frame(dataframe_indicador)
              
               
               colnames(dataframe_indicador) <- c("abr_nome","Sim","Nao","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 [67]:
matriz_totais <- data.frame()

Preenchendo a tabela com a abrangencia Brasil e total das capitais

In [68]:
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 [69]:
matrizIndicadores<-rbind(matrizIndicadores,matriz_totais)

Visualizando tabela de indicadores

In [70]:
matrizIndicadores
A data.frame: 164 × 8
abr_tipoabr_nomeAnoIndicadorSimLowerSUpperScvS
<chr><fct><chr><chr><dbl><dbl><dbl><dbl>
Masculinosexo Masculino 2013N001P0.70316990.69383180.71250790.006775591
Femininosexo Feminino 2013N001P0.62523090.61580620.63465550.007690901
Brancaraça Branca 2013N001P0.70337680.69372590.71302770.007000550
Pretaraça Preta 2013N001P0.61874190.59633040.64115330.018480452
Pardaraça Parda 2013N001P0.62424510.61373910.63475110.008586841
Até 1/2 SMrend_per_capitaAté 1/2 SM 2013N001P0.57766410.56186070.59346750.013958136
1/2 até 1 SMrend_per_capita1/2 até 1 SM 2013N001P0.59664930.58295150.61034710.011713388
1 até 2 SMrend_per_capita1 até 2 SM 2013N001P0.68260100.66979930.69540270.009568687
2 até 3 SMrend_per_capita2 até 3 SM 2013N001P0.77093830.75219140.78968520.012406845
Mais de 3 SMrend_per_capitaMais de 3 SM 2013N001P0.82883500.81469850.84297160.008702155
18 a 29 anosfx_idade_18 18 a 29 anos 2013N001P0.81669310.80549950.82788670.006993008
30 a 44 anosfx_idade_18 30 a 44 anos 2013N001P0.73537750.72406420.74669070.007849279
45 a 59 anosfx_idade_18 45 a 59 anos 2013N001P0.56859500.55361940.58357060.013437991
60 a 74 anosfx_idade_18 60 a 74 anos 2013N001P0.46117660.44263990.47971320.020507618
75 anos ou maisfx_idade_18 75 anos ou mais 2013N001P0.39273460.36237690.42309240.039438667
urbanourb_rur urbano 2013N001P0.67953500.67186520.68720480.005758668
ruralurb_rur rural 2013N001P0.55232070.53455850.57008280.016408042
Rondôniauf Rondônia 2013N001P0.61922400.58209070.65635740.030596239
Acreuf Acre 2013N001P0.62867100.59782340.65951870.025035181
Amazonasuf Amazonas 2013N001P0.66218020.63898070.68537980.017875397
Roraimauf Roraima 2013N001P0.64569460.61626290.67512620.023256213
Paráuf Pará 2013N001P0.55410220.51956240.58864210.031804044
Amapáuf Amapá 2013N001P0.64401620.60307880.68495370.032432167
Tocantinsuf Tocantins 2013N001P0.60132690.55944190.64321200.035538575
Maranhãouf Maranhão 2013N001P0.50479350.46677280.54281430.038428973
Piauíuf Piauí 2013N001P0.52492080.48979490.56004670.034141736
Cearáuf Ceará 2013N001P0.60674530.58105530.63243530.021602782
Rio Grande do Norteuf Rio Grande do Norte2013N001P0.62550390.59452310.65648470.025270528
Paraíbauf Paraíba 2013N001P0.59244370.56231320.62257430.025948475
Pernambucouf Pernambuco 2013N001P0.58063470.55751020.60375910.020319832
Rio Branco 1capitalRio Branco 2013N002P0.066092180.0464513460.085733010.151621838
Manaus1capitalManaus 2013N002P0.043067120.0283954840.057738760.173813951
Boa Vista1capitalBoa Vista 2013N002P0.056617600.0407542750.072480920.142953445
Belém1capitalBelém 2013N002P0.042986390.0262458380.059726930.198696692
Macapá1capitalMacapá 2013N002P0.039530320.0199586380.059102000.252609519
Palmas1capitalPalmas 2013N002P0.030869900.0156460620.046093740.251617486
São Luís1capitalSão Luís 2013N002P0.061698710.0429218380.080475570.155274098
Teresina1capitalTeresina 2013N002P0.049522440.0332458180.065799060.167692687
Fortaleza1capitalFortaleza 2013N002P0.046034160.0316606230.060407710.159307215
Natal1capitalNatal 2013N002P0.045507250.0303136530.060700840.170345976
João Pessoa1capitalJoão Pessoa 2013N002P0.059561990.0406953400.078428640.161613441
Recife1capitalRecife 2013N002P0.063612400.0452316520.081993150.147425742
Maceió1capitalMaceió 2013N002P0.110583800.0858316450.135335960.114201936
Aracaju1capitalAracaju 2013N002P0.056706120.0328380510.080574180.214752999
Salvador1capitalSalvador 2013N002P0.070831850.0506772100.090986490.145177178
Belo Horizonte1capitalBelo Horizonte2013N002P0.029879610.0198752100.039884000.170831475
Vitória1capitalVitória 2013N002P0.029475150.0165578670.042392440.223597572
Rio de Janeiro3capitalRio de Janeiro2013N002P0.033002220.0216905840.044313860.174877632
São Paulo2capitalSão Paulo 2013N002P0.043932850.0343540490.053511660.111243288
Curitiba1capitalCuritiba 2013N002P0.037236000.0231043950.051367610.193633454
Florianópolis1capitalFlorianópolis 2013N002P0.052193050.0313335310.073052560.203912331
Porto Alegre1capitalPorto Alegre 2013N002P0.039131610.0259130260.052350190.172349132
Campo Grande1capitalCampo Grande 2013N002P0.040023590.0246531740.055394000.195939263
Cuiabá1capitalCuiabá 2013N002P0.016382970.0066113790.026154570.304315900
Goiânia1capitalGoiânia 2013N002P0.041155920.0237118210.058600010.216255968
Brasília1capitalBrasília 2013N002P0.045870400.0357466410.055994170.112605947
N001PSimtotal Brasil 2013N001P0.661944100.6548411130.669047090.005474844
N001PSim1total Capital 2013N001P0.718217980.7094250840.727010880.006246370
N002PSimtotal Brasil 2013N002P0.057925600.0548630780.060988110.026974908
N002PSim1total Capital 2013N002P0.045412730.0417155210.049109940.041538254

Exportando tabela de indicadores calculados - Módulo N 2013

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