Importando datos
- Función read.csv para valores separados por comas.
- Función read.csv2 para valores separados por punto y comas.
- Función read.table para valores separados por espacios.
- Función read_xlxs del paquete readxl para archivos de excel.
datos <- read.csv(file = "Datos/train.csv", encoding = "UTF-8")
head(datos, n = 10)
Depuración de datos
- El operador de tubería se obtiene con ctrl+shift+m
- Edición de nombres con la función rename del paquete dplyr
- Seleccionando todas las columnas a excepción de Id, a través de la función select del paquete dplyr
- Editando la variable province. Con las funciones mutate e if_else del paquete dplyr se recodifica el nivel vacío (“”) por “no registra”
- Coerción de la variable fecha de tipo factor a tipo Date. Con la función as.Date() se convierte a tipo fecha.
- Generando nuevas variables:
- Semana del año. Es necesario cargar la biblioteca lubridate que contiene la función week()
- Mes
- Día de la semana
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
- Filtrando datos solo para Colombia a través de la función filter del paquete dplyr
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())