Skip to content

[sir-model] Update Translations #44

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 17, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 31 additions & 35 deletions lectures/sir_model.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,9 @@ kernelspec:
* [NBER工作论文第26867号](https://www.nber.org/papers/w26867)
* [COVID-19工作论文和代码](https://sites.google.com/site/andyatkeson/home?authuser=0)

他的这些笔记主要是介绍了定量建模
他的这些笔记主要是介绍了定量建模传染病动态研究。

传染病动态研究。

疾病传播使用标准SIR(易感者-感染者-移除者)模型进行建模。
疾病传播使用标准SIR(易感者-感染者-移出者)模型进行建模。

模型动态用常微分方程组表示。

Expand Down Expand Up @@ -67,17 +65,17 @@ from scipy.integrate import odeint

## SIR模型

在我们将要分析的SIR模型版本中有四个状态。

假设人群中的所有个体都处于这四种状态之一。

这些状态是:易感者(S)、潜伏者(E)、感染者(I)和移除者(R)。
我们要分析的是一个包含四个状态的SIR模型。在这个模型中,每个人都必须处于以下四种状态之一:

说明:
- 易感者(S):尚未感染,可能被感染的人群
- 潜伏者(E):已感染但尚未具有传染性的人群
- 感染者(I):已感染且具有传染性的人群
- 移出者($R$):已经康复或死亡的人群

* 处于R状态的人已经被感染并且已经康复或死亡。
* 康复的人被假定已获得免疫力。
* 处于潜伏期的群体尚未具有传染性。
需要注意的是:
- 一旦康复,就会获得免疫力,不会再次感染
- 处于移出状态($R$)的人包括康复者和死亡者
- 潜伏期的人虽然已感染,但还不能传染给他人

### 时间路径

Expand All @@ -98,9 +96,9 @@ from scipy.integrate import odeint
\begin{aligned}
\dot s(t) & = - \beta(t) \, s(t) \, i(t)
\\
\dot e(t) & = \beta(t) \, s(t) \, i(t) - σ e(t)
\dot e(t) & = \beta(t) \, s(t) \, i(t) - \sigma e(t)
\\
\dot i(t) & = σ e(t) - γ i(t)
\dot i(t) & = \sigma e(t) - \gamma i(t)
\end{aligned}
```

Expand All @@ -119,24 +117,22 @@ from scipy.integrate import odeint

(即所有已感染或曾经感染的人)。

系统{eq}`sir_system`可以用向量形式表示为
对于适当定义的$F$(见下面的代码), 系统{eq}`sir_system`可以用向量形式表示为

```{math}
:label: dfcv

\dot x = F(x, t), \qquad x := (s, e, i)
```

对于适当定义的$F$(见下面的代码)。

### 参数

$\sigma$和$\gamma$都被视为固定的、由生物学决定的参数
参数$\sigma$和$\gamma$由病毒的生物学特性决定,因此被视为固定值

按照Atkeson的说明,我们设定
根据Atkeson的笔记,我们采用以下参数值:

* $\sigma = 1/5.2$,反映平均潜伏期为5.2天
* $\gamma = 1/18$,对应平均病程18天。
* $\sigma = 1/5.2$ - 这意味着平均潜伏期为5.2天
* $\gamma = 1/18$ - 这表示患者平均需要18天才能康复或死亡

传播率被构造为

Expand Down Expand Up @@ -173,11 +169,11 @@ def F(x, t, R0=1.6):
"""
s, e, i = x

# 易感人群的新暴露
# 计算新增感染人数
β = R0(t) * γ if callable(R0) else R0 * γ
ne = β * s * i

# 时间导数
# 导数
ds = - ne
de = ne - σ * e
di = σ * e - γ * i
Expand All @@ -190,7 +186,7 @@ def F(x, t, R0=1.6):
初始条件设置为

```{code-cell} ipython3
# initial conditions of s, e, i
# 初始条件
i_0 = 1e-7
e_0 = 4 * i_0
s_0 = 1 - i_0 - e_0
Expand All @@ -207,9 +203,7 @@ x_0 = s_0, e_0, i_0
```{code-cell} ipython3
def solve_path(R0, t_vec, x_init=x_0):
"""
通过数值积分求解i(t)和c(t),
给定R0的时间路径。

给定R0的时间路径,计算感染人数i(t)和累计病例c(t)的演变轨迹。
"""
G = lambda x, t: F(x, t, R0)
s_path, e_path, i_path = odeint(G, x_init, t_vec).transpose()
Expand Down Expand Up @@ -339,16 +333,18 @@ plot_paths(i_paths, labels)
plot_paths(c_paths, labels)
```

## 解除封锁
## 解除封锁措施的影响分析

以下复现了Andrew Atkeson关于解除封锁时机的[额外研究结果](https://drive.google.com/file/d/1uS7n-7zq5gfSgrL3S0HByExmpq4Bn3oh/view)。
接下来我们将基于Andrew Atkeson的[研究](https://drive.google.com/file/d/1uS7n-7zq5gfSgrL3S0HByExmpq4Bn3oh/view),探讨不同时机解除封锁措施对疫情发展的影响

考虑以下两种缓解情景
我们对比两种解封方案

1. 前30天$R_t = 0.5$,之后17个月$R_t = 2$。这相当于30天后解除封锁。
2. 前120天$R_t = 0.5$,之后14个月$R_t = 2$。这相当于4个月后解除封锁。
1. 短期封锁方案:实施30天严格封锁($R_t = 0.5$),之后17个月放开管控($R_t = 2$)
2. 长期封锁方案:实施120天严格封锁($R_t = 0.5$),之后14个月放开管控($R_t = 2$)

这里考虑的参数设置模型的初始状态为25,000个活跃感染者,以及75,000个已经接触病毒因此即将具有传染性的个体。
模型的初始条件设定为:
- 25,000名活跃感染者
- 75,000名处于潜伏期的感染者(已感染但尚未具有传染性)

```{code-cell} ipython3
# 初始条件
Expand Down Expand Up @@ -402,4 +398,4 @@ paths = [path * ν * γ * pop_size for path in i_paths]
plot_paths(paths, labels)
```

如果能找到疫苗,将曲线峰值推迟到更远的未来可能会减少累计死亡人数
如果我们能够将感染高峰推迟到疫苗研发出来之前,就有可能大幅降低最终的死亡人数
Loading