knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  echo=FALSE, 
  warning=FALSE, 
  message=FALSE, 
  fig.height=8, 
  fig.width=10
)
library(covid19br)
library(tidyverse)
library(covid19br)
library(geobr)
library(cowplot)
library(knitr)
library(DT)
library(plotly)

# Data for comparisons:
used_date  <- max(covid_br$date)

n_sus      <- covid_br %>% filter(date == used_date) %>% pull(suspected_cases)
n_des      <- covid_br %>% filter(date == used_date) %>% pull(not_confirmed_cases)
n_total    <- covid_br %>% filter(date == used_date) %>% pull(confirmed_cases)
n_death    <- covid_br %>% filter(date == used_date) %>% pull(deaths)

# raw data
tab_stat <- covid_states %>% filter(date == used_date) %>% 
  dplyr::select(Estado = state, "Casos suspeitos" = suspected_cases, 
         "Casos confirmados" = confirmed_cases,
         "Casos descartados" = not_confirmed_cases) %>% 
  arrange(Estado) %>% as.data.frame()
# Function to generate predictions from (log(2) regression models)
#' @export
predic_covid <- function(model, date_interval){
  future <-
    data.frame(
      date = date_interval, by = 1)
  pred <-exp(predict(model, newdata = future, interval = "confidence"))
  future <- cbind(future, pred)
  return(future)
}

# Function to generate predicted vs observed trends in covid
#' @export
plot_future <-
  function(obs, pred, pred_lab = "Previsto", obs_lab = "Observado", ylab = "Casos confirmados covid-19", xlab = "Data",
         title = "covid-19 | Brazil",
         subtitle = "Corona virus spreads exponentially",
         caption = "Data source: Minstério da Saúde | Predicted on 2020-03-15") {
  gpred <- ggplot(pred, aes(y = fit, x = date)) +
    geom_ribbon(data = pred, aes(ymax = upr, ymin = lwr, x = date), fill = "gray", alpha = .5) +
    geom_line(data = pred, aes(y = fit, color = pred_lab), lty = "dashed") +
    geom_line(data = obs,
              aes(y = confirmed_cases, x = date,
                  color = obs_lab)) +
    geom_point(data = obs,
               aes(y = confirmed_cases, x = date,
                   color = obs_lab)) +
    scale_color_manual(values = c(2,1), name = "") +
    scale_x_date(date_breaks = "7 days", date_labels =  "%d %b") +
    theme_cowplot(font_size = 20) +
    labs(y = ylab,
         x = xlab,
         title = title,
         subtitle = subtitle,
         caption =  caption) +
    theme(
      plot.title = element_text(size = 22),
      plot.subtitle = element_text(size = 18),
      plot.caption = element_text(size = 12, hjust = 1))
  return(gpred)
}

NOTAS:
As análises abaixo representam apenas o número de casos confirmados pelo Ministério da Saúde, portanto, não se pode concluir uma relação direta destes números com o número real de pessoas infectadas por covid-19.
Os resultados apresentados abaixo foram atualizados na data: r used_date

Síntese dos dados oficiais

Predição do número de casos de covid-19 no Brasil

library(covid19br)
# calculate doubling time:

mod10    <- lm(log10(confirmed_cases + 1) ~ date, covid_br)
modlog   <- lm(log(confirmed_cases + 1) ~ date, covid_br)
dtime    <- log(2)/modlog$coef[2]   # time to double
dtime10  <- 1/mod10$coef[2]         # time to x 10

# Predictions (next 10 days)
mod15   <- lm(log(confirmed_cases + 1) ~ date, covid_br %>% filter(date < "2020-03-16"))

future <- predic_covid(mod15, date_interval = seq(as.Date("2020-03-10"), as.Date("2020-03-26"), 1))

gpred <- plot_future(obs = covid_br, pred = future, 
                     title = "covid-19 | Brasil", 
                     subtitle = "Corona se espalha exponencialmente",
                     caption = "Data source: Minstério da Saúde | Predicted on 2020-03-16") +
  scale_y_continuous(limits = c(0, 7000), breaks = seq(0, 7000, 1000), labels = c(0, paste(seq(1,7,1), "mil")))
gpred

Valores brutos

future  %>% 
  mutate(fit = round(fit, 0), lwr = round(lwr, 0), upr = round(upr, 0)) %>% 
  select(Data = date, Esperado = fit, Mínimo = lwr, "Máximo" = upr) %>% 
  datatable(rownames = FALSE, options = list(pageLength = 30))


paternogbc/covid19br documentation built on March 17, 2021, 5:57 p.m.