Un modelo simple para predecir los casos diarios de COVID El Salvador

Seguramente, en los próximos días, habrá un evento del que quieras participar. Ya sea con muchas o pocas personas, siempre habrá un riesgo de contagio de COVID-19. De forma general, cuando los casos van en aumento es mala señal y deberías minimizar tu exposición.

A continuación se presenta un sencillo modelo predictivo de la tendencia de casos díarios de COVID-19 en El Salvador. Por favor, tome en cuenta que esta predicción asume que los casos nuevos por día pueden ser modelados como una seríe de tiempo. Siempre siga todas las medidas de bioseguridad y los lineamientos del ministerio de salud.

Los datos utilizados en este análisis han sido obtenidos de la página de la organización mundial de la salud. Puede accederlos haciendo clic en este vínculo: https://covid19.who.int/info

Los datos de WHO se presentan en panel de datos para todos los países miembros, es decir, observaciones de todos los países en el tiempo. El primer paso consiste en filtrar los datos para tener un subgrupo con únicamente las observaciones de El Salvador. A continuación se prosenta el código de importación, filtrado y un gráfico interactivo de la evolución de los casos diarios.

covid.data <- fread("https://covid19.who.int/WHO-COVID-19-global-data.csv")
covid.esa.nr <- covid.data %>%
  filter(Country == "El Salvador")
plot_ly(data = covid.esa.nr, x = ~Date_reported, y = ~New_cases) %>%
    add_lines()

Estimación del modelo

El objetivo es estimar un modelo sencillo, así que se estimará y evaluará un modelo autoregresivo y un modelo de media móvil. Debido a que en los días que El Salvador no reporta datos estos se expresan como ceros en la base de datos, se hizo un filtrado adicional para incluir únicamente días con valores mayores a cero. Adicionalmente, únicamente se contamplan datos del mes en curso y el anterior.

Al utilizar los criterios AIC y BIC, se puede observar que ambos modelos son muy similares, así que se decide por el modelo auto-regresivo para darle un poco más de tendencia a la predicción.

datos <- covid.esa.nr %>% 
  filter(Date_reported > "2021-11-30") %>%
  filter(New_cases > 0)
modelo.ar <- arima(datos$New_cases, order = c(1,0,0))
modelo.ma <- arima(datos$New_cases, order = c(0,0,1))   
AIC(modelo.ar)
## [1] 350.1033
AIC(modelo.ma)
## [1] 349.1393
BIC(modelo.ar)
## [1] 353.0905
BIC(modelo.ma)
## [1] 352.1265
modelo.ar
## 
## Call:
## arima(x = datos$New_cases, order = c(1, 0, 0))
## 
## Coefficients:
##          ar1  intercept
##       0.4392   795.1043
## s.e.  0.1929   503.7677
## 
## sigma^2 estimated as 1717824:  log likelihood = -172.05,  aic = 350.1

Predicción

El modelo que se usa en la predicción es auto-regrivo con un horizonte de 10 días.

prediccion <- predict(modelo.ar, n.ahead = 10)
prediccion$pred
## Time Series:
## Start = 21 
## End = 30 
## Frequency = 1 
##  [1] 864.8991 825.7616 808.5705 801.0193 797.7025 796.2456 795.6056 795.3245
##  [9] 795.2010 795.1468
ar.pred <- prediccion$pred
ar.pred.se <- prediccion$se
ts.plot(datos$New_cases, xlim = c(1,30))
points(ar.pred, type = "l", col = 2)
points(ar.pred - 2*ar.pred.se, type = "l", col = 2, lty = 2)
points(ar.pred + 2*ar.pred.se, type = "l", col = 2, lty = 2)