"- Uncluir incertidumbres en el modelo, correr 1000 escenarios. \n",
"- Incluir incertidumbres en el modelo, simular 1000 escenarios. \n",
"- En el dia 120, cuantas personas se han contagiado? Incluir intervalos de confianza del 95%\n",
"- Según este modelo: ¿cuantas personas estiman que se hayan contagiado en el dia 120 de la epidemia? Incluir intervalos de confianza del 95% en el resultado.\n",
"- Grafico con incertidumbres (algo por el estilo de https://medium.com/data-for-science/epidemic-modeling-103-adding-confidence-intervals-and-stochastic-effects-to-your-covid-19-models-be618b995d6b)\n"
"- Producir una figura del numero de personas infectadas como funcion de tiempo, la figura debe incluir intervalos de confianza (ejemplo de la figura esperada:https://medium.com/data-for-science/epidemic-modeling-103-adding-confidence-intervals-and-stochastic-effects-to-your-covid-19-models-be618b995d6b)\n"
]
]
},
},
{
{
...
@@ -368,12 +368,12 @@
...
@@ -368,12 +368,12 @@
"source": [
"source": [
"# Ejericio 2.\n",
"# Ejericio 2.\n",
"\n",
"\n",
"- El gobierno está evaluando 2 escenarios:\n",
"- Ustedes son asesores cientificos de un gobierno que esta manejando la crisis del Covid19. El gobierno está evaluando implementar uno de estos dos escenarios:\n",
" \n",
" \n",
" - Un lockdown severo que reduzca R0 a cerca de 1 (usar esta distribución np.random.lognormal(-0.1, 0.15, 1000)).\n",
" - Un confinamiento que reduzca R0 a cerca de 1 (el comportamiento del R0 resultante se puede modelar con la distribución np.random.lognormal(-0.1, 0.15, 1000)).\n",
" - Una campaña de seguimiento y localización que reduzca los dias en los que un individuo está en la calle contagioso a 3 +/- 1 dias. \n",
" - Una campaña de seguimiento y localización de casos que reduzca los dias en los que un individuo está en la calle contagioso a 3 +/- 1 dias. \n",
" \n",
" \n",
"Simular ambos escenarios y dar un consejo al gobierno. "
"Simular ambos escenarios con sus debidas incertidumbres y basado en los resultados aconsejar al gobierno qué hacer. "
]
]
},
},
{
{
...
...
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
# Epidemiólogos por un dia: simulando un brote de COVID-19 en una población
# Epidemiólogos por un dia: simulando un brote de COVID-19 en una población
El propósito de esta práctica es demostrar cómo podemos modelar la evolución de una epidemia infecciosa utilizando datos disponibles para COVID-19 en una población susceptible utilizando modelos epidemiológicos estándar. Los parámetros del modelo se toman de una literatura científica en rápida evolución que documenta el brote mundial de COVID-19.
El propósito de esta práctica es demostrar cómo podemos modelar la evolución de una epidemia infecciosa utilizando datos disponibles para COVID-19 en una población susceptible utilizando modelos epidemiológicos estándar. Los parámetros del modelo se toman de una literatura científica en rápida evolución que documenta el brote mundial de COVID-19.
*Este notebook está basado en [CBE30338](https://jckantor.github.io/CBE30338);
*Este notebook está basado en [CBE30338](https://jckantor.github.io/CBE30338);
que puede encontrarse en [Github](https://github.com/jckantor/CBE30338.git). El material ha sido traducido y adaptado para esta práctica*
que puede encontrarse en [Github](https://github.com/jckantor/CBE30338.git). El material ha sido traducido y adaptado para esta práctica*
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
## Modelo SIR para una enfermedad infecciosa
## Modelo SIR para una enfermedad infecciosa
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
El modelo SIR es un modelo compartimentado determinista para la propagación de una enfermedad infecciosa que describe fenómenos clave encontrados en epidemiología. En el modelo SIR, una población se divide en tres grupos que no se solapan y que corresponden a las fases de la enfermedad:
El modelo SIR es un modelo compartimentado determinista para la propagación de una enfermedad infecciosa que describe fenómenos clave encontrados en epidemiología. En el modelo SIR, una población se divide en tres grupos que no se solapan y que corresponden a las fases de la enfermedad:
***Susceptible.** La subpoblación susceptible de adquirir la enfermedad. En el caso del SARS-CoV-2, se supone que todas las personas que no han adquirido previamente la enfermedad son susceptibles de infectarse.
***Susceptible.** La subpoblación susceptible de adquirir la enfermedad. En el caso del SARS-CoV-2, se supone que todas las personas que no han adquirido previamente la enfermedad son susceptibles de infectarse.
***Infectada** La subpoblación que se ha vuelto infecciosa.
***Infectada** La subpoblación que se ha vuelto infecciosa.
***Recuperada** La subpoblación que se ha recuperado de la infección y que se supone que ya no es susceptible de contraer la enfermedad.
***Recuperada** La subpoblación que se ha recuperado de la infección y que se supone que ya no es susceptible de contraer la enfermedad.
Sin tener en cuenta los procesos demográficos de nacimiento y muerte por otras causas, y suponiendo una tasa de mortalidad insignificante debida a la enfermedad infecciosa en cuestión, la progresión de una epidemia puede modelarse mediante procesos de tasal
Sin tener en cuenta los procesos demográficos de nacimiento y muerte por otras causas, y suponiendo una tasa de mortalidad insignificante debida a la enfermedad infecciosa en cuestión, la progresión de una epidemia puede modelarse mediante procesos de tasal
$$\text{Susceptible}
$$\text{Susceptible}
\xrightarrow{\frac{\beta S I}{N}}
\xrightarrow{\frac{\beta S I}{N}}
\text{Infectada}
\text{Infectada}
\xrightarrow{\gamma I}
\xrightarrow{\gamma I}
\text{Recuperada}$$
\text{Recuperada}$$
Los procesos se modelan de la siguiente manera.
Los procesos se modelan de la siguiente manera.
* $\frac{\beta S I}{N}$ es la velocidad con la que la población susceptible se encuentra con la población infectada, dando lugar a la transmisión de la enfermedad. $S$ es el tamaño de la población susceptible. $\beta$ es un parámetro del modelo con unidades de 1/día.
* $\frac{\beta S I}{N}$ es la velocidad con la que la población susceptible se encuentra con la población infectada, dando lugar a la transmisión de la enfermedad. $S$ es el tamaño de la población susceptible. $\beta$ es un parámetro del modelo con unidades de 1/día.
* $\gamma I$ es la velocidad a la que la población infectada se recupera y se hace resistente a nuevas infecciones. $I$ es el tamaño de la población infectada.
* $\gamma I$ es la velocidad a la que la población infectada se recupera y se hace resistente a nuevas infecciones. $I$ es el tamaño de la población infectada.
Un modelo de propagación de una enfermedad infecciosa en una población uniforme viene dado por las ecuaciones deterministas SIR
Un modelo de propagación de una enfermedad infecciosa en una población uniforme viene dado por las ecuaciones deterministas SIR
\begin{align*}
\begin{align*}
\frac{dS}{dt} & = -\frac{\beta S I}{N} \\
\frac{dS}{dt} & = -\frac{\beta S I}{N} \\
\frac{dI}{dt} & = \frac{\beta S I}{N} - \gamma I \\
\frac{dI}{dt} & = \frac{\beta S I}{N} - \gamma I \\
\frac{dR}{dt} & = \gamma I
\frac{dR}{dt} & = \gamma I
\end{align*}
\end{align*}
El modelo se vuelve más genérico al trabajar con fracciones de población en lugar de con recuentos brutos de población. Para ello, definimos
El modelo se vuelve más genérico al trabajar con fracciones de población en lugar de con recuentos brutos de población. Para ello, definimos
\begin{align}
\begin{align}
s = \frac{S}{N} \qquad
s = \frac{S}{N} \qquad
i = \frac{I}{N} \qquad
i = \frac{I}{N} \qquad
r = \frac{R}{N}
r = \frac{R}{N}
\end{align}
\end{align}
Tras la sustitución, se obtiene un sistema de cuatro ecuaciones.
Tras la sustitución, se obtiene un sistema de cuatro ecuaciones.
\begin{align*}
\begin{align*}
\frac{ds}{dt} & = -\beta s i \\
\frac{ds}{dt} & = -\beta s i \\
\frac{di}{dt} & = \beta s i - \gamma i \\
\frac{di}{dt} & = \beta s i - \gamma i \\
\frac{dr}{dt} & = \gamma i
\frac{dr}{dt} & = \gamma i
\end{align*}
\end{align*}
donde $s + i + r = 1$ es invariante.
donde $s + i + r = 1$ es invariante.
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### Propiedades clave del modelo SIR
### Propiedades clave del modelo SIR
* Los parámetros $\beta$ y $\gamma$ tienen unidades de tiempo inverso.
* Los parámetros $\beta$ y $\gamma$ tienen unidades de tiempo inverso.
* $\beta$ es la constante de velocidad asociada a la transmisión de la infección. La constante temporal correspondiente $\tau_{infect} = \frac{1}{\beta}$ corresponde al crecimiento exponencial de nuevas infecciones en una población inicialmente susceptible donde $s=1$.
* $\beta$ es la constante de velocidad asociada a la transmisión de la infección. La constante temporal correspondiente $\tau_{infect} = \frac{1}{\beta}$ corresponde al crecimiento exponencial de nuevas infecciones en una población inicialmente susceptible donde $s=1$.
* $\gamma$ es la tasa de recuperación de las infecciones. La constante de tiempo asociada $\tau_{recovery}=\frac{1}{\gamma}$ es el tiempo medio para recuperarse de una infección.
* $\gamma$ es la tasa de recuperación de las infecciones. La constante de tiempo asociada $\tau_{recovery}=\frac{1}{\gamma}$ es el tiempo medio para recuperarse de una infección.
* La población infecciosa puede crecer sólo si $\beta s > \gamma$, es decir, la tasa de infección es mayor que la tasa de recuperación.
* La población infecciosa puede crecer sólo si $\beta s > \gamma$, es decir, la tasa de infección es mayor que la tasa de recuperación.
* La relación $R_0 = \frac{\beta}{\gamma}$ es el "Número Básico de Reproducción" que describe la transmisibilidad o contagio de una enfermedad infecciosa.
* La relación $R_0 = \frac{\beta}{\gamma}$ es el "Número Básico de Reproducción" que describe la transmisibilidad o contagio de una enfermedad infecciosa.
* $R_0$ es el número medio de personas infectadas por un caso de índice 0 en una población completamente susceptible.
* $R_0$ es el número medio de personas infectadas por un caso de índice 0 en una población completamente susceptible.
* La población infecciosa sólo puede crecer si $R_0 s > 1$. Si $s=1$, entonces $R_0 > 1$ es suficiente para el crecimiento de la población infecciosa.
* La población infecciosa sólo puede crecer si $R_0 s > 1$. Si $s=1$, entonces $R_0 > 1$ es suficiente para el crecimiento de la población infecciosa.
* La población infecciosa disminuye si $s R_0 < 1$ o, lo que es lo mismo, $s < \frac{1}{R_0}$.
* La población infecciosa disminuye si $s R_0 < 1$ o, lo que es lo mismo, $s < \frac{1}{R_0}$.
* La población tiene "inmunidad de rebaño" cuando la fracción de susceptibles es inferior a $\frac{1}{R_0}$.
* La población tiene "inmunidad de rebaño" cuando la fracción de susceptibles es inferior a $\frac{1}{R_0}$.
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### Simulation
### Simulation
El siguiente código Python implementa una simulación del modelo SIR. Los valores de los parámetros se seleccionaron a partir del reciente estudio de Boldog, et al. (2020).
El siguiente código Python implementa una simulación del modelo SIR. Los valores de los parámetros se seleccionaron a partir del reciente estudio de Boldog, et al. (2020).
Los parámetros principales de nuestro modelo son el número básico de reproducción $R0$ y los dias en los cuales una persona es infecciosa $\tau_{infectividad}$. En el mundo real estos valores tiene su incertidumbre y un modelo realista debe incorporarlas.
Los parámetros principales de nuestro modelo son el número básico de reproducción $R0$ y los dias en los cuales una persona es infecciosa $\tau_{infectividad}$. En el mundo real estos valores tiene su incertidumbre y un modelo realista debe incorporarlas.
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### Incertidumbre en número básico de reproducción $R0$
### Incertidumbre en número básico de reproducción $R0$
Podemos usar una distribución log-normal como la PDF que modela nuestro $R0$*
Podemos usar una distribución log-normal como la PDF que modela nuestro $R0$*
, en este caso usaremos los siguientes parametros escogidos ad-hoc para este ejercicio:
, en este caso usaremos los siguientes parametros escogidos ad-hoc para este ejercicio:
*[un artículo al respecto](https://storage.googleapis.com/plos-corpus-prod/10.1371/journal.pone.0238090/1/pone.0238090.pdf?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=wombat-sa%40plos-prod.iam.gserviceaccount.com%2F20210312%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20210312T124607Z&X-Goog-Expires=3600&X-Goog-SignedHeaders=host&X-Goog-Signature=462a1c0824f481effcd20a16384ba40e09281fe08a0c7b8dac72b11b17a14767fdecb9802b3c6132cf2168e09cbcaff2043cf82a2693bcb589ad9d24c3c46176be55aaa2b7ad434d9a63d3fc85a6bfb055063ebd58243c4fc3a7cb63a7a02b75c0563dd1396837e6e9eecadd4d0362b28457e62fef02c91a5e5f4cffb82e60d1932a17d50c0948fba32d7728c3821a6fa3df9307a66852f75672a4300364982c0c67fdc1bab4be874df97f194af527fa98385fd9704a2c82aa7c8f1dcec16d7e41625cfc9be3fad3e9c138c7147096a2268572e687e834263b4f58b12a7b82b9236f5f8e6b75df62efe2b6e5ad90fa9198f295b41425e9f7499fceb4162227f1)
*[un artículo al respecto](https://storage.googleapis.com/plos-corpus-prod/10.1371/journal.pone.0238090/1/pone.0238090.pdf?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=wombat-sa%40plos-prod.iam.gserviceaccount.com%2F20210312%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20210312T124607Z&X-Goog-Expires=3600&X-Goog-SignedHeaders=host&X-Goog-Signature=462a1c0824f481effcd20a16384ba40e09281fe08a0c7b8dac72b11b17a14767fdecb9802b3c6132cf2168e09cbcaff2043cf82a2693bcb589ad9d24c3c46176be55aaa2b7ad434d9a63d3fc85a6bfb055063ebd58243c4fc3a7cb63a7a02b75c0563dd1396837e6e9eecadd4d0362b28457e62fef02c91a5e5f4cffb82e60d1932a17d50c0948fba32d7728c3821a6fa3df9307a66852f75672a4300364982c0c67fdc1bab4be874df97f194af527fa98385fd9704a2c82aa7c8f1dcec16d7e41625cfc9be3fad3e9c138c7147096a2268572e687e834263b4f58b12a7b82b9236f5f8e6b75df62efe2b6e5ad90fa9198f295b41425e9f7499fceb4162227f1)
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
s=np.random.lognormal(1.1,0.21,1000)
s=np.random.lognormal(1.1,0.21,1000)
plt.hist(s,density=True,bins=100)
plt.hist(s,density=True,bins=100)
plt.ylabel('Probabilidad')
plt.ylabel('Probabilidad')
plt.xlabel('R0');
plt.xlabel('R0');
```
```
%% Output
%% Output
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### Incertidumbre en los dias de infectividad.
### Incertidumbre en los dias de infectividad.
Supongamos que lo dias que un individuo es contagioso está en el orden de 8.7 +/- 3 dias. Mas detalles sobre estudios en este tema [aqui](https://www.bdi.ox.ac.uk/news/the-timing-of-covid-19-transmission).
Supongamos que lo dias que un individuo es contagioso está en el orden de 8.7 +/- 3 dias. Mas detalles sobre estudios en este tema [aqui](https://www.bdi.ox.ac.uk/news/the-timing-of-covid-19-transmission).
Por simplicidad, modelaremos esta incertidumbre con una distribución normal que refleje el rango de 8.7 +/- 3 dias.
Por simplicidad, modelaremos esta incertidumbre con una distribución normal que refleje el rango de 8.7 +/- 3 dias.
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
s=np.random.normal(8.7,3,1000)
s=np.random.normal(8.7,3,1000)
plt.hist(s,density=True,bins=100)
plt.hist(s,density=True,bins=100)
plt.ylabel('Probabilidad')
plt.ylabel('Probabilidad')
plt.xlabel('Dias contagioso');
plt.xlabel('Dias contagioso');
```
```
%% Output
%% Output
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
# Ejercicio 1.
# Ejercicio 1.
-Uncluir incertidumbres en el modelo, correr 1000 escenarios.
-Incluir incertidumbres en el modelo, simular 1000 escenarios.
-En el dia 120, cuantas personas se han contagiado? Incluir intervalos de confianza del 95%
-Según este modelo: ¿cuantas personas estiman que se hayan contagiado en el dia 120 de la epidemia? Incluir intervalos de confianza del 95% en el resultado.
-Grafico con incertidumbres (algo por el estilo de https://medium.com/data-for-science/epidemic-modeling-103-adding-confidence-intervals-and-stochastic-effects-to-your-covid-19-models-be618b995d6b)
-Producir una figura del numero de personas infectadas como funcion de tiempo, la figura debe incluir intervalos de confianza (ejemplo de la figura esperada:https://medium.com/data-for-science/epidemic-modeling-103-adding-confidence-intervals-and-stochastic-effects-to-your-covid-19-models-be618b995d6b)
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
# Ejericio 2.
# Ejericio 2.
-El gobierno está evaluando 2 escenarios:
-Ustedes son asesores cientificos de un gobierno que esta manejando la crisis del Covid19. El gobierno está evaluando implementar uno de estos dos escenarios:
- Un lockdown severo que reduzca R0 a cerca de 1 (usar esta distribución np.random.lognormal(-0.1, 0.15, 1000)).
- Un confinamiento que reduzca R0 a cerca de 1 (el comportamiento del R0 resultante se puede modelar con la distribución np.random.lognormal(-0.1, 0.15, 1000)).
- Una campaña de seguimiento y localización que reduzca los dias en los que un individuo está en la calle contagioso a 3 +/- 1 dias.
- Una campaña de seguimiento y localización de casos que reduzca los dias en los que un individuo está en la calle contagioso a 3 +/- 1 dias.
Simular ambos escenarios y dar un consejo al gobierno.
Simular ambos escenarios con sus debidas incertidumbres y basado en los resultados aconsejar al gobierno qué hacer.