使用Python实现SI模型,模拟流行病传播过程
SI模型通常适用于预测一些急性传染病的早期流行趋势,这类疾病具有传染性强,基本传染数R0较高,传播途径简单直接,潜伏期短,感染后很快就具有传染性,病程短,不考虑治愈的过程,无免疫保护等特点 因此,SI模型较适用于预测流感、诺如病毒等急性肠道传染病、手足口病、登革热这类传染性强、发病快、恢复也快的疾病的早期流行趋势。当疾病发展到一定阶段,推荐采用SIR、SEIR等更全面的模型进行长期预测。 需要注意的是,模型的选择需要根据流行病学调查资料和疾病特点,权衡模型的复杂度和拟合度。过于简单的模型可能无法充分反映疾病传播过程,而过于复杂的模型又可能存在过拟合的问题。应用模型时,还需考虑到人群的异质性、防控措施的影响等现实因素,动态调整和优化模型。 S为易感者,I为感染者,S仓室以单位时间betaSI的速率向I仓室流动
假设易感人群一旦与感染者接触就会被感染,在一起暴发疫情中,不考虑人口流动和空间分布的影响,疾病传播仅考虑人传人,感染率在疾病流行过程中保持不变,被感染者无法康复。
SI模型是最简单的传染病模型,适用于描述无法治愈的传染病传播过程。
参数 | 含义 |
---|---|
( S ) | 易感者人数:未感染但可能被感染的人群 |
( I ) | 感染者人数:具有传染性并能传播疾病的人群 |
( $\beta$ ) | 传播率:易感者在单位时间内被感染者传染的传染率系数 |
$$
\begin{cases}
dS/dt=-\betaSI \\
dI/dt=\betaSI
\end{cases}
$$
传染性强,基本传染数R0较高。因此更适用于麻疹、流感等传染性很强的疾病。 潜伏期短,感染后很快就具有传染性。潜伏期长的传染病更适合用SEIR等更复杂的模型。 病程短,患者痊愈后会很快从感染者群体中移除。病程短意味着治愈率高,SI模型没有考虑治愈的过程。 无免疫保护,感染后痊愈的人群依然容易被二次感染,即不考虑免疫因素的影响。 传播速度快,在人群中能迅速蔓延开来,且传播途径简单直接。
## 4 代码(R /Python)
#### 4.1 代码
import numpy as np
import matplotlib.pyplot as plt
def si_model(N, I0, beta, num_days):
"""
SI模型模拟
参数:
N: 总人口数
I0: 初始感染人数
beta: 传染率
num_days: 模拟的天数
"""
S = N - I0 # 易感人数
I = I0 # 感染人数
S_arr = [S]
I_arr = [I]
for _ in range(num_days - 1):
new_infections = beta * S * I / N
S -= new_infections
I += new_infections
S_arr.append(S)
I_arr.append(I)
return S_arr, I_arr
# 模拟参数
N = 1000000 # 总人口
I0 = 10 # 初始感染人数
beta = 0.2 # 传染率
num_days = 160 # 模拟160天
# 运行模拟
S, I = si_model(N, I0, beta, num_days)
# 绘制结果
days = range(num_days)
plt.figure(figsize=(12,6))
plt.plot(days, S, label='Susceptible')
plt.plot(days, I, label='Infected')
plt.xlabel('Days')
plt.ylabel('Population')
plt.title('SI Model')
plt.legend()
plt.show()
模拟为,在总人口数为100万的大城市中流感疫情的发生发展,初始感染人口为10人。随着感染的进行,到第40天时,感染人口数急剧升高,在没有任何干预措施的情况下,在第80天时,全人口都被感染。
例:传播过程中加入干预措施、改变仓室流向…
注:保证上述描述不变情况下可自行扩展说明书。