Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
restrepo
GitHub Repository: restrepo/ComputationalMethods
Path: blob/master/projects/Proyecto_2018_1_1216730080.ipynb
934 views
Kernel: Python 3
%pylab inline from scipy import integrate
Populating the interactive namespace from numpy and matplotlib

Modelo de propagación de una enfermedad.

El siguiente modelo pretende dar una descripción de la propagación de una enfermedad analizando diferentes situaciones con el objetivo de identificar las mejores opciones a la hora de enfrentarse a una situación real de epidemia; es importante recordar que este modelo es una idealización,un tratamiento matemético de la situación, no obstante cuenta con relaciones encontradas en el comportamiento de enfermedades reales.

Lo primero es definir quienes intervienen en el modelo, estos agentes son:

  • Susceptibles (S)[personas no enfermas].

  • Contagiados (I).

  • Muertos (D).

A continuación se presentan tres situaciones importantes.

Modelo simple(S).

Como primer acercamiento, se plantea un modelo en el cual la enfermedad no tiene cura y no hay natalidad. βSI\beta SI representa el número de personas sanas que se contagia por unidad de tiempo, δS\delta S y δI\delta I es el número de fallecidos por causas naturales y por la enfermedad por unidad de tiempo respectivemente.

S=βSIδSS'=-\beta SI -\delta S

I=βSIδII'=\beta SI-\delta I

D=δS+δID'=\delta S+\delta I

Definiendo valores para los parámetros:

β=0.09 c=0.1 δ=0.001 η=0.006

Dando condiciones iniciales y el intervalo de tiempo que se quiere observar.

y0=(100000,0,0)
t=np.linspace(0,100)
def dU1_dt(y,t,β,c,δ,η): S,I,D=y return [-β*S*I-δ*S,β*S*I-δ*I,δ*S+δ*I]
U1=integrate.odeint(dU1_dt,y0,t,args=(β,c,δ,η))
plt.plot(t,U1[:,0],label='Susceptibles') plt.plot(t,U1[:,2],label='Desesos') plt.plot(t,U1[:,1],label='Infectados') plt.xlabel('Tiempo[u]') plt.ylabel('Población') plt.legend() plt.grid()
Image in a Jupyter notebook

Modelo con cura(SC).

Suponemos que:

  • los susceptibles pueden contagiarse por contacto con contagiados y muertos por la enfermedad(parámetro η\eta).

  • los contagiados tienen un cierto periodo de tiempo antes de morir.

  • existe una cura que vuelve susceptibles a los contagiados.(parámetro cc)

  • no hay natalidad.

así el modelo dado por:

S=βSIδS+cIηDS'=-\beta SI -\delta S+cI-\eta D

I=βSIδI+ηDcII'=\beta SI-\delta I+\eta D-cI

D=δS+δID'=\delta S+\delta I

Para resolver el sistema de ecuaciones diferenciales

def dU_dt(y,t,β,c,δ,η): S,I,D=y return [-β*S*I-δ*S+c*I-η*D,β*S*I-δ*I+η*D-c*I,δ*S+δ*I]
U=integrate.odeint(dU_dt,y0,t,args=(β,c,δ,η))
plt.plot(t,U[:,0],label='Susceptibles') plt.plot(t,U[:,2],label='Desesos') plt.plot(t,U[:,1],label='Infectados') plt.xlabel('Tiempo[u]') plt.ylabel('Población') plt.legend() plt.grid()
Image in a Jupyter notebook

Modelo con natalidad(SCN).

Complementando ahora con una tasa de natalidad constante, asumiendo esta como l=1000l=1000 personas por unidad de tiempo, cambiamos SS' por

S=lβSIδS+cIηDS'=l-\beta SI -\delta S+cI-\eta D

l=1000
def dU2_dt(y,t,β,c,δ,η): S,I,D=y return [l-β*S*I-δ*S+c*I-η*D,β*S*I-δ*I+η*D-c*I,δ*S+δ*I]
U2=integrate.odeint(dU2_dt,y0,t,args=(β,c,δ,η))
plt.plot(t,U2[:,0],label='Susceptibles') plt.plot(t,U2[:,2],label='Desesos') plt.plot(t,U2[:,1],label='Infectados') plt.xlabel('Tiempo[u]') plt.ylabel('Población') plt.legend() plt.grid()
Image in a Jupyter notebook

Podemos notar que el hecho de que agregar natalidad al modelo provoca un crecimiento en la cantidad de infectados, en lugar de redurse luego de un pico en los otros modelos. Por tal razón sería interesante ver qué ocurre si se llevara a cbo un control sobre los infectados y los muertos.

Modelo de control(SCN2).

Si hay un estricto control sobre los infectados(β0\beta \longrightarrow 0) y los fallecidos(dado por λ\lambda) se tiene que:

S=lβSIδS+cIηDS'=l-\beta SI -\delta S+cI-\eta D

I=βSIδI+ηDcII'=\beta SI-\delta I+\eta D-cI

D=δS+δIλDD'=\delta S+\delta I- \lambda D

β2=0.00001 λ=0.9
def dU3_dt(y,t,β,c,δ,η,λ): S,I,D=y return [l-β*S*I-δ*S+c*I-η*D,β*S*I-δ*I+η*D-c*I,δ*S+δ*I-λ*D]
U3=integrate.odeint(dU3_dt,y0,t,args=(β2,c,δ,η,λ))
plt.plot(t,U3[:,0],label='Susceptibles') plt.plot(t,U3[:,2],label='Desesos') plt.plot(t,U3[:,1],label='Infectados') plt.xlabel('Tiempo[u]') plt.ylabel('Población') plt.legend() plt.grid()
Image in a Jupyter notebook

Conclusiones.

Como se vio en el primer modelo hay un aparente control de la enfermedad, debido tal vez a la simleza del mismo; por el contrario en los modelos SCSC Y SCNSCN hay una rápida proliferación de la enfermedad a la vez que un rápido descenso de la población sana, a pesar de la natalidad en SCNSCN. Puede comprobar que a medida que β0\beta \longrightarrow 0, la cantidad de personas no infectadas aumenta y se estabiliza, mientras se retrasa el crecimiento de personas infectadas; esto quiere decir que la mejor manera de enfrentar una enfermedad, más que una cura y una natalidad grande, requiere algo que haga inmunes a las personas, además de un control fuerte sobre los factores de contagio.