SI模型

使用Python实现SI模型,模拟流行病传播过程


日期

SI模型

1 概述

SI模型通常适用于预测一些急性传染病的早期流行趋势,这类疾病具有传染性强,基本传染数R0较高,传播途径简单直接,潜伏期短,感染后很快就具有传染性,病程短,不考虑治愈的过程,无免疫保护等特点 因此,SI模型较适用于预测流感、诺如病毒等急性肠道传染病、手足口病、登革热这类传染性强、发病快、恢复也快的疾病的早期流行趋势。当疾病发展到一定阶段,推荐采用SIR、SEIR等更全面的模型进行长期预测。 需要注意的是,模型的选择需要根据流行病学调查资料和疾病特点,权衡模型的复杂度和拟合度。过于简单的模型可能无法充分反映疾病传播过程,而过于复杂的模型又可能存在过拟合的问题。应用模型时,还需考虑到人群的异质性、防控措施的影响等现实因素,动态调整和优化模型。 S为易感者,I为感染者,S仓室以单位时间betaSI的速率向I仓室流动

1.1 模型假设

假设易感人群一旦与感染者接触就会被感染,在一起暴发疫情中,不考虑人口流动和空间分布的影响,疾病传播仅考虑人传人,感染率在疾病流行过程中保持不变,被感染者无法康复。

1.2 模型描述

SI模型是最简单的传染病模型,适用于描述无法治愈的传染病传播过程。

1.3 模型仓室及参数含义

参数 含义
( S ) 易感者人数:未感染但可能被感染的人群
( I ) 感染者人数:具有传染性并能传播疾病的人群
( $\beta$ ) 传播率:易感者在单位时间内被感染者传染的传染率系数

2 模型流程图及方程

SI流程图

$$ \begin{cases} dS/dt=-\betaSI \\
dI/dt=\betaSI \end{cases} $$

3 适用疾病流行条件

传染性强,基本传染数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()

png

模拟为,在总人口数为100万的大城市中流感疫情的发生发展,初始感染人口为10人。随着感染的进行,到第40天时,感染人口数急剧升高,在没有任何干预措施的情况下,在第80天时,全人口都被感染。

5 扩展(保证仓室不变)

例:传播过程中加入干预措施、改变仓室流向…

注:保证上述描述不变情况下可自行扩展说明书。

谢昉
闽南北混血儿、马兆海鸥守护者