pacman::p_load(
tidyverse, # data management
stringr, # work with strings/characters
lubridate, # work with dates
rio, # import / export
here, # relative file paths
fs) # directory interactions
library(dplyr)
Os bancos de dados (BD) epidemiológicos de SRAG, da rede de vigilância da Influenza e outros vírus respiratórios, desde o início da sua implantação (2009) até os dias atuais (2022), com a incorporação da vigilância da covid-19. Atualmente, o sistema oficial para o registro dos casos e óbitos por SRAG é o Sistema de Informação da Vigilância Epidemiológica da Gripe (SIVEP-Gripe). Os dados são atualizados uma vez por semana e estão sujeitos a alterações decorrentes da investigação, encerramento das fichas ou mesmo correções de erros de digitação, pelas equipes de vigilância epidemiológica que desenvolvem o serviço nas três esferas de gestão.
https://opendatasus.saude.gov.br/dataset
Nesse relatório foi utilizado apenas o BD referente as SRAGs notificadas no ano de 2022.
caminho <- here::here("dados", "INFLUD22-21-02-2022.csv")
sivep <- readr::read_csv2(caminho)
Para verificar as variáveis presentes no BD utilizando a função `names` seguido do nome do DB.
names (sivep)
## [1] "DT_NOTIFIC" "SEM_NOT" "DT_SIN_PRI" "SEM_PRI" "SG_UF_NOT"
## [6] "ID_REGIONA" "CO_REGIONA" "ID_MUNICIP" "CO_MUN_NOT" "ID_UNIDADE"
## [11] "CO_UNI_NOT" "CS_SEXO" "DT_NASC" "NU_IDADE_N" "TP_IDADE"
## [16] "COD_IDADE" "CS_GESTANT" "CS_RACA" "CS_ESCOL_N" "ID_PAIS"
## [21] "CO_PAIS" "SG_UF" "ID_RG_RESI" "CO_RG_RESI" "ID_MN_RESI"
## [26] "CO_MUN_RES" "CS_ZONA" "SURTO_SG" "NOSOCOMIAL" "AVE_SUINO"
## [31] "FEBRE" "TOSSE" "GARGANTA" "DISPNEIA" "DESC_RESP"
## [36] "SATURACAO" "DIARREIA" "VOMITO" "OUTRO_SIN" "OUTRO_DES"
## [41] "PUERPERA" "FATOR_RISC" "CARDIOPATI" "HEMATOLOGI" "SIND_DOWN"
## [46] "HEPATICA" "ASMA" "DIABETES" "NEUROLOGIC" "PNEUMOPATI"
## [51] "IMUNODEPRE" "RENAL" "OBESIDADE" "OBES_IMC" "OUT_MORBI"
## [56] "MORB_DESC" "VACINA" "DT_UT_DOSE" "MAE_VAC" "DT_VAC_MAE"
## [61] "M_AMAMENTA" "DT_DOSEUNI" "DT_1_DOSE" "DT_2_DOSE" "ANTIVIRAL"
## [66] "TP_ANTIVIR" "OUT_ANTIV" "DT_ANTIVIR" "HOSPITAL" "DT_INTERNA"
## [71] "SG_UF_INTE" "ID_RG_INTE" "CO_RG_INTE" "ID_MN_INTE" "CO_MU_INTE"
## [76] "UTI" "DT_ENTUTI" "DT_SAIDUTI" "SUPORT_VEN" "RAIOX_RES"
## [81] "RAIOX_OUT" "DT_RAIOX" "AMOSTRA" "DT_COLETA" "TP_AMOSTRA"
## [86] "OUT_AMOST" "PCR_RESUL" "DT_PCR" "POS_PCRFLU" "TP_FLU_PCR"
## [91] "PCR_FLUASU" "FLUASU_OUT" "PCR_FLUBLI" "FLUBLI_OUT" "POS_PCROUT"
## [96] "PCR_VSR" "PCR_PARA1" "PCR_PARA2" "PCR_PARA3" "PCR_PARA4"
## [101] "PCR_ADENO" "PCR_METAP" "PCR_BOCA" "PCR_RINO" "PCR_OUTRO"
## [106] "DS_PCR_OUT" "CLASSI_FIN" "CLASSI_OUT" "CRITERIO" "EVOLUCAO"
## [111] "DT_EVOLUCA" "DT_ENCERRA" "DT_DIGITA" "HISTO_VGM" "PAIS_VGM"
## [116] "CO_PS_VGM" "LO_PS_VGM" "DT_VGM" "DT_RT_VGM" "PCR_SARS2"
## [121] "PAC_COCBO" "PAC_DSCBO" "OUT_ANIM" "DOR_ABD" "FADIGA"
## [126] "PERD_OLFT" "PERD_PALA" "TOMO_RES" "TOMO_OUT" "DT_TOMO"
## [131] "TP_TES_AN" "DT_RES_AN" "RES_AN" "POS_AN_FLU" "TP_FLU_AN"
## [136] "POS_AN_OUT" "AN_SARS2" "AN_VSR" "AN_PARA1" "AN_PARA2"
## [141] "AN_PARA3" "AN_ADENO" "AN_OUTRO" "DS_AN_OUT" "TP_AM_SOR"
## [146] "SOR_OUT" "DT_CO_SOR" "TP_SOR" "OUT_SOR" "DT_RES"
## [151] "RES_IGG" "RES_IGM" "RES_IGA" "ESTRANG" "VACINA_COV"
## [156] "DOSE_1_COV" "DOSE_2_COV" "LAB_PR_COV" "LOTE_1_COV" "LOTE_2_COV"
## [161] "FNT_IN_COV"
Primeiro é necesário criar uma variável nova chamada de `munres`a partir da variável original `CO_MUN_RES` e simultaneamente reduzir o numero de algarismos para que a variável fique identica ao código do IBGE (6 digitos). Depois criamos uma segunda variável nomeada como `ufres` apenas com os dois primeiros algarismos de forma que seja possível filtrar para a UF de interesse
sivep$munres <- substr(sivep$CO_MUN_RES,1,6)
sivep$ufres <- substr(sivep$munres,1,2)
O comando abaixo filtra apenas para as notificações em Santa Catarina (código 42).
sivep <- sivep[sivep[, "ufres"]== 42,]
sivep$count <- 1
As datas precisam ser transformadas para o formato de data porque no BD original elas estão salvas como variável de texto.
sivep$dt_sint <- as.Date(sivep$DT_SIN_PRI,format="%d/%m/%Y")
sivep$dt_nasc <- as.Date(sivep$DT_NASC,format="%d/%m/%Y")
sivep$dt_obito <- as.Date(sivep$DT_EVOLUCA,format="%d/%m/%Y")
sivep$dt_interna <- as.Date(sivep$DT_INTERNA,format="%d/%m/%Y")
sivep$dt_notifica <- as.Date(sivep$DT_NOTIFIC,format="%d/%m/%Y")
sivep$dt_vacina1<- as.Date(sivep$DOSE_1_COV,format="%d/%m/%Y")
sivep$dt_vacina2<- as.Date(sivep$DOSE_2_COV,format="%d/%m/%Y")
Criando uma variável nova chamada *idade*.
Transformar a variável NU_IDADE_N` uma variável numérica
com o `as.numeric`.
sivep$NU_IDADE_N <- as.numeric(sivep$NU_IDADE_N)
sivep$idade <- ifelse(sivep$TP_IDADE == 3, sivep$NU_IDADE_N, 0)
O passo seguinte é transformar a *idade* em categorias. Vamos criar duas categorizações:
1. A cada 10 anos:
sivep$fxetar=8
sivep[which(sivep$idade >=0 & sivep$idade<=9),]$fxetar=1
sivep[which(sivep$idade>=10 & sivep$idade<=19),]$fxetar=2
sivep[which(sivep$idade>=20 & sivep$idade<=29),]$fxetar=3
sivep[which(sivep$idade>=30 & sivep$idade<=39),]$fxetar=4
sivep[which(sivep$idade>=40 & sivep$idade<=49),]$fxetar=5
sivep[which(sivep$idade>=50 & sivep$idade<=59),]$fxetar=6
sivep[which(sivep$idade>=60 & sivep$idade<=69),]$fxetar=7
sivep[which(sivep$idade>=70 & sivep$idade<130),]$fxetar=8
sivep$fxetar=factor(sivep$fxetar,levels=c(1:8),labels=c("0-9","10-19","20-29","30-39","40-49","50-59","60-69","70+"))
2. Conforme a estratificação de priorização vacinal:
sivep$idade_cat=10
sivep[which(sivep$idade >=0 & sivep$idade<=4),]$idade_cat=1
sivep[which(sivep$idade>=5 & sivep$idade<=11),]$idade_cat=2
sivep[which(sivep$idade>=12 & sivep$idade<=17),]$idade_cat=3
sivep[which(sivep$idade>=18 & sivep$idade<=29),]$idade_cat=4
sivep[which(sivep$idade>=30 & sivep$idade<=39),]$idade_cat=5
sivep[which(sivep$idade>=40 & sivep$idade<=49),]$idade_cat=6
sivep[which(sivep$idade>=50 & sivep$idade<=59),]$idade_cat=7
sivep[which(sivep$idade>=60 & sivep$idade<=69),]$idade_cat=8
sivep[which(sivep$idade>=70 & sivep$idade<=79),]$idade_cat=9
sivep[which(sivep$idade>=80 & sivep$idade<110),]$idade_cat=10
sivep$idade_cat=factor(sivep$idade_cat,levels=c(1:10),labels=c("0-4","5-11","12-17","18-29","30-39","40-49","50-59","60-69","70-79", "80+"))
sivep <- sivep |>
mutate(classi_final = recode(CLASSI_FIN,
# for reference: OLD = NEW
"1" = "SRAG por influenza",
"2" = "SRAG por outro vírus respiratório",
"3" = "SRAG por outro agente etiológico",
"4" = "SRAG não especificado",
"5" = "SRAG por covid-19"))
2. Raça
sivep$CS_RACA[sivep$CS_RACA == "1"] <- "Branca"
sivep$CS_RACA[sivep$CS_RACA == "2"] <- "Preta"
sivep$CS_RACA[sivep$CS_RACA == "3"] <- "Amarela"
sivep$CS_RACA[sivep$CS_RACA == "4"] <- "Parda"
sivep$CS_RACA[sivep$CS_RACA == "5"] <- "Indigena"
sivep$CS_RACA[sivep$CS_RACA == "9"] <- "Ignorado"
3. Escolaridade
sivep$escola[sivep$CS_ESCOL_N == "0"] <- "Sem escolaridade/Analfabeto"
sivep$escola[sivep$CS_ESCOL_N == "1"] <- "Fundamental 1o ciclo (1 a 5 série)"
sivep$escola[sivep$CS_ESCOL_N == "2"] <- "Fundamental 2o ciclo (6 a 9 série)"
sivep$escola[sivep$CS_ESCOL_N == "3"] <- "Médio (1 ao 3 ano)"
sivep$escola[sivep$CS_ESCOL_N == "4"] <- "Superior"
sivep$escola[sivep$CS_ESCOL_N == "5"] <- "Não se aplica"
sivep$escola[sivep$CS_ESCOL_N == "9"] <- "Ignorado"
4. UTI
sivep$uti [sivep$UTI == "1"] <- "SIM"
sivep$uti [sivep$UTI == "2"] <- "NÃO"
sivep$uti [sivep$UTI == "9"] <- "IGNORADO"
sivep$evolucao [sivep$EVOLUCAO == "1"] <- "CURA"
sivep$evolucao [sivep$EVOLUCAO == "2"] <- "ÓBITO"
sivep$evolucao [sivep$EVOLUCAO == "3"] <- "ÓBITO POR OUTRAS CAUSAS"
sivep$evolucao [sivep$EVOLUCAO == "9"] <- "IGNORADO"
6. vacina
sivep <- sivep %>%
mutate(vacina = replace_na(VACINA_COV, "2"))
sivep <- sivep %>%
mutate(vacina = recode(VACINA_COV,
# for reference: OLD = NEW
"1" = "Sim",
"2" = "Não"))
classe_final_srag <- sivep |>
dplyr::count(idade_cat) |>
janitor::adorn_totals()
classe_final_srag |>
dplyr::rename("Faixa etária"= idade_cat, "Frequência" = n) |>
DT::datatable(classe_final_srag)
Uma tabulação cruzada ajustada para que tanto as contagens quanto as porcentagens sejam exibidas.
library(janitor)
sivep %>% # case linelist
tabyl(idade_cat, CS_SEXO) %>% # cross-tabulate counts
adorn_totals(where = "row") %>% # add a total row
adorn_percentages(denominator = "col") %>% # convert to proportions
adorn_pct_formatting() %>% # convert to percents
adorn_ns(position = "front") %>% # display as: "count (percent)"
adorn_title( # adjust titles
row_name = "Faixa etária",
col_name = "Sexo")
## Sexo
## Faixa etária F M NA_
## 0-4 215 (7.0%) 310 (10.1%) 0 (0.0%)
## 5-11 53 (1.7%) 73 (2.4%) 0 (0.0%)
## 12-17 53 (1.7%) 44 (1.4%) 0 (0.0%)
## 18-29 320 (10.4%) 131 (4.3%) 0 (0.0%)
## 30-39 243 (7.9%) 155 (5.0%) 0 (0.0%)
## 40-49 236 (7.7%) 219 (7.1%) 0 (0.0%)
## 50-59 317 (10.3%) 405 (13.2%) 0 (0.0%)
## 60-69 445 (14.4%) 554 (18.0%) 0 (0.0%)
## 70-79 528 (17.1%) 637 (20.7%) 0 (0.0%)
## 80+ 670 (21.8%) 550 (17.9%) 30 (100.0%)
## Total 3080 (100.0%) 3078 (100.0%) 30 (100.0%)
library(ggplot2)
ggplot(sivep, aes(x = dt_interna, y = count)) +
geom_col(fill = "darkred", width = 1) +
theme_minimal()+
labs(
x = "Data de internação",
y = "Casos de SRAG- 2022",
title = "Hospitalizações por SRAG"
)
Gráfico por classificação final
ggplot(data = sivep, mapping = aes(x = dt_interna, fill = classi_final)) +
geom_histogram(binwidth = 2)+
labs(title = "Classificação final")
Para criar um banco somente com os casos de covid-19 os casos com classificação final para COVID-19 usar a variável `CLASSI_FIN`
covid <- sivep |>
filter(classi_final== "SRAG por covid-19" & dt_interna > "2022-01-01")
covid %>% # case linelist
tabyl(idade_cat, CS_SEXO) %>% # cross-tabulate counts
adorn_totals(where = "row") %>% # add a total row
adorn_percentages(denominator = "col") %>% # convert to proportions
adorn_pct_formatting() %>% # convert to percents
adorn_ns(position = "front") %>% # display as: "count (percent)"
adorn_title( # adjust titles
row_name = "Faixa etária",
col_name = "Sexo")
## Sexo
## Faixa etária F M
## 0-4 63 (3.6%) 81 (4.4%)
## 5-11 17 (1.0%) 23 (1.3%)
## 12-17 21 (1.2%) 14 (0.8%)
## 18-29 195 (11.0%) 65 (3.6%)
## 30-39 145 (8.2%) 95 (5.2%)
## 40-49 131 (7.4%) 150 (8.2%)
## 50-59 189 (10.7%) 259 (14.2%)
## 60-69 275 (15.5%) 346 (19.0%)
## 70-79 321 (18.1%) 416 (22.8%)
## 80+ 417 (23.5%) 372 (20.4%)
## Total 1774 (100.0%) 1821 (100.0%)
ggplot(data = covid)+
geom_histogram(aes(x = dt_interna))