# pacotes
pacman::p_load(
flexdashboard,
tidyverse,
dygraphs,
xts,
rio,
lubridate,
here,
stringr,
Matrix,
thematic,
foreign,
fs,
sf,
epikit,
shiny,
plotly,
geobr,
DT,
viridis)
# importar dados
dengue_2012 <- import("dengue-2012.dbf",
encoding = "UTF-8")
dengue_2013 <- import("dengue-2013.dbf",
encoding = "UTF-8")
dengue_2014 <- import("dengue-2014.dbf",
encoding = "UTF-8")
dengue_2015 <- import("dengue-2015.dbf",
encoding = "UTF-8")
dengue_2016 <- import("dengue-2016.dbf",
encoding = "UTF-8")
dengue_2017 <- import("dengue-2017.dbf",
encoding = "UTF-8")
dengue_2018 <- import("dengue-2018.dbf",
encoding = "UTF-8")
dengue_2019 <- import("dengue-2019.dbf",
encoding = "UTF-8")
dengue_2020 <- import("dengue-2020.dbf",
encoding = "UTF-8")
dengue_2021 <- import("dengue-2021.dbf",
encoding = "UTF-8")
dengue_2022 <- import("dengue-2022.dbf",
encoding = "UTF-8")
populacao <- import("populacao.xlsx")
# unindo os bancos --------------------------------------------------------
# com o comando rbind unimos as bases de todos os anos.
dengue <- rbind(dengue_2012,dengue_2013,dengue_2014,dengue_2015,dengue_2016,dengue_2017,dengue_2018,dengue_2019,dengue_2020, dengue_2021, dengue_2022)
# organizando as variáveis do banco
# classificação final
dengue_2022 <- dengue_2022 %>%
mutate(classificacao = recode(CLASSI_FIN,
"5" = "Descartado",
"10" = "Dengue",
"11" = "Dengue com sinais de alarme",
"12" = "Dengue grave",
"13" = "Chikungunya",
"8" = "Inconclusivo"))
dengue_2022 <- dengue_2022 %>%
mutate(classificacao = replace_na(classificacao, "Suspeito"))
#evolução
dengue_2022 <- dengue_2022 %>%
mutate(evolucao = recode(EVOLUCAO,
"1" = "Cura",
"2" = "óbito por dengue",
"3" = "óbito por outras causas",
"4" = "óbito em investigação",
"9" = "ignorado"))
# Faixa etária
dengue_2022$idade <- as.numeric((dengue_2022$DT_SIN_PRI - dengue_2022$DT_NASC) /365)
dengue_2022 <- dengue_2022 %>%
mutate(faixa_etaria = age_categories(idade,
lower=0,
upper=60,
by=10))
# semana epiemiológica ----------------------------------------------------
dengue_2022 <- dengue_2022 %>%
mutate(epi_semana = floor_date(DT_SIN_PRI, unit= "week"),
ano = floor_date(DT_SIN_PRI, unit = "year"),
DT_SIN_PRI = as.Date(DT_SIN_PRI)
) %>%
filter(DT_SIN_PRI >= "2022-01-01")
# join do banco de população em cada município de residência
dengue_2022 <- left_join(dengue_2022, populacao, by = c("ID_MN_RESI" = "cod_municipio_ibge"))
#rename
dengue_2022 <- dengue_2022 %>%
rename(municipio_residencia = nom_municipio,
populacao_residente = qtd_populacao_estimada)
# obitos
obitos2022 <- dengue_2022 %>%
mutate(evolucao = recode(EVOLUCAO,
# for reference: OLD = NEW
"1" = "Cura",
"2" = "óbito por dengue",
"3" = "óbito por outras causas",
"4" = "óbito em investigação",
"9" = "ignorado"))
Panorama por município
Row 1
Chart Notificações
# primeiro value box de notificações
# documentação em: https://www.rdocumentation.org/packages/shinydashboard/versions/0.7.2/topics/valueBox
renderValueBox({
if (input$municipio != "Todos")
{ # se selecionar cada municipio rodar o codigo abaixo
notificacoes <- dengue_2022 %>%
filter(municipio_residencia == input$municipio) %>%
count()
}
else
{ # se selecionar o estado todo rodar abaixo (opacao 'todos')
notificacoes <- dengue_2022 %>%
count()
}
valueBox(
value = notificacoes,
caption = "Notificações",
color = "white")
})
Chart Casos
renderValueBox({
if (input$municipio != "Todos"){
casos_confirmados <- dengue_2022 %>%
filter(CLASSI_FIN =="10" | CLASSI_FIN =="11" | CLASSI_FIN =="12" & SG_UF =="42") %>%
filter(municipio_residencia == input$municipio) %>%
count()
} else {
casos_confirmados <- dengue_2022 %>%
filter(CLASSI_FIN =="10" | CLASSI_FIN =="11" | CLASSI_FIN =="12" & SG_UF =="42") %>%
count()
}
valueBox(
value = casos_confirmados,
caption = "Casos",
color = "white"
)
})
#color= "light-blue", "teal"
Chart Óbitos
renderValueBox({
if (input$municipio != "Todos"){
obitos <- dengue_2022%>%
filter(evolucao== "óbito por dengue") %>%
filter(municipio_residencia == input$municipio) %>%
count()
} else {
obitos <- dengue_2022 %>%
filter(evolucao== "óbito por dengue") %>%
count()
}
valueBox(
value = obitos,
caption = "Obitos",
color = "white"
)
})
Row 2
Gráfico 1. Frequência dos casos de dengue segundo a data de início
de sintomas, Santa Catarina, 2022.
# Sempre abrir com o renderplotly para tornar o gráfico dinâmico e interativo com os botoes.
renderPlotly({
if (input$municipio != "Todos")
{
epicurva_dia <- dengue_2022 %>%
filter(CLASSI_FIN =="10" | CLASSI_FIN =="11" | CLASSI_FIN =="12" & SG_UF =="42") %>% #selecao dos casos e uf
filter(municipio_residencia == input$municipio) %>% #selecao do input
group_by(DT_SIN_PRI) %>% # contar agrupando por semana
summarise(casos = n()) %>% # contar
ggplot(aes(x= DT_SIN_PRI,
y= casos,
group=1,
text = paste0("Data do início dos sintomas: ", DT_SIN_PRI, '\n', #aparece quando passa o mouse na coluna
"Casos confirmados: ", casos, "\n"))) +
geom_line(color="red") +
labs(x= "Data de início de sintomas",
y= "Frequência (n)") +
scale_x_date(date_breaks = "3 week",
date_minor_breaks = "1 week",
date_labels = "%d/%B")+
theme_minimal() +
theme(text = element_text(family = "Times New Roman"),
axis.text.x = element_text(face = "bold"),
legend.position = "bottom",
legend.text = element_text(size = 10))
} else {
epicurva_dia <- dengue_2022 %>%
filter(CLASSI_FIN =="10" | CLASSI_FIN =="11" | CLASSI_FIN =="12" & SG_UF =="42") %>% #selecao dos casos e uf
group_by(DT_SIN_PRI) %>% # contar agrupando por semana
summarise(casos = n()) %>% # contar
ggplot(aes(x=DT_SIN_PRI,
y=casos,
group=1,
text = paste0("Data do início dos sintomas: ", DT_SIN_PRI, '\n', #aparece quando passa o mouse na coluna
"Casos confirmados: ", casos, "\n"))) +
geom_line(color="red") +
labs(x= "Data de início de sintomas",
y= "Frequência (n)") +
scale_x_date(date_breaks = "3 week",
date_minor_breaks = "1 week",
date_labels = "%d/%B")+
theme_minimal() +
theme(text = element_text(family = "Times New Roman"),
axis.text.x = element_text(face = "bold"),
legend.position = "bottom",
legend.text = element_text(size = 10))
}
ggplotly(epicurva_dia, tooltip = "text") %>%
layout(hoverlabel = list(bgcolor = "white")
)
})
Row 3
Gráfico 2. Frequência das notificações de dengue conforme a
classificação final por semana epidemiológica, Santa Catarina,
2022.
renderPlotly({
if (input$municipio != "Todos")
{
epicurva <- dengue_2022 %>%
filter(classificacao != "Chikungunya" & SG_UF =="42") %>%
filter(municipio_residencia == input$municipio) %>% #selecao do input
mutate(semana_sint = epiweek(DT_SIN_PRI)) %>% # variavel semaan epi
group_by(semana_sint,classificacao) %>%
summarise(casos = n()) %>%
ggplot(aes(x= semana_sint,
y= casos,
fill = classificacao,
text = paste0("Semana Epidemiológica: " ,semana_sint, '\n',
"Número de casos confirmados: ", casos, "\n",
"Classificação final: ", classificacao, "\n")
)
)+
geom_bar(stat= "identity") +
scale_fill_manual(values = c("#ffffb2", "#fecc5c", "#fd8d3c", "#f03b20", "#bd0026", "#30638E"),
breaks = c("Dengue", "Dengue com sinais de alarme", "Dengue grave", "Inconclusivo", "Descartado")) +
scale_x_continuous(n.breaks=10) +
labs( x= "Semana Epidemiológica",
y= "Frequência (n)",
fill = "") +
theme_minimal() +
theme(text = element_text(family = "Times New Roman"),
axis.text.x = element_text(face = "bold"),
legend.position = "bottom",
legend.text = element_text(size = 10))
} else {
epicurva <- dengue_2022 %>%
filter(classificacao != "Chikungunya" & SG_UF =="42") %>%
mutate(semana_sint = epiweek(DT_SIN_PRI)) %>%
group_by(semana_sint,classificacao) %>%
summarise(casos = n()) %>%
ggplot(aes(x= semana_sint,
y= casos,
fill = classificacao,
text = paste0("Semana Epidemiológica: ", semana_sint, '\n',
"Número de casos confirmados: ", casos, "\n",
"Classificação final: ", classificacao, "\n")
)
)+
geom_bar(stat= "identity") +
scale_fill_manual(values = c("#ffffb2", "#fecc5c", "#fd8d3c", "#f03b20", "#bd0026", "#30638E"),
breaks = c("Dengue", "Dengue com sinais de alarme", "Dengue grave", "Inconclusivo", "Descartado")) +
scale_x_continuous(n.breaks=10) +
labs( x= "Semana Epidemiológica",
y= "Frequência (n)",
fill = "") +
theme_minimal() +
theme(text = element_text(family = "Times New Roman"),
axis.text.x = element_text(face = "bold"),
legend.position = "bottom",
legend.text = element_text(size = 10))
}
ggplotly(epicurva, tooltip = "text") %>%
layout(hoverlabel = list(bgcolor = "white"),
legend = list(orientation = 'h')
)
})
Row 4
Gráfico 3. Frequência dos casos de dengue conforme a faixa etária
por semana epidemiológica, Santa Catarina, 2022.
renderPlotly({
if (input$municipio != "Todos")
{
idade_semana <- dengue_2022 %>%
filter(CLASSI_FIN =="10" | CLASSI_FIN =="11" | CLASSI_FIN =="12" & SG_UF =="42") %>%
filter(DT_SIN_PRI >= "2022-01-01") %>%
filter(municipio_residencia == input$municipio) %>%
mutate(semana_epi = floor_date(DT_SIN_PRI, unit= "week")) %>%
group_by(semana_epi,faixa_etaria) %>%
summarise(casos = n()) %>%
ggplot(aes(x= semana_epi,
y = casos,
fill = faixa_etaria,
text = paste0("Semana Epidemiológica: ", semana_epi, '\n',
"Número de casos confirmados: ", casos, "\n",
"Faixa etária:", faixa_etaria, "\n")))+
geom_bar(stat= "identity", color= "white") +
facet_wrap(~faixa_etaria, ncol = 2)+
labs(x = "Semana epidemiológica",
y = "Frequência (n)") +
scale_x_date(date_breaks = "month", date_labels = "%U", minor_breaks = "2 week")+
theme_bw()+
theme(axis.text.x = element_text( hjust = 1, color = "black", face= "bold", size=7),
strip.text = element_text(face = "bold", size = 8),
strip.background = element_rect(fill = "white"),
panel.grid.major = element_blank(),
text = element_text(family = "Times New Roman"))
} else {
idade_semana <- dengue_2022 %>%
filter(CLASSI_FIN =="10" | CLASSI_FIN =="11" | CLASSI_FIN =="12" & SG_UF =="42") %>%
filter(DT_SIN_PRI >= "2022-01-01") %>%
mutate(semana_epi = floor_date(DT_SIN_PRI, unit= "week")) %>%
group_by(semana_epi,faixa_etaria) %>%
summarise(casos = n()) %>%
ggplot(aes(x= semana_epi,
y = casos,
fill = faixa_etaria,
text = paste0("Semana Epidemiológica: ", semana_epi, '\n',
"Número de casos confirmados: ", casos, "\n",
"Faixa etária:", faixa_etaria, "\n")))+
geom_bar(stat= "identity", color= "white") +
facet_wrap(~faixa_etaria, ncol = 2)+
labs(x = "Semana epidemiológica",
y = "Frequência (n)") +
scale_x_date(date_breaks = "month", date_labels = "%U", minor_breaks = "2 week")+
theme_bw()+
theme(axis.text.x = element_text( hjust = 1, color = "black", face= "bold", size=7),
strip.text = element_text(face = "bold", size = 8),
strip.background = element_rect(fill = "white"),
panel.grid.major = element_blank(),
text = element_text(family = "Times New Roman"))
}
ggplotly(idade_semana, tooltip = "text") %>%
layout(hoverlabel = list(bgcolor = "white") ,
legend = list(orientation = 'h')) %>% #cor do label interativo
style(marker.color = "#30638E") # cor da barra (azul)
})
Análise Espacial
Row
Mapa 1. Análise Espacial dos casos de dengue, segundo município de
residência, Santa Catarina, 2022.
# mapas
library(rgdal)
library(leaflet)
library(geobr)
library(sf)
library(colorspace)
# Geobr -------------------------------------------------------------------
renderLeaflet({
sc <- read_municipality(code_muni = 'SC', year=2018)
# contingencia ------------------------------------------------------------
casos_dengue <- dengue_2022 %>%
filter(CLASSI_FIN =="10" | CLASSI_FIN =="11" | CLASSI_FIN =="12" & SG_UF =="42")%>%
group_by(municipio_residencia,ID_MN_RESI) %>%
summarise(casos = n())
# join 1 -------------------------------------------------------------------
casos_dengue <- left_join(populacao, casos_dengue, by = c("cod_municipio_ibge" = "ID_MN_RESI"))
#rename
casos_dengue$codigo <- casos_dengue$cod_municipio_ibge
# NA para valor zero
casos_dengue <- casos_dengue %>%
mutate(casos = replace_na(casos, 0))
#shapefile
sc$codigo <- substr(sc$code_muni,1,6) #retira o ultimo algarismo
#save(sc, file="./shapeFile.RData")
#load("shapeFile.RData")
#join2
casos_dengue <- merge(sc, casos_dengue, by.x="codigo")
# bins e colors -------------------------------------------------------
#cria funcoes para estratificar os casos
bins <- c(0,10,20,50,100,500,1000,3000,5000, Inf)
pal <- colorBin("YlOrRd", domain = casos_dengue$casos, bins=bins)
#customizando infos # criando label
label <- sprintf(
"<strong>%s</strong></br>%g Casos</br>",
casos_dengue$nom_municipio, casos_dengue$casos
) %>% lapply(htmltools::HTML)
map = leaflet(casos_dengue) %>%
addTiles()
map %>% addPolygons(
fillColor = ~pal(casos),
weight = 2,
opacity = 1, #opacidade da linha
color= "white", #cor da linha
dashArray = "1",
fillOpacity = 0.7, # cor do fundo
highlight = highlightOptions( #destacar o mapa quando passa o mouse por cima
weight = 5,
color = "#666",
dashArray = "",
fillOpacity = 0.7,
bringToFront = TRUE),
label = label,
labelOptions = labelOptions(
style = list("font-weight"= "normal", padding ="3px 8px"),
textsize = "15px",
direction = "auto"
)) %>%
addLegend(pal=pal, #legenda
values = ~casos,
opacity = 0.7,
title = "Casos de dengue",
position = "bottomright")
})
Série Temporal
Row
Gráfico 4. Série Temporal dos casos confirmados de dengue entre os
anos de 2012 e 2022, Santa Catarina.
dengue_temporal <- dengue %>%
filter(CLASSI_FIN =="10" | CLASSI_FIN =="11" | CLASSI_FIN =="12" & SG_UF =="42") %>%
filter(DT_SIN_PRI >= "2012-01-01") %>%
group_by(DT_SIN_PRI) %>%
summarise(casos = n())
all <- xts(x = dengue_temporal$casos, order.by = dengue_temporal$DT_SIN_PRI)
dygraph(all) %>%
dyOptions(drawGrid = FALSE, colors = "#30638E") %>%
dyRangeSelector() %>%
dyCrosshair(direction = "vertical") %>%
dyHighlight(highlightCircleSize = 5, highlightSeriesBackgroundAlpha = 0.2, hideOnMouseOut = FALSE) %>%
dyRoller(rollPeriod = 1) %>%
dySeries(label = "Casos") %>%
dyLegend(show = "follow")
Diagrama de controle
Row
Gráfico 5. Diagrama de controle da dengue em 2022, com a série dos
últimos 10 anos, Santa Catarina.
# unindo a variável populacao
dengue_cont <- dengue %>%
dplyr::select(DT_SIN_PRI, ID_MN_RESI)
# Contagem - por semana epidemiológica data_sintomas, numero de casos
dengue_cont <- dengue_cont %>%
filter(DT_SIN_PRI >= "2012-01-01") %>%
mutate(semana_epi = floor_date(DT_SIN_PRI, "week")) %>%
group_by(semana_epi) %>%
summarise(casos = n()) %>%
mutate(incidencia = (casos/7338473)*100000)
# Criando o objeto {`nao_epidemic`} com anos não epidêmicos
nao_epidemic <- c(2012, 2013, 2014, 2015,2016, 2017, 2018, 2019, 2020, 2021)
# Criando o objeto {`dengue_2022`} com ano de 2022
dengue_22 <- dengue_cont |>
filter(year(semana_epi) == 2022) |> # Filtrando o ano para 2022
mutate(sem_epi = epiweek(semana_epi)) # Criando uma nova coluna chamada 'sem_epi', referente à semana epidemiológica
# Criando o gráfico com o diagrama de controle
dengue_stat <- dengue_cont |>
filter(year(semana_epi) %in% nao_epidemic) |> # Filtrando os dados da série em que o ano não é epidêmico
mutate(sem_epi = epiweek(semana_epi)) |> # Criando uma nova coluna chamada 'sem_epi', referente à semana epidemiológica
group_by(sem_epi) |> # Agrupando os dados pela semana epidemiológica
summarise(
n = n(),
media = mean(incidencia, na.rm = TRUE),
desvio = sd(incidencia, na.rm = TRUE) ,
sup = media + 2 * desvio,
inf = media - 2 * desvio)
# gráfico -----------------------------------------------------------------
# Definindo a base a ser utilizada
plot_diagrama <- ggplot(data = dengue_stat) +
aes(x = sem_epi, y = media) + # Definindo argumentos estéticos com as variáveis usadas em x e em y
# Adicionando a linha referente à incidência média de dengue.
# Adicionando uma geometria de linha na cor azul e largura de 1.2 pixel
geom_line(aes(color = 'cor_media_casos'), size = 1.2) +
# Adicionando uma geometria de linha na cor laranja. Além disso, inserindo
# um argumento estético para o eixo y que, no caso, é a variável de limite
# superior
geom_line(aes(y = sup, color = 'cor_limite'), size = 1.2) +
# Adicionando uma geometria de colunas utilizando a base de dados
# {`dengue_2022`} e y como a incidência de dengue em 2022. O argumento
# `fill` refere-se à cor das barras e `alpha` à transparência.
geom_col(data = dengue_22,
aes(y = incidencia, fill = 'cor_incidencia'), alpha = 0.4) +
# Arrumando o eixo x, definindo o intervalo de tempo que será utilizado (`breaks`)
# uma sequência de semanas epidemiológicas de 1 a 53
# o argumento `expand` ajuda nesse processo.
scale_x_continuous(breaks = 1:53, expand = c(0, 0)) +
# Definindo os títulos dos eixos x e y
labs(x = 'Semana Epidemiológica',
y = 'Incidência por 100 mil hab.') +
# Definindo o tema do gráfico
theme_bw() +
theme(text = element_text(family = "Times New Roman"),
axis.text.x = element_text(face = "bold", size= 10),
legend.position = "bottom",
legend.text = element_text(size = 8))+
# Criando a legenda das linhas
scale_color_manual(
name = "",
values = c('cor_media_casos' = 'darkblue', 'cor_limite' = 'red'),
labels = c("Incidência média", "Limite superior")
) +
# Criando a legenda das barras
scale_fill_manual(
name = "",
values = c('cor_incidencia' = 'yellow'),
labels = "Incidência de dengue em 2022"
)
ggplotly(plot_diagrama) %>%
layout( legend = list(orientation = 'h'))
Tabela
Row
Tabela 1. Principais indicadores por município de residência, Santa
Catarina, 2022.
tabela <- dengue_2022 %>%
group_by(municipio_residencia, populacao_residente)%>%
summarise(casos = n(),
obitos = sum(EVOLUCAO == "2", na.rm = T),
internados = sum(HOSPITALIZ == "1",na.rm =T),
casos_mulheres = sum (CS_SEXO == "F", na.rm = T),
casos_homens = sum(CS_SEXO == "M", na.rm = T))%>%
mutate(taxa_incidencia = round(casos/populacao_residente*100000 , 2)) %>%
select(municipio_residencia, casos, casos_mulheres, casos_homens, taxa_incidencia, obitos, internados)
renderDT({DT::datatable(tabela,
rownames= FALSE,
colnames = c ( "Município de residência" ,
"Número de casos" ,
"Casos mulheres",
"Casos homens",
"Taxa de incidência",
"óbitos",
"Internações"))
})