2,261 讀數
2,261 讀數

# 使用 Python 模拟传染病传播：SIR 和 SEIR 模型

7m2023/10/13

## 内容概述

1. 介绍
• 模拟的目的
2. SIR模型
• 它的作用 / SIR Python 代码模拟示例
• 你能学到什么
• 了解疾病传播
• 探索参数敏感性
• 评估干预措施
3. SEIR模型
• 它的作用/SEIR Python 代码模拟示例
• 你能学到什么
• 模型潜伏期
• 评估早期干预措施
• 研究复杂的疫情爆发
4. 结论

## 2.SIR模型

### 它的作用 /SIR Python 代码模拟示例

 \begin{align*} \frac{dS}{dt} &= -\beta \cdot S \cdot I \\ \frac{dI}{dt} &= \beta \cdot S \cdot I - \gamma \cdot I \\ \frac{dR}{dt} &= \gamma \cdot I \end{align*}

• S代表易感个体，
• 我代表感染者，
• R代表康复者。

 import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # SIR model equations def SIR_model(y, t, beta, gamma): S, I, R = y dSdt = -beta * S * I dIdt = beta * S * I - gamma * I dRdt = gamma * I return [dSdt, dIdt, dRdt] """ Initial conditions (such as S0, I0, and R0) are not to be random but I hardcoded them with specific values. These choices are typically made based on the characteristics of the disease being modeled and the context of the simulation. Initial condition are set such that S0 = 99%, which indicates the proportion of susceptible individuals when the simulation starts. I0 is set to 1%, which indicates proportion of infected individuals to be 1% when the simulation starts. R0 is set to 0% which is expected that there are are no recovered individuals when the simulations start. """ S0 = 0.99 I0 = 0.01 R0 = 0.00 y0 = [S0, I0, R0] # Parameters # β (beta) is transmission rate and I chose 30%. γ (gamma) is set to 1% beta = 0.3 gamma = 0.1 # Time vector t = np.linspace(0, 200, 200) # Simulate for 200 days # Solve the SIR model equations using odeint() solution = odeint(SIR_model, y0, t, args=(beta, gamma)) # Extract results S, I, R = solution.T # Plot the results plt.figure(figsize=(10, 6)) plt.plot(t, S, label='Susceptible') plt.plot(t, I, label='Infected') plt.plot(t, R, label='Recovered') plt.xlabel('Time (days)') plt.ylabel('Proportion of Population') plt.title('SIR Model Simulation') plt.legend() plt.grid(True) plt.show()

### 您可以发现什么

• 了解疾病传播：观察流行曲线并可视化疾病如何在社区中传播。运行上面的 Python SIR 模型，您可以在下图中看到结果：

• 探索参数敏感性：尝试测试各种 beta 和 gamma 值，观察它们如何影响爆发的持续时间和峰值。

• 评估干预措施：通过更改参数，您可以模拟干预措施的后果，例如

社会隔离或免疫接种。

## 3.SEIR模型

### 它的作用/SEIR Python 代码模拟示例

 import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # SEIR model equations def SEIR_model(y, t, beta, sigma, gamma): S, E, I, R = y dSdt = -beta * S * I dEdt = beta * S * I - sigma * E dIdt = sigma * E - gamma * I dRdt = gamma * I return [dSdt, dEdt, dIdt, dRdt] # Initial conditions S0 = 0.99 E0 = 0.01 I0 = 0.00 R0 = 0.00 y0 = [S0, E0, I0, R0] # Parameters beta = 0.3 sigma = 0.1 gamma = 0.05 # Time vector t = np.linspace(0, 200, 200) # Solve the SEIR model equations solution = odeint(SEIR_model, y0, t, args=(beta, sigma, gamma)) # Extract results S, E, I, R = solution.T # Plot the results plt.figure(figsize=(10, 6)) plt.plot(t, S, label='Susceptible') plt.plot(t, E, label='Exposed') plt.plot(t, I, label='Infected') plt.plot(t, R, label='Recovered') plt.xlabel('Time (days)') plt.ylabel('Proportion of Population') plt.title('SEIR Model Simulation') plt.legend() plt.grid(True) plt.show()

### 你能学到什么

• 模型潜伏期

认识直接传染性疾病和潜伏期疾病行为之间的差异。

• 评估早期干预措施

分析隔离和早期检测策略的效果。

• 研究复杂的疫情爆发

对于像 COVID-19 这样的疾病，接触者是传播的主要因素，请使用 SEIR。

## 4。结论

Python 的简单性和强大的库（如 SciPy）使其成为疾病建模的完美语言。通过使用它进行这些模拟，您可以更多地了解传染病的动态。这可以让你拥有判断力和能力，帮助你做出明智的决定，并提高你自己评估现实世界中流行病的能力。

SIR 和 SEIR 模型之后还有更多的内容。还有其他复杂的模型，例如SEIRS（易感-暴露-感染-去除-易感）模型、空间模型、网络模型等。研究复杂的模型，以及现实世界的数据，例如地理空间数据、流行病学数据、行为数据等等，并仔细检查干预措施的效果，例如疫苗接种策略、治疗可用性、社交距离措施，您将进一步发展您的建模能力。

L O A D I N G
. . . comments & more!