Sumário

Row

confirmed

52.995

eff_confirmed

183.500

active

49.325 (93.1%)

death

3.670 (6.9%)

Row

Número de casos acumulados por tipo - Brasil

Números do Brasil

Row

Distribuição dos casos por tipo entre as regiões

Distribuição dos casos por tipo entre as unidades da federação

Row

Número de casos confirmados acumulados - Estados Selecionados

Número de novos casos confirmados por dia - Estados Selecionados

Número de novos casos confirmados por dia (Regressão Linear)- Estados Selecionados

Número de novos óbitos por dia - Estados Selecionados

Números no mundo

Row

Novos casos diários

Número de novos casos diários a partir de 150 novos casos confirmados (Log) e os dias decorridos desde o registro

Distribuição dos casos por tipo

Modelo de Previsão para o Brasil

Row

R0

1,22

infectados_pico

3.582.533 (1.7%)

infectados_early5days

170 ( daqui a 84dias)

infectados_5days

72.524

infectados_early5days

44.433

mortes_pico

71.650,65 (0.03%)

Row

Modelo de regressão linear para os novos casos diários (escala logarítmica)

Modelo de Previsão(SIR:susceptible-infected-removed) para o Brasil (população de 211 milhões)

Curva exponencial de infecção prevista para o Brasil

Mapa

Mapa mundial dos casos (use + e - para dar zoom in/out)

---
title: "COVID-19 no Brasil"
author: "Carlos Eduardo Veras Neves"
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    # social: ["facebook", "twitter", "linkedin"]
    source_code: embed
    vertical_layout: fill
---

```{r message=FALSE, warning=FALSE, include=FALSE}
#(adaptado de https://github.com/AntoineSoetewey/coronavirus_dashboard)
#----------------------------------------------------
# Pulling the coronvirus data from John Hopkins repo
# https://github.com/CSSEGISandData/COVID-19
#----------------------------------------------------
# Setting functions
`%>%` <- magrittr::`%>%`
#----------------------------------------------------
#------------ Pulling confirmed cases------------
conf_url <- "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv"
raw_conf <- read.csv(file = conf_url,
                     stringsAsFactors = FALSE)

lapply(1:ncol(raw_conf), function(i){
  if(all(is.na(raw_conf[, i]))){
    raw_conf <<- raw_conf[, -i]
    return(print(paste("Column", names(raw_conf)[i], "is missing", sep = " ")))
  } else {
    return(NULL)
  }
})

# Transforming the data from wide to long
# Creating new data frame
df_conf <- raw_conf[, 1:4]

for(i in 5:ncol(raw_conf)){
  
  raw_conf[,i] <- as.integer(raw_conf[,i])
  # raw_conf[,i] <- ifelse(is.na(raw_conf[, i]), 0 , raw_conf[, i])
  print(names(raw_conf)[i])
  
  if(i == 5){
    df_conf[[names(raw_conf)[i]]] <- raw_conf[, i]
  } else {
    df_conf[[names(raw_conf)[i]]] <- raw_conf[, i] - raw_conf[, i - 1]
  }
  
  
}


df_conf1 <-  df_conf %>% tidyr::pivot_longer(cols = dplyr::starts_with("X"),
                                             names_to = "date_temp",
                                             values_to = "cases_temp")

# Parsing the date
df_conf1$month <- sub("X", "",
                      strsplit(df_conf1$date_temp, split = "\\.") %>%
                        purrr::map_chr(~.x[1]) )

df_conf1$day <- strsplit(df_conf1$date_temp, split = "\\.") %>%
  purrr::map_chr(~.x[2])


df_conf1$date <- as.Date(paste("2020", df_conf1$month, df_conf1$day, sep = "-"))

# Aggregate the data to daily
df_conf2 <- df_conf1 %>%
  dplyr::group_by(Province.State, Country.Region, Lat, Long, date) %>%
  dplyr::summarise(cases = sum(cases_temp)) %>%
  dplyr::ungroup() %>%
  dplyr::mutate(type = "confirmed",
                Country.Region = trimws(Country.Region),
                Province.State = trimws(Province.State))


#----------------------------------------------------
# Pulling death cases

death_url <- "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv"
raw_death <- read.csv(file =death_url,
                      stringsAsFactors = FALSE,
                      fill =FALSE)

lapply(1:ncol(raw_death), function(i){
  if(all(is.na(raw_death[, i]))){
    raw_death <<- raw_death[, -i]
    return(print(paste("Column", names(raw_death)[i], "is missing", sep = " ")))
  } else {
    return(NULL)
  }
})

# Transforming the data from wide to long
# Creating new data frame
df_death <- raw_death[, 1:4]

for(i in 5:ncol(raw_death)){
  print(i)
  raw_death[,i] <- as.integer(raw_death[,i])
  raw_death[,i] <- ifelse(is.na(raw_death[, i]), 0 , raw_death[, i])
  
  if(i == 5){
    df_death[[names(raw_death)[i]]] <- raw_death[, i]
  } else {
    df_death[[names(raw_death)[i]]] <- raw_death[, i] - raw_death[, i - 1]
  }
}


df_death1 <-  df_death %>% tidyr::pivot_longer(cols = dplyr::starts_with("X"),
                                               names_to = "date_temp",
                                               values_to = "cases_temp")

# Parsing the date
df_death1$month <- sub("X", "",
                       strsplit(df_death1$date_temp, split = "\\.") %>%
                         purrr::map_chr(~.x[1]) )

df_death1$day <- strsplit(df_death1$date_temp, split = "\\.") %>%
  purrr::map_chr(~.x[2])


df_death1$date <- as.Date(paste("2020", df_death1$month, df_death1$day, sep = "-"))

# Aggregate the data to daily
df_death2 <- df_death1 %>%
  dplyr::group_by(Province.State, Country.Region, Lat, Long, date) %>%
  dplyr::summarise(cases = sum(cases_temp)) %>%
  dplyr::ungroup() %>%
  dplyr::mutate(type = "death",
                Country.Region = trimws(Country.Region),
                Province.State = trimws(Province.State))
# 
#---------------- Aggregate all cases ----------------

#
coronavirus <- dplyr::bind_rows(df_conf2, df_death2) %>%
  as.data.frame()




```

```{r setup, include=FALSE}
library(flexdashboard)
library(tidyverse)
library(lubridate)
library(rvest)
library(stringdist)


setwd("D:/GoogleDrive/Colab Notebooks/COVID-19/covid19-Brazil-dashboard")

df_saudegovbr <- read.csv(file ='COVID19_20200424.csv', header = TRUE, sep = ";",
                      stringsAsFactors = FALSE,
                      fill =FALSE)

`%>%` <- magrittr::`%>%`
#------------------ Parameters ------------------
# Set colors
# https://www.w3.org/TR/css-color-3/#svg-color
confirmed_color <- "purple"
active_color <- "#1f77b4"
#recovered_color <- "forestgreen"
death_color <- "red"
#------------------ Data ------------------


df_saudegovbr = df_saudegovbr %>% 
                mutate(data = as.Date(data, "%Y-%m-%d")) %>% 
                arrange(data) 

df_saudegovbr = df_saudegovbr %>% 
                mutate(estado = estado)



df_regiao = df_saudegovbr %>% 
            group_by(regiao) %>%
            summarise(confirmados = sum(casosNovos), 
                      obitos = sum(obitosNovos)) %>% 
            mutate(ativos = confirmados - obitos)
           

df_estado = df_saudegovbr %>% 
            group_by(estado) %>%
            summarise(confirmados = sum(casosNovos), 
                      obitos = sum(obitosNovos))%>%
            mutate(ativos = confirmados - obitos)

df_brasil = df_saudegovbr %>% 
            summarise(confirmados = sum(casosNovos), 
                      obitos = sum(obitosNovos)) %>%
            mutate(ativos = confirmados - obitos)
            

df_daily_br = df_saudegovbr %>% group_by(data) %>% 
              summarise(confirmados = sum(casosNovos), obitos = sum(obitosNovos)) %>% 
              mutate(ativos = confirmados - obitos) %>%
              ungroup() %>%
              mutate( confirmado_cum = cumsum(confirmados),
                      obito_cum = cumsum(obitos),
                      ativo_cum = cumsum(ativos))
              
df_daily_estados = df_saudegovbr %>% 
                    group_by(estado, data) %>%
                    summarise(confirmados = sum(casosNovos), 
                              obitos = sum(obitosNovos)) %>%
                    mutate(ativos = confirmados - obitos) %>%
                    mutate( confirmado_cum = cumsum(confirmados),
                      obito_cum = cumsum(obitos),
                      ativo_cum = cumsum(ativos)) %>%
                    tidyr::pivot_wider(names_from = estado, values_from = confirmado_cum)


```

-----------------------------------------------------------------------


Sumário
=======================================================================


Row {data-width=1000 data-height=100}
-----------------------------------------------------------------------

### confirmed {.value-box }

```{r}

mort = df_brasil$obitos / (df_brasil$confirmados)

casos_reais = round((df_brasil$confirmados)*mort/.02,0)

valueBox(
  value = paste(format(sum(df_brasil$confirmados),  big.mark = ".", decimal.mark =  ","), sep = " "),
  caption = "Número total de casos confirmados",
  icon = "fas fa-user-md",
  color = confirmed_color
)
```

### eff_confirmed {.value-box }

```{r}


mort = df_brasil$obitos / (df_brasil$confirmados)

casos_reais = round((df_brasil$confirmados)*mort/.02,0)

valueBox(
  value = paste(format(casos_reais,  big.mark = ".", decimal.mark =  ","), "", sep = " "),
  caption = "Número real de casos (estimado com 2% de tx. de mortalidade)",
  icon = "fas fa-user-md",
  color = confirmed_color
)
```

### active {.value-box }

```{r}
valueBox(
  value = paste(format(df_brasil$ativos, big.mark = ".", decimal.mark =  ","), " (",
    round(100 * df_brasil$ativos/ df_brasil$confirmados, 1),
    "%)",
    sep = ""
  ),
  caption = "Casos ativos (% do total de casos)", icon = "fas fa-ambulance",
  color = active_color
)
```

### death {.value-box }

```{r}
valueBox(
  value = paste(format(df_brasil$obitos, big.mark = ".", decimal.mark =  ","), " (",
    round(100 * df_brasil$obitos / df_brasil$confirmados, 1),
    "%)",
    sep = ""
  ),
  caption = "Mortes (taxa de mortalidade)",
  icon = "fas fa-heart-broken",
  color = death_color
)
```


Row
-----------------------------------------------------------------------

### **Número de casos acumulados por tipo - Brasil ** 
    
```{r}
plotly::plot_ly(data = df_daily_br) %>%
  plotly::add_trace(
    x = ~data,
    y = ~ativo_cum,
    type = "scatter",
    mode = "lines+markers",
    name = "Ativos",
    line = list(color = active_color),
    marker = list(color = active_color)
  ) %>%
    plotly::add_trace(
    x = ~data,
    y = ~confirmado_cum,
    type = "scatter",
    mode = "lines+markers",
    name = "Confirmados",
    line = list(color = confirmed_color),
    marker = list(color = confirmed_color)
  ) %>%
  plotly::add_trace(
    x = ~data,
    y = ~obito_cum,
    type = "scatter",
    mode = "lines+markers",
    name = "Óbitos",
    line = list(color = death_color),
    marker = list(color = death_color)
  ) %>%
  plotly::add_annotations(
    x = as.Date("2020-02-26"),
    y = 1,
    text = paste("Primeiro caso"),
    xref = "x",
    yref = "y",
    arrowhead = 5,
    arrowhead = 3,
    arrowsize = 1,
    showarrow = TRUE,
    ax = -10,
    ay = -90
  ) %>%
  plotly::add_annotations(
    x = as.Date("2020-03-17"),
    y = 3,
    text = paste("Primeira morte"),
    xref = "x",
    yref = "y",
    arrowhead = 5,
    arrowhead = 3,
    arrowsize = 1,
    showarrow = TRUE,
    ax = 90,
    ay = -90
  ) %>%
  plotly::add_annotations(
    x = as.Date("2020-03-16"),
    y = 14,
    text = paste(
      "Medidas de",
      "
", "contenção" ), xref = "x", yref = "y", arrowhead = 5, arrowhead = 3, arrowsize = 1, showarrow = TRUE, ax = -20, ay = -90 ) %>% plotly::layout( title = "", yaxis = list(title = "Número acumulado de casos"), xaxis = list(title = "Data"), legend = list(x = 0.1, y = 0.9), hovermode = "compare" ) ``` Números do Brasil ======================================================================= Row {.tabset .tabset-fade} ------------------------------------- ### **Distribuição dos casos por tipo entre as regiões** ```{r br_porregiao} plotly::plot_ly( data = df_regiao, x = ~regiao, y = ~ativos, # text = ~ confirmed, # textposition = 'auto', type = "bar", name = "Casos Ativos", marker = list(color = active_color) ) %>% plotly::add_trace( y = ~obitos, # text = ~ death, # textposition = 'auto', name = "Mortes", marker = list(color = death_color) ) %>% plotly::layout( barmode = "stack", yaxis = list(title = "Total de casos"), xaxis = list(title = ""), hovermode = "compare", margin = list( # l = 60, # r = 40, b = 10, t = 10, pad = 2 ) ) ``` ### **Distribuição dos casos por tipo entre as unidades da federação** ```{r br_porestado} plotly::plot_ly( data = df_estado, x = ~estado, y = ~ativos, # text = ~ confirmed, # textposition = 'auto', type = "bar", name = "Casos Ativos", marker = list(color = active_color) ) %>% plotly::add_trace( y = ~obitos, # text = ~ death, # textposition = 'auto', name = "Mortes", marker = list(color = death_color) ) %>% plotly::layout( barmode = "stack", yaxis = list(title = "Total de casos"), xaxis = list(title = ""), hovermode = "compare", margin = list( # l = 60, # r = 40, b = 10, t = 10, pad = 2 ) ) ``` Row {.tabset .tabset-fade} ------------------------------------- ### **Número de casos confirmados acumulados - Estados Selecionados** ```{r} df_daily_estados = df_saudegovbr %>% group_by(estado, data) %>% summarise(confirmados = sum(casosNovos), obitos = sum(obitosNovos)) %>% mutate(ativos = confirmados - obitos) %>% mutate( confirmado_cum = cumsum(confirmados), obito_cum = cumsum(obitos), ativo_cum = cumsum(ativos)) %>% tidyr::pivot_wider(names_from = estado, values_from = confirmado_cum) plotly::plot_ly(data = df_daily_estados) %>% plotly::add_trace( x = ~data, y = ~DF, type = "scatter", mode = "lines+markers", name = "DF") %>% plotly::add_trace( x = ~data, y = ~SP, type = "scatter", mode = "lines+markers", name = "SP") %>% plotly::add_trace( x = ~data, y = ~RJ, type = "scatter", mode = "lines+markers", name = "RJ") %>% plotly::add_trace( x = ~data, y = ~CE, type = "scatter", mode = "lines+markers", name = "CE") %>% plotly::add_trace( x = ~data, y = ~MG, type = "scatter", mode = "lines+markers", name = "MG") %>% plotly::add_trace( x = ~data, y = ~AM, type = "scatter", mode = "lines+markers", name = "AM") %>% plotly::layout( title = "", yaxis = list(title = "Número acumulado de casos"), xaxis = list(title = "Data", range=c('2020-02-25','2020-04-25')), legend = list(x = 0.1, y = 0.9), hovermode = "compare" ) ``` ### **Número de novos casos confirmados por dia - Estados Selecionados** ```{r} df_daily_estados = df_saudegovbr %>% group_by(estado, data) %>% summarise(confirmados = sum(casosNovos), obitos = sum(obitosNovos)) %>% mutate(ativos = confirmados - obitos) %>% mutate( confirmado_cum = cumsum(confirmados), obito_cum = cumsum(obitos), ativo_cum = cumsum(ativos)) %>% tidyr::pivot_wider(names_from = estado, values_from = confirmados) plotly::plot_ly(data = df_daily_estados) %>% #plotly::layout(yaxis = list(type = "log")) %>% plotly::add_trace( x = ~data, y = ~DF, type = "scatter", mode = "lines+markers", name = "DF") %>% plotly::add_trace( x = ~data, y = ~SP, type = "scatter", mode = "lines+markers", name = "SP") %>% plotly::add_trace( x = ~data, y = ~RJ, type = "scatter", mode = "lines+markers", name = "RJ") %>% plotly::add_trace( x = ~data, y = ~CE, type = "scatter", mode = "lines+markers", name = "CE") %>% plotly::add_trace( x = ~data, y = ~MG, type = "scatter", mode = "lines+markers", name = "MG") %>% plotly::add_trace( x = ~data, y = ~AM, type = "scatter", mode = "lines+markers", name = "AM") %>% plotly::layout( title = "", yaxis = list(title = "Número de novos casos confirmados por dia"), xaxis = list(title = "Data",range=c('2020-02-25','2020-04-25')), legend = list(x = 0.1, y = 0.9), hovermode = "compare" ) ``` ### **Número de novos casos confirmados por dia (Regressão Linear)- Estados Selecionados** ```{r} fit_DF = lm(log(DF) ~ data, data = df_daily_estados, subset=DF>0) fit_SP = lm(log(SP) ~ data, data = df_daily_estados, subset=SP>0) fit_RJ = lm(log(RJ) ~ data, data = df_daily_estados, subset=RJ>0) #---------------------------------------- # Plotting the data df_daily_estados %>% plotly::plot_ly() %>% #plotly::layout(yaxis = list(type = "log")) %>% plotly::add_trace( x = ~data, y = ~log(DF), type = "scatter", mode = "markers", name = "DF", color=I('blue') ) %>% plotly::add_lines( x = ~data[as.numeric(names(fit_DF$fitted.values))], y = fitted(fit_DF), name="DF reg.linear", color=I('blue') ) %>% plotly::add_trace( x = ~data, y = ~log(SP), type = "scatter", mode = "markers", name = "SP", color=I('green') ) %>% plotly::add_lines( x = ~data[as.numeric(names(fit_SP$fitted.values))], y = fitted(fit_SP), name="SP reg.linear", color=I('green') ) %>% plotly::add_trace( x = ~data, y = ~log(RJ), type = "scatter", mode = "markers", name = "SP", color=I('red') ) %>% plotly::add_lines( x = ~data[as.numeric(names(fit_RJ$fitted.values))], y = fitted(fit_RJ), name="RJ reg.linear", color=I('red') ) %>% plotly::layout( title = "", legend = list(x = .1, y = 0.8), yaxis = list(title = "Número de novos casos confirmados (por dia) - Log"), xaxis = list(title = "Data", range=c('2020-02-25','2020-04-21')), # paper_bgcolor = "black", # plot_bgcolor = "black", # font = list(color = 'white'), hovermode = "compare", margin = list( # l = 60, # r = 40, b = 10, t = 10, pad = 2 ) ) ``` ### **Número de novos óbitos por dia - Estados Selecionados** ```{r} df_daily_estados = df_saudegovbr %>% group_by(estado, data) %>% summarise(confirmados = sum(casosNovos), obitos = sum(obitosNovos)) %>% mutate(ativos = confirmados - obitos) %>% mutate( confirmado_cum = cumsum(confirmados), obito_cum = cumsum(obitos), ativo_cum = cumsum(ativos)) %>% tidyr::pivot_wider(names_from = estado, values_from = obitos) plotly::plot_ly(data = df_daily_estados) %>% #plotly::layout(yaxis = list(type = "log")) %>% plotly::add_trace( x = ~data, y = ~DF, type = "scatter", mode = "lines+markers", name = "DF") %>% plotly::add_trace( x = ~data, y = ~SP, type = "scatter", mode = "lines+markers", name = "SP") %>% plotly::add_trace( x = ~data, y = ~RJ, type = "scatter", mode = "lines+markers", name = "RJ") %>% plotly::add_trace( x = ~data, y = ~CE, type = "scatter", mode = "lines+markers", name = "CE") %>% plotly::add_trace( x = ~data, y = ~MG, type = "scatter", mode = "lines+markers", name = "MG") %>% plotly::add_trace( x = ~data, y = ~AM, type = "scatter", mode = "lines+markers", name = "AM") %>% plotly::layout( title = "", yaxis = list(title = "Número de novos óbitos por dia"), xaxis = list(title = "Data",range=c('2020-02-25','2020-04-25')), legend = list(x = 0.1, y = 0.9), hovermode = "compare" ) ``` Números no mundo ======================================================================= Row {.tabset .tabset-fade} ------------------------------------- ### **Novos casos diários** ```{r} daily_confirmed <- coronavirus %>% dplyr::filter(type == "confirmed") %>% dplyr::filter(date >= "2020-02-26") %>% dplyr::mutate(country = Country.Region) %>% dplyr::group_by(date, country) %>% dplyr::summarise(total = sum(cases)) %>% dplyr::ungroup() %>% tidyr::pivot_wider(names_from = country, values_from = total) elements = 28:(length(df_daily_br$confirmados)) #---------------------------------------- # Plotting the data daily_confirmed %>% plotly::plot_ly() %>% plotly::add_trace( x = ~date, y = ~df_daily_br$confirmados[elements], type = "scatter", mode = "lines+markers", name = "Brasil" ) %>% plotly::add_trace( x = ~date, y = ~France, type = "scatter", mode = "lines+markers", name = "França" ) %>% plotly::add_trace( x = ~date, y = ~Spain, type = "scatter", mode = "lines+markers", name = "Espanha" ) %>% plotly::add_trace( x = ~date, y = ~Italy, type = "scatter", mode = "lines+markers", name = "Itália" ) %>% plotly::add_trace( x = ~date, y = ~Germany, type = "scatter", mode = "lines+markers", name = "Alemanha" ) %>% plotly::add_trace( x = ~date, y = ~Sweden, type = "scatter", mode = "lines+markers", name = "Suécia" ) %>% plotly::layout( title = "", legend = list(x = 0.1, y = 0.9), yaxis = list(title = "Número de novos casos confirmados (por dia)"), xaxis = list(title = "Data"), # paper_bgcolor = "black", # plot_bgcolor = "black", # font = list(color = 'white'), hovermode = "compare", margin = list( # l = 60, # r = 40, b = 10, t = 10, pad = 2 ) ) ``` ### **Número de novos casos diários a partir de 150 novos casos confirmados (Log) e os dias decorridos desde o registro** ```{r , echo=FALSE} x <- coronavirus[order(coronavirus$date, coronavirus$Country.Region, decreasing = TRUE), ] onset = x %>% group_by(Country.Region) %>% #filter(Country.Region == c('Brazil', 'Italy', 'France')) %>% filter(type=='confirmed')%>% filter(cases >= 150) %>% mutate(days_since_case_onset := as.integer(date - min(date))) # corrigindo a base para os dados do Ministério da Saúde onset_br = rev(df_daily_br$confirmados[df_daily_br$confirmados > 150]) onset %>% plotly::plot_ly()%>% plotly::layout(yaxis = list(type = "log")) %>% group_by(Country.Region) %>% plotly::add_trace( x = ~subset(onset$days_since_case_onset, Country.Region=='Brazil'), y = ~onset_br[1:(length(onset_br))], type = "scatter", mode = "lines+markers", name = "Brasil" ) %>% plotly::add_trace( x = ~subset(onset$days_since_case_onset, Country.Region=='France'), y = ~subset(onset$cases, Country.Region=='France'), type = "scatter", mode = "lines+markers", name = "França" ) %>% plotly::add_trace( x = ~subset(onset$days_since_case_onset, Country.Region=='Spain'), y = ~subset(onset$cases, Country.Region=='Spain'), type = "scatter", mode = "lines+markers", name = "Espanha" ) %>% plotly::add_trace( x = ~subset(onset$days_since_case_onset, Country.Region=='Italy'), y = ~subset(onset$cases, Country.Region=='Italy'), type = "scatter", mode = "lines+markers", name = "Itália" ) %>% plotly::add_trace( x = ~subset(onset$days_since_case_onset, Country.Region=='Germany'), y = ~subset(onset$cases, Country.Region=='Germany'), type = "scatter", mode = "lines+markers", name = "Alemanha" ) %>% plotly::add_trace( x = ~subset(onset$days_since_case_onset, Country.Region=='Sweden'), y = ~subset(onset$cases, Country.Region=='Sweden'), type = "scatter", mode = "lines+markers", name = "Suécia" ) %>% plotly::layout( title = "", legend = list(x = 0.1, y = 0.9), yaxis = list(title = "Número de novos casos conf irmados (por dia)"), xaxis = list(title = "Dias decorridos desde o caso de número 150"), hovermode = "compare", margin = list( b = 10, t = 10, pad = 2 ) ) ``` ### **Distribuição dos casos por tipo** ```{r daily_summary} df_EU <- coronavirus %>% # dplyr::filter(date == max(date)) %>% dplyr::filter(Country.Region == "Brazil" | Country.Region == "France" | Country.Region == "Italy" | Country.Region == "Spain" | Country.Region == "Germany" | Country.Region == "Sweden")%>% dplyr::group_by(Country.Region, type) %>% dplyr::summarise(total = sum(cases)) %>% tidyr::pivot_wider( names_from = type, values_from = total ) %>% dplyr::mutate(unrecovered = confirmed - ifelse(is.na(death), 0, death)) %>% dplyr::arrange(confirmed) %>% dplyr::ungroup() %>% dplyr::mutate(country = dplyr::if_else(Country.Region == "United Arab Emirates", "UAE", Country.Region)) %>% dplyr::mutate(country = dplyr::if_else(country == "Mainland China", "China", country)) %>% dplyr::mutate(country = dplyr::if_else(country == "North Macedonia", "N.Macedonia", country)) %>% dplyr::mutate(country = trimws(country)) %>% dplyr::mutate(country = factor(country, levels = country)) plotly::plot_ly( data = df_EU, x = ~country, y = ~unrecovered, # text = ~ confirmed, # textposition = 'auto', type = "bar", name = "Casos Ativos", marker = list(color = active_color) ) %>% plotly::add_trace( y = ~death, # text = ~ death, # textposition = 'auto', name = "Mortes", marker = list(color = death_color) ) %>% plotly::layout( barmode = "stack", yaxis = list(title = "Total de casos"), xaxis = list(title = ""), hovermode = "compare", margin = list( # l = 60, # r = 40, b = 10, t = 10, pad = 2 ) ) ``` Modelo de Previsão para o Brasil ======================================================================= Row {data-width=200} ----------------------------------------------------------------------- ### R0 {.value-box} ```{r} library(deSolve) Infected = df_daily_br$confirmados[df_daily_br$confirmados >= 0] N = 211000000 # população Brasileira Day <- 1:(length(Infected)) init <- c(S = N-Infected[match(1,Infected)], I = Infected[match(1,Infected)], R = 0) RSS <- function(parameters) { names(parameters) <- c("beta", "gamma") out <- ode(y = init, times = Day, func = SIR, parms = parameters) fit <- out[ , 3] sum((Infected - fit)^2) } SIR <- function(time, state, parameters) { par <- as.list(c(state, parameters)) with(par, { dS <- -beta/N * I * S dI <- beta/N * I * S - gamma * I dR <- gamma * I list(c(dS, dI, dR)) }) } Opt <- optim(c(0.5, 0.5), RSS, method = "L-BFGS-B", lower = c(0, 0), upper = c(1, 1)) # optimize with some sensible conditions #Opt$message ## [1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH" Opt_par <- setNames(Opt$par, c("beta", "gamma")) ## Warning in xy.coords(x, y, xlabel, ylabel, log = log): 1 y value <= 0 ## omitted from logarithmic plot t <- 1:240 # time in days fit <- data.frame(ode(y = init, times = t, func = SIR, parms = Opt_par)) col <- 1:3 # colour R0 <- setNames(Opt_par["beta"] / Opt_par["gamma"], "R0") ## R0 ## 2.073224 pico = fit[fit$I == max(fit$I), "I", drop = FALSE] # height of pandemic ## I ## 50 232001865 max_mortes = max(fit$I) * 0.02 # max deaths with supposed 2% fatality rate ## [1] 4640037 valueBox( value = paste(format(round(R0,2), decimal.mark = ",") ), caption = "Taxa Básica de Reprodução (R0)", icon = "fas fa-user-md", color = active_color ) ``` ### infectados_pico {.value-box} ```{r} valueBox( value = paste(format(pico, big.mark = ".", decimal.mark = ",")," (", round(100 * pico / N, 1), "%)", sep = "" ), caption = "Número máximo de infectados", icon = "fas fa-ambulance", color = active_color ) ``` ### infectados_early5days {.value-box} ```{r} peakday = match(max(fit$I), fit$I) today = length(Infected) valueBox( value = paste(format(round(peakday,0), big.mark = ".", decimal.mark = ",")," ( daqui a ", round(peakday - today, 1), "dias)", sep = "" ), caption = "Dia da epidemia em que ocorre o pico", icon = "fas fa-ambulance", color = active_color ) ``` ### infectados_5days {.value-box} ```{r} fivedaysahead = length(Infected) + 5 valueBox( value = paste(format(round(sum(fit$I[1:fivedaysahead]),0), big.mark = ".", decimal.mark = ","), sep = "" ), caption = "Número total de infectados nos próximos 5 dias", icon = "fas fa-ambulance", color = active_color ) ``` ### infectados_early5days {.value-box} ```{r} today = length(Infected) valueBox( value = paste(format(round(sum(fit$I[1:today]),0), big.mark = ".", decimal.mark = ","), sep = "" ), caption = "Número total de infectados hoje", icon = "fas fa-ambulance", color = active_color ) ``` ### mortes_pico {.value-box} ```{r} valueBox( value = paste(format(max_mortes, big.mark = ".", decimal.mark = ",")," (", round(100 * max_mortes / N, 2), "%)", sep = "" ), caption = "Número de mortos", icon = "fas fa-heart-broken", color = active_color ) ``` Row {.tabset .tabset-fade} ------------------------------------- ### **Modelo de regressão linear para os novos casos diários (escala logarítmica) ** ```{r} #---------------------------------------- # linear fit for data in log scale fit_br = lm(log(confirmados) ~ data, data = df_daily_br, subset=confirmados>0) fit_sp = lm(log(Spain) ~ date, data = daily_confirmed, subset=Spain>0) fit_it = lm(log(Italy) ~ date, data = daily_confirmed, subset=Italy>0) fit_fr = lm(log(France) ~ date, data = daily_confirmed, subset=France>0) names(fit_br$fitted.values) = as.character(seq(1:length(fit_br$fitted.values))) p <- ggplot(df_daily_br, aes(x=data, y=log(confirmados))) + geom_point(shape=1) + # Use hollow circles geom_smooth(method=lm) + # Add linear regression line xlab('Data') + ylab('log. casos confirmados') fig <- plotly::ggplotly(p) fig ``` ### **Modelo de Previsão(SIR:susceptible-infected-removed) para o Brasil (população de 211 milhões)** ```{r } #---------------------------------------- # Plotting the data fit %>% plotly::plot_ly() %>% plotly::layout(yaxis = list(type = "log")) %>% plotly::add_trace( x = ~time, y = ~S, type = "scatter", mode = "lines+markers", name = "Suscetíveis" ) %>% plotly::add_trace( x = ~time, y = ~I, type = "scatter", mode = "lines+markers", name = "Infectados" ) %>% plotly::add_trace( x = ~time, y = ~R, type = "scatter", mode = "lines+markers", name = "Recuperados" ) %>% plotly::add_trace( x = ~Day, y = ~Infected, type = "scatter", mode = "markers", name = "Confirmados" ) %>% plotly::layout( title = "", legend = list(x = 0.1, y = 0.9), yaxis = list(title = "Número de pessoas"), xaxis = list(title = "Data"), # paper_bgcolor = "black", # plot_bgcolor = "black", # font = list(color = 'white'), hovermode = "compare", margin = list( # l = 60, # r = 40, b = 10, t = 10, pad = 2 ) ) ``` ### **Curva exponencial de infecção prevista para o Brasil ** ```{r } #---------------------------------------- # Plotting the data fit %>% plotly::plot_ly() %>% plotly::add_trace( x = ~time, y = ~I, type = "scatter", mode = "lines+markers", name = "Infectados" ) %>% plotly::add_trace( x = ~Day, y = ~Infected, type = "scatter", mode = "markers", name = "Confirmados" ) %>% plotly::layout( title = "", legend = list(x = 0.1, y = 0.9), yaxis = list(title = "Número de pessoas", range=c(1,4.5e3)), xaxis = list(title = "Data", range=c(1,120)), # paper_bgcolor = "black", # plot_bgcolor = "black", # font = list(color = 'white'), hovermode = "compare", margin = list( # l = 60, # r = 40, b = 10, t = 10, pad = 2 ) ) ``` Mapa ======================================================================= ### **Mapa mundial dos casos** (*use + e - para dar zoom in/out*) ```{r} # map tab added by Art Steinmetz library(leaflet) library(leafpop) library(purrr) cv_data_for_plot <- coronavirus %>% # dplyr::filter(Country.Region == "Belgium") %>% dplyr::filter(cases > 0) %>% dplyr::group_by(Country.Region, Province.State, Lat, Long, type) %>% dplyr::summarise(cases = sum(cases)) %>% dplyr::mutate(log_cases = 2 * log(cases)) %>% dplyr::ungroup() cv_data_for_plot.split <- cv_data_for_plot %>% split(cv_data_for_plot$type) pal <- colorFactor(c("orange", "red", "green"), domain = c("confirmed", "death", "recovered")) map_object <- leaflet() %>% addProviderTiles(providers$Stamen.Toner) names(cv_data_for_plot.split) %>% purrr::walk(function(df) { map_object <<- map_object %>% addCircleMarkers( data = cv_data_for_plot.split[[df]], lng = ~Long, lat = ~Lat, # label=~as.character(cases), color = ~ pal(type), stroke = FALSE, fillOpacity = 0.8, radius = ~log_cases, popup = leafpop::popupTable(cv_data_for_plot.split[[df]], feature.id = FALSE, row.numbers = FALSE, zcol = c("type", "cases", "Country.Region", "Province.State") ), group = df, # clusterOptions = markerClusterOptions(removeOutsideVisibleBounds = F), labelOptions = labelOptions( noHide = F, direction = "auto" ) ) }) map_object %>% addLayersControl( overlayGroups = names(cv_data_for_plot.split), options = layersControlOptions(collapsed = FALSE) ) ```