O objetivo deste tutorial é extrair os dados amostrais da PNS e mostrar as possibilidades de análise dessa pesquisa.

PNS

A Pesquisa Nacional de Saúde (PNS) é um importante levantamento realizado pelo Instituto Brasileiro de Geografia e Estatística (IBGE) em parceria com o Ministério da Saúde no Brasil. O objetivo da PNS é coletar informações detalhadas sobre a saúde da população brasileira, incluindo dados relacionados a condições de saúde, estilo de vida, acesso aos serviços de saúde, uso de medicamentos, entre outros aspectos relevantes.

A PNS é um estudo abrangente que fornece informações valiosas para a formulação de políticas de saúde, planejamento de serviços de saúde, pesquisa acadêmica e tomada de decisões relacionadas à saúde pública. Além disso, a pesquisa permite o acompanhamento das tendências em saúde ao longo do tempo e a identificação de desafios de saúde específicos que podem necessitar de intervenções.

Alguns dos principais tópicos cobertos pela PNS incluem:

  • Condições de Saúde: A pesquisa coleta informações sobre a prevalência de doenças crônicas, deficiências, condições de saúde mental, entre outras.

  • Estilo de Vida: A PNS abrange informações sobre hábitos relacionados à saúde, como consumo de tabaco, consumo de álcool, dieta, atividade física, entre outros.

  • Acesso aos Serviços de Saúde: Ela investiga o acesso a serviços de saúde, cobertura de seguro de saúde, uso de serviços de saúde e barreiras ao acesso.

  • Uso de Medicamentos: A pesquisa coleta dados sobre o uso de medicamentos, incluindo prescrição e automedicação.

  • Fatores Socioeconômicos: A PNS considera fatores socioeconômicos, como renda, educação e ocupação, que podem estar relacionados à saúde.

Base de dados

Download online dos dados

# carrega as bibliotecas
library(PNSIBGE)
library(survey)
## Carregando pacotes exigidos: grid
## Carregando pacotes exigidos: Matrix
## Carregando pacotes exigidos: survival
## 
## Attaching package: 'survey'
## The following object is masked from 'package:graphics':
## 
##     dotchart
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# definição de variáveis
variaveis_selecionadas <- c("V0024","A02201",
                            "A02305","A02306","A02307","A02308",
                            "A02401","A02402")

# importando os dados do questionário básico
dadosPNS <- get_pns(year=2019, vars = variaveis_selecionadas)

# Utilizar opção para ajuste de UPAs com único setor
options(survey.lonely.psu = "adjust")

# Opção de vizualização
options(scipen = 999)

# modifica e cria variáveis
dadosPNS$variables <- dadosPNS$variables %>% 
  mutate(one = 1,
         estratos_geogr = case_when((V0024=="3110213"|V0024=="3110113" |V0024=="3110112" |V0024=="3110212" |V0024=="3110111" |V0024=="3110211") ~"01-Belo Horizonte",
                                                    (V0024=="3120011"|V0024=="3120013" |V0024=="3120020" |V0024=="3120012") ~"02-Entorno metropolitono de BH",
                                                    (V0024=="3130011"|V0024== "3130012"|V0024== "3130020") ~"03-Colar metropolitano de BH",
                                                    (V0024=="3140010"|V0024== "3140020") ~"04-RIDE de Brasília em Minas",
                                                    (V0024=="3151011"|V0024== "3151012" |V0024=="3151013" |V0024=="3151021"|V0024=="3151022" |V0024=="3151023") ~"05-Sul de Minas",
                                                    (V0024=="3152011"|V0024== "3152012" |V0024=="3152013" |V0024=="3152021"|V0024=="3152022") ~"06-Triângulo Mineiro",
                                                    (V0024=="3153011"|V0024== "3153012" |V0024=="3153013" |V0024=="3153021"|V0024=="3153022" |V0024=="3153023") ~"07-Mata de Minas Gerais",
                                                    (V0024=="3154011"|V0024== "3154012" |V0024=="3154013" |V0024=="3154021"|V0024=="3154022" |V0024=="3154023") ~"08-Norte de Minas",
                                                    (V0024=="3155011"|V0024== "3155012" |V0024=="3155013" |V0024=="3155021"|V0024== "3155022"|V0024== "3155023") ~"09-Vale do Rio Doce",
                                                    (V0024=="3156011"|V0024== "3156012" |V0024=="3156013" |V0024=="3156021"|V0024== "3156022") ~"10-Central"),
         animal = 1*(A02201=="Sim")
)

Animais de estimação

1. Em seu domicílio, há algum animal de estimação?

# Total de domicílios com algum animal de estimação - Minas Gerais - 2019
tab.1a <- data.frame(Estimativa  = round(coef(svytotal(~ animal, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE)),0),
                    Erro_padrao = round(SE(svytotal(~ animal, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE)),0),
                    CV = round(cv(svytotal(~ animal, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE))*100,1),
                    Limite_inferior = round(confint(svytotal(~ animal, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE))[1],0),
                    Limite_superior = round(confint(svytotal(~ animal, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE))[2],0))
tab.1a
##        Estimativa animal animal.1 Limite_inferior Limite_superior
## animal   13221485 241110      1.8        12748917        13694052
# Propoção de domicílios com algum animal de estimação - Minas Gerais - 2019
tab.1b <- data.frame(Estimativa  = round(coef(svymean(~ animal, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE))*100,1),
                    Erro_padrao = round(SE(svymean(~ animal, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE))*100,1),
                    CV = round(cv(svymean(~ animal, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE))*100,1),
                    Limite_inferior = round(confint(svymean(~ animal, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE))[1]*100,1),
                    Limite_superior = round(confint(svymean(~ animal, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE))[2]*100,1))
tab.1b
##        Estimativa animal animal.1 Limite_inferior Limite_superior
## animal       62.5    1.1      1.8            60.2            64.7
# Total de domicílios com algum animal de estimação - estratos geográficos de Minas Gerais - 2019
tab.1c <- data.frame(Estimativa  = round(coef(svyby(~ animal,by = ~estratos_geogr, subset(dadosPNS,V0001=="Minas Gerais"), svytotal, na.rm = TRUE)),0),
                    Erro_padrao = round(SE(svyby(~ animal,by = ~estratos_geogr, subset(dadosPNS,V0001=="Minas Gerais"), svytotal,na.rm = TRUE)),0),
                    CV = round(cv(svyby(~ animal,by = ~estratos_geogr, subset(dadosPNS,V0001=="Minas Gerais"), svytotal,na.rm = TRUE))*100,1),
                    Limite_inferior = round(confint(svyby(~ animal,by = ~estratos_geogr, subset(dadosPNS,V0001=="Minas Gerais"), svytotal,na.rm = TRUE))[,1],0),
                    Limite_superior = round(confint(svyby(~ animal,by = ~estratos_geogr, subset(dadosPNS,V0001=="Minas Gerais"), svytotal,na.rm = TRUE))[,2],0))
tab.1c
##                                Estimativa Erro_padrao   CV Limite_inferior
## 01-Belo Horizonte                 1384844       46599  3.4         1293512
## 02-Entorno metropolitono de BH    1895353       66374  3.5         1765261
## 03-Colar metropolitano de BH       323021       37930 11.7          248679
## 04-RIDE de Brasília em Minas        74821        5156  6.9           64715
## 05-Sul de Minas                   1891850      184400  9.7         1530432
## 06-Triângulo Mineiro              1652391      159574  9.7         1339631
## 07-Mata de Minas Gerais           1354627      111465  8.2         1136159
## 08-Norte de Minas                 1595795      119616  7.5         1361351
## 09-Vale do Rio Doce               1320655      123174  9.3         1079239
## 10-Central                        1728128      107026  6.2         1518360
##                                Limite_superior
## 01-Belo Horizonte                      1476176
## 02-Entorno metropolitono de BH         2025444
## 03-Colar metropolitano de BH            397364
## 04-RIDE de Brasília em Minas             84927
## 05-Sul de Minas                        2253268
## 06-Triângulo Mineiro                   1965151
## 07-Mata de Minas Gerais                1573094
## 08-Norte de Minas                      1830239
## 09-Vale do Rio Doce                    1562072
## 10-Central                             1937896
# Proporção de domicílios com algum animal de estimação - estratos geográficos de Minas Gerais - 2019
tab.1d <- data.frame(Estimativa  = round(coef(svyby(~ animal,by = ~estratos_geogr, subset(dadosPNS,V0001=="Minas Gerais"), svymean, na.rm = TRUE))*100,1),
                    Erro_padrao = round(SE(svyby(~ animal,by = ~estratos_geogr, subset(dadosPNS,V0001=="Minas Gerais"), svymean,na.rm = TRUE))*100,1),
                    CV = round(cv(svyby(~ animal,by = ~estratos_geogr, subset(dadosPNS,V0001=="Minas Gerais"), svymean,na.rm = TRUE))*100,1),
                    Limite_inferior = round(confint(svyby(~ animal,by = ~estratos_geogr, subset(dadosPNS,V0001=="Minas Gerais"), svymean,na.rm = TRUE))[,1]*100,1),
                    Limite_superior = round(confint(svyby(~ animal,by = ~estratos_geogr, subset(dadosPNS,V0001=="Minas Gerais"), svymean,na.rm = TRUE))[,2]*100,1))
tab.1d
##                                Estimativa Erro_padrao  CV Limite_inferior
## 01-Belo Horizonte                    55.1         1.9 3.4            51.5
## 02-Entorno metropolitono de BH       66.6         2.3 3.5            62.1
## 03-Colar metropolitano de BH         69.0         5.4 7.8            58.4
## 04-RIDE de Brasília em Minas         68.5         4.7 6.9            59.2
## 05-Sul de Minas                      68.3         3.7 5.4            61.1
## 06-Triângulo Mineiro                 60.7         3.9 6.4            53.0
## 07-Mata de Minas Gerais              54.2         2.7 4.9            49.0
## 08-Norte de Minas                    62.6         3.0 4.8            56.7
## 09-Vale do Rio Doce                  62.5         4.5 7.2            53.7
## 10-Central                           67.1         3.6 5.4            60.0
##                                Limite_superior
## 01-Belo Horizonte                         58.8
## 02-Entorno metropolitono de BH            71.2
## 03-Colar metropolitano de BH              79.5
## 04-RIDE de Brasília em Minas              77.7
## 05-Sul de Minas                           75.5
## 06-Triângulo Mineiro                      68.3
## 07-Mata de Minas Gerais                   59.5
## 08-Norte de Minas                         68.5
## 09-Vale do Rio Doce                       71.3
## 10-Central                                74.2

2. Quantos destes animais são gatos, cachorros, aves e peixes?

# Total de animais de estimação (gatos) - Minas Gerais - 2019
tab.2a <- data.frame(Estimativa  = round(coef(svytotal(~ A02305+A02306+A02307+A02308, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE)),0),
                    Erro_padrao = round(SE(svytotal(~ A02305+A02306+A02307+A02308, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE)),0),
                    CV = round(cv(svytotal(~ A02305+A02306+A02307+A02308, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE))*100,1),
                    Limite_inferior = round(confint(svytotal(~ A02305+A02306+A02307+A02308, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE))[,1],0),
                    Limite_superior = round(confint(svytotal(~ A02305+A02306+A02307+A02308, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE))[,2],0))
tab.2a
##        Estimativa Erro_padrao   CV Limite_inferior Limite_superior
## A02305    6655626      409387  6.2         5853242         7458011
## A02306   20173401      595151  3.0        19006926        21339876
## A02307   11370945     1207239 10.6         9004799        13737090
## A02308    2116463      456365 21.6         1222004         3010922

3. Gráfico para dados amostrais

A função svyhist permite a criação de histogramas para variáveis numéricas que consideram os pesos amostrais para computar as frequências ou densidades das barras. A sintaxe básica é semelhante as de estimação apresentadas anteriormente. Além disto, possui os mesmos parâmetros que a função hist: breaks, xlab, main, […]. Para estimativas das frequências absolutas, deve-se utilizar freq=TRUE. Abaixo, um exemplo do histograma do número de horas normalmente trabalhadas para cada um dos casos:

svyhist(formula=~as.numeric(A02305), design=subset(dadosPNS,V0001=="Minas Gerais"), main="Histograma", xlab="Número de gatos")

svyhist(formula=~as.numeric(A02306), design=subset(dadosPNS,V0001=="Minas Gerais"), main="Histograma", xlab="Número de cachorros")

svyhist(formula=~as.numeric(A02307), design=subset(dadosPNS,V0001=="Minas Gerais"), main="Histograma", xlab="Número de aves")

svyhist(formula=~as.numeric(A02308), design=subset(dadosPNS,V0001=="Minas Gerais"), main="Histograma", xlab="Número de peixes")

Para a construção de boxplots que considerem os pesos amostrais, a função é svyboxplot.

A sintaxe dela difere um pouco das demais. É necessário declarar a variável numérica, sucedida por um ~ e a variável de agrupamento do boxplot. Caso não deseje usar grupos, basta colocar o número 1. Além disto, há a opção de plotar apenas os outliers mais extremos ou todos, através do argumento all.outliers=TRUE.

svyboxplot(formula=~as.numeric(A02305)~1, design=subset(dadosPNS,V0001=="Minas Gerais"), main="Boxplot do Número de gatos",all.outliers=TRUE)

svyboxplot(formula=~as.numeric(A02306)~1, design=subset(dadosPNS,V0001=="Minas Gerais"), main="Boxplot do Número de cachorros",all.outliers=TRUE)

svyboxplot(formula=~as.numeric(A02307)~1, design=subset(dadosPNS,V0001=="Minas Gerais"), main="Boxplot do Número de aves",all.outliers=TRUE)

svyboxplot(formula=~as.numeric(A02308)~1, design=subset(dadosPNS,V0001=="Minas Gerais"), main="Boxplot do Número de peixes",all.outliers=TRUE)

4. Nos últimos 12 meses, quantos gatos e cachorros foram vacinados contra raiva?

# Total de animais de estimação (gatos) - Minas Gerais - 2019
tab.4a <- data.frame(Estimativa  = round(coef(svytotal(~ A02401+A02402, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE)),0),
                    Erro_padrao = round(SE(svytotal(~ A02401+A02402, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE)),0),
                    CV = round(cv(svytotal(~ A02401+A02402, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE))*100,1),
                    Limite_inferior = round(confint(svytotal(~ A02401+A02402, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE))[,1],0),
                    Limite_superior = round(confint(svytotal(~ A02401+A02402, subset(dadosPNS,V0001=="Minas Gerais"), na.rm = TRUE))[,2],0))
tab.4a
##        Estimativa Erro_padrao  CV Limite_inferior Limite_superior
## A02401    3021423      231566 7.7         2567562         3475283
## A02402    3972055      313605 7.9         3357401         4586709