O objetivo deste tutorial é extrair os dados amostrais da PNS e mostrar as possibilidades de análise dessa pesquisa.
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.
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")
)
# 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
# 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
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)
# 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