---
title: "COVID-19 no Brasil"
author: "Carlos Eduardo Veras Neves (adaptado de https://github.com/AntoineSoetewey/coronavirus_dashboard)"
output:
flexdashboard::flex_dashboard:
orientation: rows
# social: ["facebook", "twitter", "linkedin"]
source_code: embed
vertical_layout: fill
---
```{r message=FALSE, warning=FALSE, include=FALSE}
#----------------------------------------------------
# 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("C:/GoogleDrive/Colab Notebooks/COVID-19/covid19-Brazil-dashboard")
df_saudegovbr <- read.csv(file ='COVID19_20200421.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=400}
-----------------------------------------------------------------------
### 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
=======================================================================
Column {data-width=400}
-------------------------------------
### **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
)
)
```
Column {data-width=400}
-------------------------------------
### **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
=======================================================================
Column {data-width=400}
-------------------------------------
### **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=400}
-----------------------------------------------------------------------
### 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
)
```
Column {data-width=400}
-------------------------------------
### **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)
)
```