lunes, 13 de abril de 2020

Confinados al éxito

Hay un fenomeno físico muy cotidiano que me resulta sorprendente: las transiciones de fase. Tenemos agua en un vaso, líquida a temperatura ambiente, la ponemos en el freezer (congelador) bajará su temperatura y se congelará. El agua pasa de líquida a sólida sin ponerse cada vez más viscosa (como lo haría un helado). En la transición, a 0 C (Celsius o grados centígrado) conviven las dos fases. Tan abrupta y clara son estas transiciones que se utilizan para definir la escala de temperatura (Celsius). Lo mismo podríamos decir del pasaje de líquido a gas.

Es muy sorprendente que el agua sea líquida a temperatura ambiente, un sólido muy duro (hielo) por debajo de los 0 C y la molécula de agua sea siempre la misma. Según sea la temperatura emerge un comportamiento colectivo u otro, muy distintos entre sí. No es de extrañar, la temperatura es la energía media de las moléculas. ¡Lo continuo se discretiza!

Los primeros días de confinamiento intuí que la evolución de la epidemia tendría un comportamiento similar a una transición de fase.

Percolar.

Para ver un primer ejemplo de este tipo de transiciones hagamos una pequeña simulación. Un modelo de juguete un tanto académico. Supongamos que tenemos un cristal bidimensional, una grilla de moléculas o mejor celdas. Según algún parámetro estas celdas tienen cierta probabilidad de ser conductores o no (de algún fluido). Nos interesa saber cuál es la probabilidad de que ese fluido pueda pasar a través del cristal (percolar).

Es una simulación muy simple. Armamos una grilla, por ejemplo de 40x20. Elegimos una probabilidad, por ejemplo 0.4, y sorteamos cada una de las celdas si conducen o no. Nos queda una imagen como la siguiente:


Luego vemos si hay un camino desde un extremo (inferior) a otro (superior). Vemos que en el caso de la figura, no hay. Si hubieramos elegido otra probabilidad, más elevada, por ejemplo 0.6; podríamos obtener la figura:


y vemos que sí hay un camino (en rojo). Podemos intuir que si la probabilidad de que una celda conduzca es baja será baja la probabilidad de percolar; y si la probabilidad de que la celda conduzca es alta será alta la probabilidad de percolar. Entre medio habrá valores que a veces percola y a veces no. Entonces, hacemos un gráfico. Para cada probabilidad de la celda, de 0 a 1, ejecutamos muchas veces (5000) nuestra simulación, y contamos cuantas veces percola y cuantas no. De este modo determinamos la probabilidad de que todo el cristal conduzca en función de la probabilidad de que lo haga una celda. Obtenemos un gráfico como el siguiente:
Probabilidad de que el cristal conduzca en función de que lo haga una celda. Cada punto es el promedio de 5000 simulaciones.

Vemos que, entre 0.5 y 0.7, se produce un cambio abrupto... similar a una transición de fase. En cierto rango, un pequeño cambio de una propiedad de la celda genera un gran cambio en una propiedad de todo el cristal. Con esto en mente, cumpliendo los primeros días de aislamiento, intuí que la propagación de la pandemia tendría un comportamiento similar.

Pademia de juguete, modelo.

Hagamos un modelo de juguete de pandemia. Voy resaltando en negrita los parámetros de la simulación.

Para comenzar supongamos que las personas tienen una ubicación geográfica. (Puede ser que esto no sea necesario pero no considerarlo inicialmente me pareció que mi modelo sería muy de juguete). Tenemos un mapa de 2x1 (dimensiones y topologia del mapa), cada persona tiene una posición fija. Para eliminar efectos de borde unimos arriba con bajo e izquierda con derecha (nos queda como un toro (anillo)). Ubicamos al azar en ese mapa muchas personas (1000) (cantidad de personas).

Las personas pueden estar enfermas o sanas. Se podría complejizar considerando un período de incubación, de contagio, etc. Insisto, este es un modelo de juguete no realista.

Esta vez la simulación evolucionará en el tiempo. En cada período de tiempo (iteración) las personas se enferman, se sanan, contagian, etc.
Las personas tendrán contactos entre sí y en cada contacto habrá una probabilidad de contagio (desde luego si uno está enfermo y el otro sano).
Las personas harán una cantidad de contactos por unidad de tiempo (por iteración). Este es el parámetro que me interesa estudiar. Intuyo que la propagación de la epidemia depende fuertemente de este parámetro. El contacto es más probable con personas cercanas que lejanas.

Hay muchas maneras de controlar e ir variando la cantidad de contactos. Hice lo siguiente. Sorteé dos personas de mi población (variando entre 0 y 25000 por iteración). Según fuera la distancia entre esas dos personas (recuerden que tenían una posición en el mapa) hay una probabilidad de que el contacto se produzca efectivamente. Elegí una distribución normal con desviación tipica = 0.3, (media = 0, desde luego). Dado que es indirecto el modo de producir los contactos, medí a posteriori los contactos efectivos. (Luego del contacto está la probabilidad de que se produzca el contagio).

Otro parámetro es la duración de la infección, sería para nosotros durante cuanto tiempo contagia. Este parámetro definirá la escala de tiempo, sin problemas podemos elegirlo igual a 1 iteración. O sea, en una iteración está sano y se contagia, la siguiente está infectado y contagia, la siguiente está sano nuevamente.

Por último agregué la condición, típica en muchas enfermedades, que una vez curada la persona no vuelve a enfermarse. Para el coronavirus no está todavía claro que sea así. Esta condición no se da en una transición de fase, las moléculas no tienen memoria (aquí nos diferenciamos mucho de las transiciones de fase).

Una simulación consta de los siguientes pasos:
  • Ubicar a las personas en el mapa.
  • Marcar como infectados a una pequeña cantidad (1%).
  • Iterar hasta que no haya más infectados:
    • Producir los contactos, para cada uno: si uno está enfermo y el otro sano (y no había estado enfermo) determinar si se contagia o no (si se contagia estará infectado en la próxima iteración).
    • Sanar a los que estaban infectados e infectar a los que se contagiaron.

Todo el modelo tiene que depender de casi un único parámetro que es el producto: duración de la infección x probabilidad de contagio x contactos efectivos. Eso es a cuántas personas contagia cada enfermo (Ver PostData sobre el R0). Variar los tres no aporta mucho. En la práctica la probabilidad de contagio es una característica intrínseca del virus, no se puede cambiar. (Podemos sí, claro, mejorar nuestros hábitos lavandonos periódicamente las manos, no tocandonos la cara, etc. y de hecho bajarla). Elegí una probablidad de contagio de 0.5 y la dejé fija.

El parámetro duración de la infección define la escala de tiempos, deberíamos decir cuántas iteraciones. Como el otro parámetro, contactos efectivos, también es por unidad de tiempo, podemos elegir sin problemas la duración de la infección = 1 iteración (es más fácil de implementar).

Resultados.

Corremos la simulación una vez y obtenemos la curva, maléfica: cantidad de infectados vs. unidad de tiempo.
Cantidad de infectados por unidad de tiempo (iteración) para una simulación típica. En este caso para 13000 posibles contactos lo que dió 3.33 contactos efectivos.


De cada simulación obtendremos una curva como la anterior, de la cual nos interesa saber:
  • Cuántos infectados hubo en total  (superficie bajo la curva).
  • Cuántos infectados hubo en el máximo (esta es la medida del colapso del sistema de salud).

Repetimos miles de veces la simulación variando el parámetro que regula la cantidad de contactos y obtenemos (cada simulación es un puntito en el siguiente gráfico):
Cantidad total de infectados (rojo) y cantidad máxima de infectados (azul) en función de la cantidad de contactos efectivos.

(En este gráfico he variado la cantidad de posibles contactos de 0 a 25000 de uno en uno e hice una simulación por cada valor. Obteniendo estos gráficos de densidades, que me gustan especialmente. Una alternativa, tal vez más prolija, es variar la cantidad de posibles contactos de 0 a 25000 de 1000 en 1000 y por cada valor hacer 1000 simulaciones, luego promediar los valores).

En el gráfico se ven la cantidad total de infectados (en rojo) y la cantidad máxima de infectados (en azul), ambos porcentajes, en función de los contactos efectivos. Vemos, que apartir de 1.5 contactos efectivos la cantidad de infectados totales comienza a crecer mucho más rápido. Lo mismo ocurre con la cantidad máxima de infectados superando los 2 contactos efectivos, que empieza a crecer linealmente.

Vemos también que superados los 3 contactos efectivos la epidemia se detiene porque la mayoría de la población se ha infectado, o sea porque entra en juego la condición que una persona no se infecte dos veces.

Conclusión.

Si bien este modelo no es para nada realista en probabilidades de contagio, tiempos, etc. muestra la importancia del confinamiento. Hay un valor límite, que desconocemos, a partir del cual si todos hacemos un contacto de más podemos provocar el desastre (por ejemplo, hacer que la cantidad de infectados total suba considerablemente). En estos días, como se dice en el fútbol, no hay que hacer una jugada de más.

PD: Varios días después de esta simulación publicó La Nación (Coronavirus en la Argentina: R0, el número que tiene en vilo a Fernández, Rodríguez Larreta y Kicillof) una nota sobre el R0 (número reproductivo básico), que mide "a cuántas personas en promedio contagia un infectado". Para esta simulación estaba dado por el producto: duración de la infección x probabilidad de contagio x contactos efectivos. La cantidad total de infectados y el pico de la curva dependen fuertemente de ese valor.