knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
## ── Attaching packages ───────────────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.0 ✓ purrr 0.3.4
## ✓ tibble 2.1.3 ✓ dplyr 0.8.5
## ✓ tidyr 1.0.2 ✓ stringr 1.4.0
## ✓ readr 1.3.1 ✓ forcats 0.5.0
## Warning: package 'purrr' was built under R version 3.6.2
## ── Conflicts ──────────────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(readxl)
library(lubridate)
## Warning: package 'lubridate' was built under R version 3.6.2
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:dplyr':
##
## intersect, setdiff, union
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(ggpubr)
## Loading required package: magrittr
##
## Attaching package: 'magrittr'
## The following object is masked from 'package:purrr':
##
## set_names
## The following object is masked from 'package:tidyr':
##
## extract
library(ggdark)
library(knitr)
fuente de los datos: https://data.europa.eu/euodp/en/data/dataset/covid-19-coronavirus-data/resource/55e8f966-d5c8-438e-85bc-c7a5a26f4863
• Transformamos tipos y nombres de variables • Seleccionamos solo China, Italia y España • Calculamos el acumulado de infectados
Vamos a analizar como está la situación por Pais
| Pais | Infectados |
|---|---|
| China | 81238 |
| Italy | 35713 |
| Iran | 17361 |
| Spain | 13716 |
| United_States_of_America | 9415 |
| France | 9134 |
| South_Korea | 8565 |
| Germany | 8198 |
| Switzerland | 3010 |
| United_Kingdom | 2630 |
Claramente China e Italia son los mas afectados
España segun este dataset se sitúa 6 en el mundo por detras de Francia
El modelo epidemiológio predice que el número de infectados crecerá de forma exponencial hasta llegar al pico.
En ese momento el ritmo de crecimiento comenzará a decaer y el acumulado de infectados pasará de una forma exponencial a una sigmoidal.
Dado que China se considera el primer país que ha pasado el virus, vamos a estudiar su modelo en primer lugar.
Comenzamos por explorar gráficamente su ciclo en cuánto a nuevos infectados por dia:
data %>%
filter(Pais == 'China', Fecha > '2020-01-23') %>%
ggplot(aes(x=factor(Fecha), y = Infec_New)) +
geom_col(fill = 'orange', color= 'red') +
scale_y_continuous(limits = c(0,4100)) +
dark_theme_minimal() +
theme(axis.text.x = element_text(angle = 90,
size = 8))
## Inverted geom defaults of fill and color/colour.
## To change them back, use invert_geom_defaults().
## Warning: Removed 2 rows containing missing values (position_stack).
En el gráfico vemos el número de infectados en cada uno de los días, la curva empezó a crecer a partir del 24 de enero
Conclusiones:
• Con las medidas tomadas por China la fase de crecimiento exponencial duró menos de 2 semanas • Tras ellas se cumplen las predicciones de la desaceleración en cuanto a nuevos casos de infectados. • Tras alcanzar el pico y el cambio de tendencia en el factor de crecimiento, China tardó aprox un mes en decir que “ha superado la crisis”
Vamos a ver la forma del acumulado de casos.
data %>%
filter(Pais == 'China', Fecha > '2020-01-23') %>%
ggplot(aes(x=factor(Fecha), y = Infec_acu)) +
geom_point(color ='orange') +
dark_theme_minimal() +
theme(axis.text.x = element_text(angle = 90,
size = 8))
De nuevo las predicciones se cumplen del modelo epidemiológico.
Queríamos buscar esa forma de “S” donde la curva se aplana.Los puntos en blanco es posible que no haya datos porque se cambiaria el sistema de conteo o algo parecido.
• Por lo que hemos podido comprobar la clave es conseguir que el factor de crecimiento comienze a bajar de 1 para que se produzca el cambio de tendencia • En ese momento todavía debemos esperar 4-5 semanas para tener la situación bajo control.
Analizamos su gráfico de nuevos casos por día:
Está todavía claramente en la fase de crecimiento. (Ignoramos de momento el dato del día 15 porque parece muy raro)
Vamos a ver su gráfico de acumulados para poder mejor la tendencia de su curva.
Se confirma de nuevo la forma exponencial y la forma de crecimiento.
Por ahora no podemos aprender nada de Italia, lleva 15 dias de crecimiento continuo y sigue el modelo previsto.
Claramente estamos en fase de crecimiento y solo podemos esperar que siga subiendo.
Si los datos se ajustan bien al modelo, podemos crear el modelo y si lo podemos crear podemos extrapolarlo y podemos saber si las medidas son necesarias o no.
Viendo y sabiendo que vamos a seguir empeorando, la pregunta es:
Vamos a intentar ajustar un modelo para predecirlo.
La estrategia de modelización va a ser linealizar los datos mediante una escala logarítmica, para después aplicar un algoritmo lineal.
Transformando el acumulado de infectados a escala logarítmica de base 10.
## `geom_smooth()` using formula 'y ~ x'
Lo que hago con el log10 es linealizarme los datos.
Al superponer una recta de regresión sobre esta escala vemos que se ajusta bastante bien y que el R2 es del 99%
Vamos a crear el modelo para conocer el factor de crecimiento.
Primero creamos una variable que sea el acumulado de infectados pero en escala de logaritmos base 10. (esto quiere decir que cada vez que esta escala aumente en 1, como vemos en el gráfico, quiere decir que se multiplica por 10)
| Fecha | Infec_New | Infec_acu | Log_Infec_acu |
|---|---|---|---|
| 2020-02-26 | 4 | 7 | 0.845098 |
| 2020-02-27 | 5 | 12 | 1.079181 |
| 2020-02-28 | 13 | 25 | 1.397940 |
| 2020-02-29 | 9 | 34 | 1.531479 |
| 2020-03-01 | 32 | 66 | 1.819544 |
| 2020-03-02 | 17 | 83 | 1.919078 |
| 2020-03-03 | 31 | 114 | 2.056905 |
| 2020-03-04 | 37 | 151 | 2.178977 |
| 2020-03-05 | 49 | 200 | 2.301030 |
| 2020-03-06 | 61 | 261 | 2.416641 |
| 2020-03-07 | 113 | 374 | 2.572872 |
| 2020-03-08 | 56 | 430 | 2.633469 |
| 2020-03-09 | 159 | 589 | 2.770115 |
| 2020-03-10 | 615 | 1204 | 3.080627 |
| 2020-03-11 | 435 | 1639 | 3.214579 |
| 2020-03-12 | 501 | 2140 | 3.330414 |
| 2020-03-13 | 864 | 3004 | 3.477700 |
| 2020-03-14 | 1227 | 4231 | 3.626443 |
| 2020-03-15 | 1522 | 5753 | 3.759894 |
| 2020-03-16 | 2000 | 7753 | 3.889470 |
| 2020-03-17 | 1438 | 9191 | 3.963363 |
| 2020-03-18 | 1987 | 11178 | 4.048364 |
| 2020-03-19 | 2538 | 13716 | 4.137227 |
De esta manera estamos ajustando un modelo lineal y también para:
Esto ya nos permite algunos análisis interesantes. Ya que si miramos esta escala sube de entero nos dice el número de días necesario para que el número de infectados se multiplique por 10.
Por ejemplo, el valor 1 está aprox en el día 2020-02-27, mientras que el valor 2 está en el 2020-03-03.
Es decir, el número de Infectados se ha multiplicado por 10 en aprox 1 semana.
El valor 3 se alcanza el 2020-03-10, de nuevo 1 semana después.
Es decir, si no hacemos nada podemos esperar que el número de infectados se multiplique por 10 con cada semana que pase.
Por ello el 17 de marzo, estaríamos esperando 12.000 infectados y de no hacer nada podríamos acabar dos semanas después con 1.200.000 infectados.
Entrenamos una regresión lineal sobre los datos transformados
##
## Call:
## lm(formula = Log_Infec_acu ~ Fecha, data = spain)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.24774 -0.05602 0.02435 0.05896 0.14306
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.672e+03 5.716e+01 -46.74 <2e-16 ***
## Fecha 1.459e-01 3.118e-03 46.79 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.09921 on 21 degrees of freedom
## Multiple R-squared: 0.9905, Adjusted R-squared: 0.99
## F-statistic: 2189 on 1 and 21 DF, p-value: < 2.2e-16
Lo que obtenemos básicamente es que la variable FECHA es muy significativa (***) y que el R2 también ajusta muy bien (99%)
Ahora vamos a utilizar el coeficiente para estimar el factor de crecimiento
## El factor de crecimiento en España es de: 1.399295 Es decir, cada dia se detecta un 39.92951 % más de casos que el día anterior
Tenemos que el factor de crecimiento es 1.40, lo que quiere decir que cada dia se detectan un 40% de casos más que el dia anterior. Mientras este número sea mayor que 1, el crecimiento será exponencial. Cuando se aproxime a 1 querrá decir que estaremos en una fase contención.
Vamos a contrastar las predicciones del modelo con los datos reales (deberíamos comparar la predicción con otros datos reales que no haya visto el modelo, pero en este caso con los pocos datos que disponemos solo podemos hacerlo así)
Podemos decir que ajusta bastante bien, aunque a la cola sobreestima bastante. Vamos a predecir que pasaría dentro de 15 días si no se tomaran medidas
| Fecha | Infec_acu | Pred |
|---|---|---|
| 2020-02-26 | 7 | 12.38345 |
| 2020-02-27 | 12 | 17.32810 |
| 2020-02-28 | 25 | 24.24712 |
| 2020-02-29 | 34 | 33.92887 |
| 2020-03-01 | 66 | 47.47651 |
| 2020-03-02 | 83 | 66.43364 |
| 2020-03-03 | 114 | 92.96026 |
| 2020-03-04 | 151 | 130.07884 |
| 2020-03-05 | 200 | 182.01868 |
| 2020-03-06 | 261 | 254.69783 |
| 2020-03-07 | 374 | 356.39742 |
| 2020-03-08 | 430 | 498.70515 |
| 2020-03-09 | 589 | 697.83565 |
| 2020-03-10 | 1204 | 976.47797 |
| 2020-03-11 | 1639 | 1366.38080 |
| 2020-03-12 | 2140 | 1911.96991 |
| 2020-03-13 | 3004 | 2675.41004 |
| 2020-03-14 | 4231 | 3743.68805 |
| 2020-03-15 | 5753 | 5238.52419 |
| 2020-03-16 | 7753 | 7330.24101 |
| 2020-03-17 | 9191 | 10257.17003 |
| 2020-03-18 | 11178 | 14352.80733 |
| 2020-03-19 | 13716 | 20083.81237 |
| 2020-03-15 | NA | 5238.52419 |
| 2020-03-16 | NA | 7330.24101 |
| 2020-03-17 | NA | 10257.17003 |
| 2020-03-18 | NA | 14352.80733 |
| 2020-03-19 | NA | 20083.81237 |
| 2020-03-20 | NA | 28103.17940 |
| 2020-03-21 | NA | 39324.64006 |
| 2020-03-22 | NA | 55026.77451 |
| 2020-03-23 | NA | 76998.69366 |
| 2020-03-24 | NA | 107743.89153 |
| 2020-03-25 | NA | 150765.49499 |
Vamos a verlo gráficamente
spain_pred %>%
ggplot(aes(x= Fecha)) +
geom_line(aes(y= Pred), color = 'red') +
geom_line(aes(y= Infec_acu), color = 'blue', size= 2) +
geom_vline(xintercept = as_date('2020-03-15')) +
dark_theme_minimal() +
scale_x_date(breaks = spain_pred$Fecha) +
theme(axis.text.x = element_text(angle = 90,
size= 6))
## Warning: Removed 7 row(s) containing missing values (geom_path).
Parece que tenemos un “margen” hasta el 22 o 23 de marzo para que las medidas tengan efecto, la línea azul es el día que estamos hoy.
Si las medidas tomadasa no hacen efecto en este tiempo entraríamos en una fase peligrosa y los infectados se dispararían.
** Las medidas han sido proporcionadas o se ha exagerado? **
En mi opinión había que tomar medidas y serias lo antes posible. Es más, al parecer las hemos tomado una semana tarde.
Parece que los modelos epidemiológicos se estan cumpliendo, y esos modelos predicen que de no tomar medidas la expansión que tendríamos en sólo 10 días sería altísima.
** Que medidas?**
Analíticamente hay que controlar dos factores:
Por tanto, todas las medidas que influyan en estos dos factores serán positivas para el objetivo de tener la tasa de crecimiento por debajo de 1.
** En cuanto tiempo se puede detener la expansión? **
En el caso de China, que tomaron medidas bastante pronto la fase de crecimiento duró aprox 10 días.
Peroluego estuvieron otro mes entero hasta que parece que la situación esta bajo control.
** Estamos a tiempo? **
Segun el modelo, el tema se descontrolaría sobre el 22 o 23 de marzo. Según los expertos, el decalaje entre que se toman medidas y se ve su efecto es de 10-15 días.
Así que vamos justos.
** Cuándo podemos empezar a ve run cambio en la curva? **
Teniendo en cuenta todo lo anterior es posible que los próximos días todavía veamos el crecimiento predicho por el modelo y a finales de esta semana comencemos a notar una reducción paulatina en el factor de crecimiento.
** Cuando vamos a recuperar la normalidad? **
Viendo que en China tardaron un mes tras el pico en tener el control, yo diría que podríamos recuperar la normalidad entre el 6 y 8 semanas desde el 16 de marzo.