library(ggplot2)

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "docs/README-",
  out.width = "100%"
)

AnaliseCOVID19Brasil

O objetivo do pacote AnaliseCOVID19Brasil é o de prover análises práticas e atualizadas, incluindo alguns gráficos, além de ser o meu trabalho de conclusão do curso R para Ciência de Dados 2 da Curso-R.

Aí você pode se perguntar...

Se tantos pacotes já fazem análises de dados da COVID-19, por que usar este aqui ~~e não algum outro~~?

Meu primeiro enfoque foi o de fazer um pacote que permita, de maneira muito simples, atualizar os dados da pandemia no Brasil antes de proceder às análises. Em outras palavras, toda a triste dinâmica da pandemia no Brasil vai se revelando conforme este pacote é utilizado ao longo do tempo.


Instalação

Você pode instalar o AnaliseCOVID19Brasil do GitHub com:

# install.packages("devtools")
devtools::install_github("brunocp76/AnaliseCOVID19Brasil")

Utilização - Atualização de Dados

Como disse, os primeiros propósitos deste pacotes são ser simples do usuário utilizar e poder atualizar os dados antes de proceder à qualquer análise. Então começamos assim:

library(AnaliseCOVID19Brasil)

atualiza_dados()

Talvez você repare que os totais consolidados da data mais recente disponível (no caso, r covid %>% dplyr::summarise(data_mais_recente = max(date)) %>% as.data.frame()) não batem exatamente com os números oficiais ou o dos telejornais. Se esta discrepância existe entre o governo e a imprensa por motivos políticos que eu não discutirei aqui, eu entendo que aqui basta que os números estejam bem próximos aos números veiculados pela grande imprensa.

covid %>%
   dplyr::summarise(
      ultima_data = max(date, na.rm = TRUE),
      total_contagios = scales::comma(
         sum(contagios_novos, na.rm = TRUE), big.mark = ".", decimal.mark = ","
      ),
      total_obitos = scales::comma(
         sum(obitos_novos, na.rm = TRUE), big.mark = ".", decimal.mark = ","
      ),
      taxa_mortalidade = scales::percent(
         sum(obitos_novos, na.rm = TRUE) / sum(contagios_novos, na.rm = TRUE),
         big.mark = ".", decimal.mark = ",", accuracy = 0.01
      )
   ) %>% as.data.frame()

Mais uma vez, o meu enfoque aqui é ter estes dados sendo facilmente atualizados e viabilizando as análises que apresentarei mais para frente.

Para isso, a função atualiza_dados() é uma das funções principais, pois aciona uma série de funções menores, cada uma fazendo uma parte do processo de obter pela internet os dados mais atualizados possíveis de fontes diferentes e de combinar todos eles em uma única base.

Desta forma, depois de executada esta função você terá a base covid construída com dados disponíveis tanto no portal Brasil.io quanto no Ministério da Saúde


Utilização - Agregações de Dados

bases_derivadas()

A função bases_derivadas() é outra das funções principais, pois parte da base covid e gera funções com os dados para análise (os dados originais e mais alguns dados derivados) em 5 níveis distintos de agregação (de município a Brasil inteiro), para viabilizar a análise nestes níveis.

Então após executar esta função você terá as bases derivadas com os dados sumarizados em 5 níveis crescentes de agregação:

Segue a relação de bases disponíveis:


Análises Gráficas

Com os dados atualizados e organizados, podemos fazer as primeiras observações:

Contágios

Novos Contágios por Estado/Região

covid_estados %>%
   dplyr::mutate(
      estado = forcats::fct_reorder(.f = uf, .x = contagios_novos, .desc = TRUE),
      regiao_brasil = forcats::fct_reorder(.f = regiao, .x = contagios_novos, .desc = TRUE)
   ) %>%
   ggplot2::ggplot() +
   ggplot2::geom_boxplot(ggplot2::aes(x = estado, y = contagios_novos, fill = estado), color = "white", show.legend = FALSE) +
   ggplot2::labs(
      x = "Estados",
      y = "Novos Contágios",
      title = "Novos Contágios",
      subtitle = "Regiões e Estados ordenados pela mediana de casos"
   ) +
   tema_bruno() +
   ggplot2::facet_wrap(ggplot2::vars(regiao_brasil), scales = "free")

Olhando de perto os 5 estados com o maior número de contágios

covid_estados %>%
   dplyr::group_by(uf, date) %>%
   dplyr::summarise(contagios_acumulados = sum(contagios_acumulados)) %>%
   dplyr::mutate(num_contagios = max(contagios_acumulados)) %>%
   dplyr::ungroup() %>%
   dplyr::mutate(
      limite = num_contagios %>%
         unique() %>%
         sort(decreasing = TRUE) %>%
         dplyr::nth(5)
   ) %>%
   dplyr::filter(num_contagios >= limite) %>%
   dplyr::mutate(contagios_acumulados_por_mil = contagios_acumulados / 1000) %>%
   ggplot2::ggplot(ggplot2::aes(y = contagios_acumulados_por_mil, x = date, color = uf)) +
   ggplot2::labs(
      x = "Data",
      y = "Contágios Acumulados (x 1.000)",
      title = "Contágios Acumulados",
      subtitle = "Nos estados com os 5 maiores volumes"
   ) +
   ggplot2::geom_line(show.legend = FALSE) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m/%Y") +
   ggplot2::geom_label(ggplot2::aes(label = uf), show.legend = FALSE) +
   tema_bruno() +
   gganimate::transition_reveal(date)

Volumes Diários de Contágios Brasil

covid_brasil %>%
   ggplot2::ggplot() +
   ggplot2::geom_col(ggplot2::aes(x = date, y = contagios_novos, fill = contagios_novos), color = "cyan", show.legend = FALSE) +
   ggplot2::geom_line(ggplot2::aes(x = date, y = contagios_novos_mm7), color = "yellow", size = 1.5) +
   ggplot2::theme(
      plot.subtitle = ggplot2::element_text(hjust = 1, face = "bold.italic", size = 12, color = "yellow")
   ) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m/%Y") +
   tema_bruno() +
   ggplot2::labs(
      x = "Data",
      y = "Novos Contágios",
      title = "Volumes Diários de Novos Contágios",
      subtitle = "Com a Média Móvel de 7 dias"
   )

Volumes Diários de Contágios por Região/Estado (com ajuste de Média Móvel de 7 dias)

Sudeste
covid_estados %>%
   dplyr::filter(regiao == "Sudeste") %>% 
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = contagios_acumulados, .desc = TRUE)
   ) %>%
   ggplot2::ggplot() +
   ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "contagios_novos"), fill = "#34A4A4", show.legend = FALSE) +
   ggplot2::geom_line(ggplot2::aes(x = date, y = contagios_novos_mm7), color = "yellow", size = 1L) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Novos Contágios",
      title = "Volumes Diários de Novos Contágios",
      subtitle = "Estados Ordenados por volume de Contágios Acumulados"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
Nordeste
covid_estados %>%
   dplyr::filter(regiao == "Nordeste") %>% 
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = contagios_acumulados, .desc = TRUE)
   ) %>%
   ggplot2::ggplot() +
   ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "contagios_novos"), fill = "#34A4A4", show.legend = FALSE) +
   ggplot2::geom_line(ggplot2::aes(x = date, y = contagios_novos_mm7), color = "yellow", size = 1L) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Novos Contágios",
      title = "Volumes Diários de Novos Contágios",
      subtitle = "Estados Ordenados por volume de Contágios Acumulados"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
Sul
covid_estados %>%
   dplyr::filter(regiao == "Sul") %>% 
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = contagios_acumulados, .desc = TRUE)
   ) %>%
   ggplot2::ggplot() +
   ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "contagios_novos"), fill = "#34A4A4", show.legend = FALSE) +
   ggplot2::geom_line(ggplot2::aes(x = date, y = contagios_novos_mm7), color = "yellow", size = 1L) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Novos Contágios",
      title = "Volumes Diários de Novos Contágios",
      subtitle = "Estados Ordenados por volume de Contágios Acumulados"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
Centro-Oeste
covid_estados %>%
   dplyr::filter(regiao == "Centro-Oeste") %>% 
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = contagios_acumulados, .desc = TRUE)
   ) %>%
   ggplot2::ggplot() +
   ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "contagios_novos"), fill = "#34A4A4", show.legend = FALSE) +
   ggplot2::geom_line(ggplot2::aes(x = date, y = contagios_novos_mm7), color = "yellow", size = 1L) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Novos Contágios",
      title = "Volumes Diários de Novos Contágios",
      subtitle = "Estados Ordenados por volume de Contágios Acumulados"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
Norte
covid_estados %>%
   dplyr::filter(regiao == "Norte") %>% 
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = contagios_acumulados, .desc = TRUE)
   ) %>%
   ggplot2::ggplot() +
   ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "contagios_novos"), fill = "#34A4A4", show.legend = FALSE) +
   ggplot2::geom_line(ggplot2::aes(x = date, y = contagios_novos_mm7), color = "yellow", size = 1L) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Novos Contágios",
      title = "Volumes Diários de Novos Contágios",
      subtitle = "Estados Ordenados por volume de Contágios Acumulados"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")

Óbitos

Novos Óbitos por Estado/Região

covid_estados %>%
   dplyr::mutate(
      estado = forcats::fct_reorder(.f = uf, .x = obitos_novos, .desc = TRUE),
      regiao_brasil = forcats::fct_reorder(.f = regiao, .x = obitos_novos, .desc = TRUE)
   ) %>%
   ggplot2::ggplot() +
   ggplot2::geom_boxplot(ggplot2::aes(x = estado, y = obitos_novos, fill = estado), color = "white", show.legend = FALSE) +
   ggplot2::labs(
      x = "Estados",
      y = "Novos Óbitos",
      title = "Novos Óbitos",
      subtitle = "Regiões e Estados ordenados pela mediana de casos"
   ) +
   tema_bruno() +
   ggplot2::facet_wrap(ggplot2::vars(regiao_brasil), scales = "free")

Olhando de perto os 5 estados com o maior número de óbitos

covid_estados %>%
   dplyr::group_by(uf, date) %>%
   dplyr::summarise(obitos_acumulados = sum(obitos_acumulados)) %>%
   dplyr::mutate(num_obitos = max(obitos_acumulados)) %>%
   dplyr::ungroup() %>%
   dplyr::mutate(
      limite = num_obitos %>%
         unique() %>%
         sort(decreasing = TRUE) %>%
         dplyr::nth(5)
   ) %>%
   dplyr::filter(num_obitos >= limite) %>%
   dplyr::mutate(obitos_acumulados_por_mil = obitos_acumulados / 1000) %>% 
   ggplot2::ggplot(ggplot2::aes(y = obitos_acumulados_por_mil, x = date, color = uf)) +
   ggplot2::labs(
      x = "Data",
      y = "Óbitos Acumulados (x 1.000)",
      title = "Óbitos Acumulados",
      subtitle = "Nos estados com os 5 maiores volumes"
   ) +
   ggplot2::geom_line(show.legend = FALSE) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m/%Y") +
   ggplot2::geom_label(ggplot2::aes(label = uf), show.legend = FALSE) +
   tema_bruno() +
   gganimate::transition_reveal(date)

Volumes Diários de Óbitos Brasil

covid_brasil %>%
   ggplot2::ggplot() +
   ggplot2::geom_col(ggplot2::aes(x = date, y = obitos_novos, fill = obitos_novos), color = "cyan", show.legend = FALSE) +
   ggplot2::geom_line(ggplot2::aes(x = date, y = obitos_novos_mm7), color = "red", size = 1.5) +
   ggplot2::theme(
      plot.subtitle = ggplot2::element_text(hjust = 1, face = "bold.italic", size = 12, color = "red")
   ) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m/%Y") +
   tema_bruno() +
   ggplot2::labs(
      x = "Data",
      y = "Novos Óbitos",
      title = "Volumes Diários de Novos Óbitos",
      subtitle = "Com a Média Móvel de 7 dias"
   )

Volumes Diários de Óbitos por Região/Estado (com ajuste de Média Móvel de 7 dias)

Sudeste
covid_estados %>%
   dplyr::filter(regiao == "Sudeste") %>% 
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = obitos_acumulados, .desc = TRUE)
   ) %>%
   ggplot2::ggplot() +
   ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "obitos_novos"), fill = "#34A4A4", show.legend = FALSE) +
   ggplot2::geom_line(ggplot2::aes(x = date, y = obitos_novos_mm7), color = "red", size = 1L) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Novos Óbitos",
      title = "Volumes Diários de Novos Óbitos",
      subtitle = "Estados Ordenados por volume de Óbitos Acumulados"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
Nordeste
covid_estados %>%
   dplyr::filter(regiao == "Nordeste") %>% 
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = obitos_acumulados, .desc = TRUE)
   ) %>%
   ggplot2::ggplot() +
   ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "obitos_novos"), fill = "#34A4A4", show.legend = FALSE) +
   ggplot2::geom_line(ggplot2::aes(x = date, y = obitos_novos_mm7), color = "red", size = 1L) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Novos Óbitos",
      title = "Volumes Diários de Novos Óbitos",
      subtitle = "Estados Ordenados por volume de Óbitos Acumulados"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
Sul
covid_estados %>%
   dplyr::filter(regiao == "Sul") %>% 
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = obitos_acumulados, .desc = TRUE)
   ) %>%
   ggplot2::ggplot() +
   ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "obitos_novos"), fill = "#34A4A4", show.legend = FALSE) +
   ggplot2::geom_line(ggplot2::aes(x = date, y = obitos_novos_mm7), color = "red", size = 1L) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Novos Óbitos",
      title = "Volumes Diários de Novos Óbitos",
      subtitle = "Estados Ordenados por volume de Óbitos Acumulados"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
Centro-Oeste
covid_estados %>%
   dplyr::filter(regiao == "Centro-Oeste") %>% 
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = obitos_acumulados, .desc = TRUE)
   ) %>%
   ggplot2::ggplot() +
   ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "obitos_novos"), fill = "#34A4A4", show.legend = FALSE) +
   ggplot2::geom_line(ggplot2::aes(x = date, y = obitos_novos_mm7), color = "red", size = 1L) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Novos Óbitos",
      title = "Volumes Diários de Novos Óbitos",
      subtitle = "Estados Ordenados por volume de Óbitos Acumulados"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
Norte
covid_estados %>%
   dplyr::filter(regiao == "Norte") %>% 
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = obitos_acumulados, .desc = TRUE)
   ) %>%
   ggplot2::ggplot() +
   ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "obitos_novos"), fill = "#34A4A4", show.legend = FALSE) +
   ggplot2::geom_line(ggplot2::aes(x = date, y = obitos_novos_mm7), color = "red", size = 1L) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Novos Óbitos",
      title = "Volumes Diários de Novos Óbitos",
      subtitle = "Estados Ordenados por volume de Óbitos Acumulados"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")

Algumas coisas também nos levam a outra questão por conta da possibilidade de transmissão assintomática, o tempo entre a detecção do contágio e a ocorrência do óbito.

Correlação entre Contágios e Óbitos

teste <- covid %>%
   dplyr::select(
      date,
      contagios_novos,
      obitos_novos
      )

correlacoes <- c()
lags <- c(0:50)

for (k in lags) {
   tmp <- teste %>%
      dplyr::mutate(lagk = dplyr::lag(contagios_novos, k)) %>%
      dplyr::select(obitos_novos, lagk) %>%
      na.omit()

   correlacoes <- c(correlacoes, cor(tmp$obitos_novos, tmp$lagk))
}

dplyr::tibble(lags, correlacoes) %>%
   ggplot2::ggplot(ggplot2::aes(x = lags, y = correlacoes)) +
   ggplot2::geom_vline(xintercept = 0, color = "#324C63", size = 1L) +
   ggplot2::geom_point(color = "yellow") +
   ggplot2::geom_line(color = "green") +
   ggplot2::labs(
      x = "Número de Lags",
      y = "Correlação Cruzada",
      title = "Correlação Cruzada entre Contágios e Óbitos"
   ) +
   ggplot2::scale_x_continuous(breaks = seq(0, 50, 2)) +
   ggplot2::scale_y_continuous(breaks = seq(0, 0.7, 0.1), labels = scales::percent) +
   tema_bruno() +
   ggplot2::theme(
      panel.grid.major.x = ggplot2::element_line(
         color = "#324C63",
         size = 0.5,
         linetype = "dashed"
      )
)

rm(teste, correlacoes, lags, k, tmp)

Podemos ver, até da maneira como (não) são feitas as notificações no Brasil, que as maiores correlações são múltiplos de semanas inteiras...

Taxa de Mortalidade

Uma vez que temos as quantidades de contágios e de óbitos, podemos calcular a Taxa de Mortalidade (Número de Mortos / Número de Contágios)

É sabido que em países que conseguem adotar a testagem em massa, numa média de toda a população, a taxa de mortalidade fica em torno de 1%.

rm(tabela_ufs, tabela_mun)

tabela_ufs <- geobr::read_state(
   code_state = "all",
   year = 2020,
   simplified = FALSE,
   showProgress = FALSE
)

tabela_mun <- geobr::read_municipality(
   code_muni = "all",
   year = 2020,
   simplified = FALSE,
   showProgress = FALSE
)

Mortalidade no Mapa

covid_estados %>%
   dplyr::arrange(uf, date) %>%
   dplyr::group_by(uf) %>%
   dplyr::filter(date == max(date, na.rm = TRUE)) %>%
   dplyr::mutate(taxa_mortalidade = 100 * taxa_mortalidade) %>% 
   dplyr::ungroup() %>%
   dplyr::select(-c(contagios_novos_100k:obitos_acumulados_ln)) %>%
   dplyr::arrange(uf, date) %>%
   dplyr::left_join(
      y = tabela_ufs,
      by = c("uf" = "abbrev_state")
   ) %>%
   ggplot2::ggplot() +
   ggplot2::geom_sf(ggplot2::aes(geometry = geom, fill = taxa_mortalidade), color = "darkcyan") +
   ggplot2::geom_sf_text(ggplot2::aes(geometry = geom, label = uf), size = 3.5) +
   ggplot2::scale_fill_gradient2(
      low = "blue",
      mid = "white",
      high = "red"
   ) +
   ggplot2::scale_x_continuous(breaks = seq(-75, -30, 5)) +
   ggplot2::scale_y_continuous(breaks = seq(-35, 5, 5)) +
   ggplot2::labs(
      x = "Longitude",
      y = "Latitude",
      title = "Taxa de Mortalidade da COVID-19 (%)",
      subtitle = "Óbitos / Contágios"
   ) +
   tema_bruno() +
   ggplot2::theme(
      legend.key.size = ggplot2::unit(1, "cm"),
      legend.title = ggplot2::element_blank(),
      legend.text = ggplot2::element_text(face = "bold", size = 11)
   )

Animação da Evolução Histórica das Taxas de Mortalidade no Brasil

covid_brasil %>%
   ggplot2::ggplot() +
   ggplot2::geom_line(ggplot2::aes(x = date, y = taxa_mortalidade), color = "red", size = 1L) +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m/%Y") +
   ggplot2::scale_y_continuous(labels = scales::percent) +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Taxa de Mortalidade (Óbitos / Contágios)",
      title = "Taxa de Mortalidade (Consolidada Brasil)"
   ) +
   gganimate::transition_reveal(date, keep_last = TRUE)

Evolução Histórica das Taxas de Mortalidade no Brasil

Sudeste
covid_estados %>%
   dplyr::filter(regiao == "Sudeste") %>%
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = taxa_mortalidade, .desc = TRUE),
      regiao_brasil = forcats::fct_reorder(.f = regiao, .x = taxa_mortalidade, .desc = TRUE)
   ) %>%
   ggplot2::ggplot() +
   ggplot2::geom_line(ggplot2::aes(x = date, y = taxa_mortalidade), color = "red") +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   ggplot2::scale_y_continuous(labels = scales::percent) +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Taxa de Mortalidade (Óbitos / Contágios)",
      title = "Taxas de Mortalidade na Região Sudeste",
      subtitle = "Estados Ordenados por Taxa de Mortalidade"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
Nordeste
covid_estados %>%
   dplyr::filter(regiao == "Nordeste") %>%
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = taxa_mortalidade, .desc = TRUE),
      regiao_brasil = forcats::fct_reorder(.f = regiao, .x = taxa_mortalidade, .desc = TRUE)
   ) %>% 
   ggplot2::ggplot() +
   ggplot2::geom_line(ggplot2::aes(x = date, y = taxa_mortalidade), color = "red") +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   ggplot2::scale_y_continuous(labels = scales::percent) +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Taxa de Mortalidade (Óbitos / Contágios)",
      title = "Taxas de Mortalidade na Região Nordeste",
      subtitle = "Estados Ordenados por Taxa de Mortalidade"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
Sul
covid_estados %>%
   dplyr::filter(regiao == "Sul") %>%
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = taxa_mortalidade, .desc = TRUE),
      regiao_brasil = forcats::fct_reorder(.f = regiao, .x = taxa_mortalidade, .desc = TRUE)
   ) %>% 
   ggplot2::ggplot() +
   ggplot2::geom_line(ggplot2::aes(x = date, y = taxa_mortalidade), color = "red") +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   ggplot2::scale_y_continuous(labels = scales::percent) +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Taxa de Mortalidade (Óbitos / Contágios)",
      title = "Taxas de Mortalidade na Região Sul",
      subtitle = "Estados Ordenados por Taxa de Mortalidade"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
Centro-Oeste
covid_estados %>%
   dplyr::filter(regiao == "Centro-Oeste") %>%
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = taxa_mortalidade, .desc = TRUE),
      regiao_brasil = forcats::fct_reorder(.f = regiao, .x = taxa_mortalidade, .desc = TRUE)
   ) %>% 
   ggplot2::ggplot() +
   ggplot2::geom_line(ggplot2::aes(x = date, y = taxa_mortalidade), color = "red") +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   ggplot2::scale_y_continuous(labels = scales::percent) +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Taxa de Mortalidade (Óbitos / Contágios)",
      title = "Taxas de Mortalidade na Região Centro-Oeste",
      subtitle = "Estados Ordenados por Taxa de Mortalidade"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
Norte
covid_estados %>%
   dplyr::filter(regiao == "Norte") %>%
   dplyr::mutate(
      uf = forcats::fct_reorder(.f = uf, .x = taxa_mortalidade, .desc = TRUE),
      regiao_brasil = forcats::fct_reorder(.f = regiao, .x = taxa_mortalidade, .desc = TRUE)
   ) %>% 
   ggplot2::ggplot() +
   ggplot2::geom_line(ggplot2::aes(x = date, y = taxa_mortalidade), color = "red") +
   ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") +
   ggplot2::scale_y_continuous(labels = scales::percent) +
   tema_bruno() +
   ggplot2::labs(
      x = "Mês",
      y = "Taxa de Mortalidade (Óbitos / Contágios)",
      title = "Taxas de Mortalidade na Região Norte",
      subtitle = "Estados Ordenados por Taxa de Mortalidade"
   ) +
   ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")

Contágios por 100 mil habitantes

Segue o contágio acumulado por grupo de 100 mil habitantes.

Sudeste

covid_cidades %>%
   dplyr::filter(regiao == "Sudeste") %>%
   dplyr::arrange(cod_ibge, date) %>%
   dplyr::group_by(cod_ibge) %>%
   dplyr::filter(date == max(date, na.rm = TRUE)) %>%
   dplyr::ungroup() %>%
   dplyr::arrange(uf, date) %>%
   dplyr::left_join(
      y = tabela_ufs,
      by = c("uf" = "abbrev_state")
   ) %>%
   dplyr::select(geom_uf = geom, dplyr::everything()) %>%
   dplyr::arrange(cod_ibge, date) %>%
   dplyr::left_join(
      y = tabela_mun,
      by = c("cod_ibge" = "code_muni")
   ) %>%
   dplyr::select(geom_mun = geom, dplyr::everything()) %>%
   ggplot2::ggplot() +
   ggplot2::geom_sf(ggplot2::aes(geometry = geom_mun, fill = contagios_acumulados_100k), color = "darkcyan") +
   ggplot2::geom_sf(ggplot2::aes(geometry = geom_uf), alpha = 0, color = "blue", size = 1L) +
   ggplot2::scale_fill_gradient2(
      low = "blue",
      mid = "white",
      high = "red"
   ) +
   ggplot2::scale_x_continuous(limits = c(-54, -38), breaks = seq(-54, -38, 2)) +
   ggplot2::scale_y_continuous(limits = c(-26, -14), breaks = seq(-26, -14, 2)) +
   ggplot2::labs(
      x = "Longitude",
      y = "Latitude",
      title = "Contágios Acumulados na Região Sudeste",
      subtitle = "Por grupo de 100 mil habitantes"
   ) +
   tema_bruno() +
   ggplot2::theme(
      legend.key.size = ggplot2::unit(1, "cm"),
      legend.title = ggplot2::element_blank()
   )

Nordeste

covid_cidades %>%
   dplyr::filter(regiao == "Nordeste") %>%
   dplyr::arrange(cod_ibge, date) %>%
   dplyr::group_by(cod_ibge) %>%
   dplyr::filter(date == max(date, na.rm = TRUE)) %>%
   dplyr::ungroup() %>%
   dplyr::arrange(uf, date) %>%
   dplyr::left_join(
      y = tabela_ufs,
      by = c("uf" = "abbrev_state")
   ) %>%
   dplyr::select(geom_uf = geom, dplyr::everything()) %>%
   dplyr::arrange(cod_ibge, date) %>%
   dplyr::left_join(
      y = tabela_mun,
      by = c("cod_ibge" = "code_muni")
   ) %>%
   dplyr::select(geom_mun = geom, dplyr::everything()) %>%
   ggplot2::ggplot() +
   ggplot2::geom_sf(ggplot2::aes(geometry = geom_mun, fill = contagios_acumulados_100k), color = "darkcyan") +
   ggplot2::geom_sf(ggplot2::aes(geometry = geom_uf), alpha = 0, color = "blue", size = 1L) +
   ggplot2::scale_fill_gradient2(
      low = "blue",
      mid = "white",
      high = "red"
   ) +
   # ggplot2::scale_x_continuous(limits = c(-50, -32), breaks = seq(-50, -32, 2)) +
   # ggplot2::scale_y_continuous(limits = c(-19, -1), breaks = seq(-19, -1, 2)) +
   ggplot2::labs(
      x = "Longitude",
      y = "Latitude",
      title = "Contágios Acumulados na Região Nordeste",
      subtitle = "Por grupo de 100 mil habitantes"
   ) +
   tema_bruno() +
   ggplot2::theme(
      legend.key.size = ggplot2::unit(1, "cm"),
      legend.title = ggplot2::element_blank()
   )

Sul

covid_cidades %>%
   dplyr::filter(regiao == "Sul") %>%
   dplyr::arrange(cod_ibge, date) %>%
   dplyr::group_by(cod_ibge) %>%
   dplyr::filter(date == max(date, na.rm = TRUE)) %>%
   dplyr::ungroup() %>%
   dplyr::arrange(uf, date) %>%
   dplyr::left_join(
      y = tabela_ufs,
      by = c("uf" = "abbrev_state")
   ) %>%
   dplyr::select(geom_uf = geom, dplyr::everything()) %>%
   dplyr::arrange(cod_ibge, date) %>%
   dplyr::left_join(
      y = tabela_mun,
      by = c("cod_ibge" = "code_muni")
   ) %>%
   dplyr::select(geom_mun = geom, dplyr::everything()) %>%
   ggplot2::ggplot() +
   ggplot2::geom_sf(ggplot2::aes(geometry = geom_mun, fill = contagios_acumulados_100k), color = "darkcyan") +
   ggplot2::geom_sf(ggplot2::aes(geometry = geom_uf), alpha = 0, color = "blue", size = 1L) +
   ggplot2::scale_fill_gradient2(
      low = "blue",
      mid = "white",
      high = "red"
   ) +
   # ggplot2::scale_x_continuous(limits = c(-58, -48), breaks = seq(-58, -48, 2)) +
   # ggplot2::scale_y_continuous(limits = c(-34, -22), breaks = seq(-34, -22, 2)) +
   ggplot2::labs(
      x = "Longitude",
      y = "Latitude",
      title = "Contágios Acumulados na Região Sul",
      subtitle = "Por grupo de 100 mil habitantes"
   ) +
   tema_bruno() +
   ggplot2::theme(
      legend.key.size = ggplot2::unit(1, "cm"),
      legend.title = ggplot2::element_blank()
   )

Centro-Oeste

covid_cidades %>%
   dplyr::filter(regiao == "Centro-Oeste") %>%
   dplyr::arrange(cod_ibge, date) %>%
   dplyr::group_by(cod_ibge) %>%
   dplyr::filter(date == max(date, na.rm = TRUE)) %>%
   dplyr::ungroup() %>%
   dplyr::arrange(uf, date) %>%
   dplyr::left_join(
      y = tabela_ufs,
      by = c("uf" = "abbrev_state")
   ) %>%
   dplyr::select(geom_uf = geom, dplyr::everything()) %>%
   dplyr::arrange(cod_ibge, date) %>%
   dplyr::left_join(
      y = tabela_mun,
      by = c("cod_ibge" = "code_muni")
   ) %>%
   dplyr::select(geom_mun = geom, dplyr::everything()) %>%
   ggplot2::ggplot() +
   ggplot2::geom_sf(ggplot2::aes(geometry = geom_mun, fill = contagios_acumulados_100k), color = "darkcyan") +
   ggplot2::geom_sf(ggplot2::aes(geometry = geom_uf), alpha = 0, color = "blue", size = 1L) +
   ggplot2::scale_fill_gradient2(
      low = "blue",
      mid = "white",
      high = "red"
   ) +
   # ggplot2::scale_x_continuous(limits = c(-63, -45), breaks = seq(-63, -45, 2)) +
   # ggplot2::scale_y_continuous(limits = c(-25, -07), breaks = seq(-25, -07, 2)) +
   ggplot2::labs(
      x = "Longitude",
      y = "Latitude",
      title = "Contágios Acumulados na Região Centro-Oeste",
      subtitle = "Por grupo de 100 mil habitantes"
   ) +
   tema_bruno() +
   ggplot2::theme(
      legend.key.size = ggplot2::unit(1, "cm"),
      legend.title = ggplot2::element_blank()
   )

Norte

covid_cidades %>%
   dplyr::filter(regiao == "Norte") %>%
   dplyr::arrange(cod_ibge, date) %>%
   dplyr::group_by(cod_ibge) %>%
   dplyr::filter(date == max(date, na.rm = TRUE)) %>%
   dplyr::ungroup() %>%
   dplyr::arrange(uf, date) %>%
   dplyr::left_join(
      y = tabela_ufs,
      by = c("uf" = "abbrev_state")
   ) %>%
   dplyr::select(geom_uf = geom, dplyr::everything()) %>%
   dplyr::arrange(cod_ibge, date) %>%
   dplyr::left_join(
      y = tabela_mun,
      by = c("cod_ibge" = "code_muni")
   ) %>%
   dplyr::select(geom_mun = geom, dplyr::everything()) %>%
   ggplot2::ggplot() +
   ggplot2::geom_sf(ggplot2::aes(geometry = geom_mun, fill = contagios_acumulados_100k), color = "darkcyan") +
   ggplot2::geom_sf(ggplot2::aes(geometry = geom_uf), alpha = 0, color = "blue", size = 1L) +
   ggplot2::scale_fill_gradient2(
      low = "blue",
      mid = "white",
      high = "red"
   ) +
   # ggplot2::scale_x_continuous(limits = c(-75, -45), breaks = seq(-75, -45, 2)) +
   # ggplot2::scale_y_continuous(limits = c(-14, +06), breaks = seq(-14, +06, 2)) +
   ggplot2::labs(
      x = "Longitude",
      y = "Latitude",
      title = "Contágios Acumulados na Região Norte",
      subtitle = "Por grupo de 100 mil habitantes"
   ) +
   tema_bruno() +
   ggplot2::theme(
      legend.key.size = ggplot2::unit(1, "cm"),
      legend.title = ggplot2::element_blank()
   )

O que falta fazer...

Com o processo construído para ser de fácil atualização e com os dados estruturados, as possibilidades de análise são muitas...

Ainda gostaria de poder explorar algumas questões de séries temporais... Com a sazonalidade visível entre novos contágios e novos óbitos, talvez fosse possível estimar uma projeção de óbitos com base nos contágios. Ainda que este processo seja muito pouco estocástico e dependa muito do (praticamente imprevisível) comportamento humano...

Meu desejo é o de continuar incluindo novas análises e funcionalidades neste pacote. Espero que tenha o tempo necessário para isso.

Atualização dos Dados no GitHub - 25/05/2021.



brunocp76/AnaliseCOVID19Brasil documentation built on June 11, 2022, 10:39 p.m.