Fuente de datos

Importando datos

datos <- read.csv(file = "Datos/train.csv", encoding = "UTF-8")
head(datos, n = 10)

Depuración de datos

library(tidyverse)
library(lubridate)
datos %>% 
  rename(province = Province.State,
         country = Country.Region,
         fecha = Date,
         numcases = ConfirmedCases,
         deaths = Fatalities,
         lat = Lat,
         long = Long) %>% 
  select(-Id) %>% 
  mutate(province = if_else(condition = province == "",
                            true = "No registra",
                            false = as.character(province)),
         fecha = as.Date(datos$Date),
         semana = week(fecha),
         mes = month(fecha),
         dia_sem = weekdays(fecha)) -> 
  datos2

head(datos2)

Colombia

datos2 %>% 
  filter(country == "Colombia") ->
  df_colombia

df_colombia

Casos y muertes

  • Con la función ggarrange del paquete ggpubr es posible imprimir múltiples gráficos de ggplot2 en una sola ventana
library(ggpubr)
ggarrange(
  
  df_colombia %>%  
  filter(numcases > 0) %>% 
  ggplot(data = ., aes(x = fecha, y = numcases)) +
  geom_line(colour = "red", size = 1) +
  labs(title = "Casos COVID-19 Colombia",
       subtitle = "Escala original") +
  ylab("Casos reportados") +
  xlab("Fecha"),

  df_colombia %>% 
  filter(numcases > 0) %>% 
  ggplot(data = ., aes(x = fecha, y = numcases)) +
  scale_y_log10() +
  geom_line(colour = "red", size = 1) +
  labs(title = "Casos COVID-19 Colombia",
       subtitle = "Escala logarítmica") +
  ylab("Casos reportados") +
  xlab("Fecha"),
  
  df_colombia %>%  
  filter(numcases > 0) %>% 
  ggplot(data = ., aes(x = fecha, y = deaths)) +
  geom_line(colour = "red", size = 1) +
  labs(title = "Muertes por COVID-19 Colombia",
       subtitle = "Escala original") +
  ylab("Muertes") +
  xlab("Fecha"),

  df_colombia %>% 
  filter(numcases > 0) %>% 
  ggplot(data = ., aes(x = fecha, y = deaths)) +
  scale_y_log10() +
  geom_line(colour = "red", size = 1) +
  labs(title = "Muertes por COVID-19 Colombia",
       subtitle = "Escala logarítmica") +
  ylab("Muertes") +
  xlab("Fecha"),

ncol = 2, nrow = 2
  
)

Pronóstico

  • Se utiliza la función auto.arima() del paquete forecast.
  • Es necesario coercionar la serie temporal a tipo ts(times series).
  • Se realizan pronósticos del número de casos en Colombia desde el 24 de marzo hasta el 25 de abril (33 días).

Modelo

library(forecast)

ts_colombia <- ts(data = df_colombia$numcases, frequency = 365, start = c(2020,1))

mod_arima <- auto.arima(y = ts_colombia)
mod_arima
## Series: ts_colombia 
## ARIMA(0,2,2) 
## 
## Coefficients:
##           ma1      ma2
##       -0.0336  -0.6749
## s.e.   0.1067   0.1093
## 
## sigma^2 estimated as 59.77:  log likelihood=-207.45
## AIC=420.89   AICc=421.32   BIC=427.17

Predicciones

  • Con la función predict del paquete base, a partir del modelo ajustado previamente, se pueden realizar predicciones para n (n.ahead) días.
  • Se grafica de forma interactiva con la biblioteca plotly.
predicciones <- predict(object = mod_arima, n.ahead = 33)
library(plotly)
ggplotly(data.frame(
  Fecha = seq(as.Date("2020-03-24"), as.Date("2020-04-25"), by = "day"),
  Predicciones = predicciones 
) %>% 
  mutate(Predicciones.pred = round(Predicciones.pred, 0),
         Predicciones.se = round(Predicciones.se, 0)) %>% 
  ggplot(data = ., aes(x = Fecha, y = Predicciones.pred,
                       ymin = Predicciones.pred - Predicciones.se,
                       ymax = Predicciones.pred + Predicciones.se)) +
  geom_errorbar() +
  geom_point())