diff --git a/.translate/state/sir_model.md.yml b/.translate/state/sir_model.md.yml new file mode 100644 index 00000000..b58bee00 --- /dev/null +++ b/.translate/state/sir_model.md.yml @@ -0,0 +1,6 @@ +source-sha: a1cd90c5ef6d6f05277318f47fe21eda60fa5e6b +synced-at: "2026-07-18" +model: claude-sonnet-5 +mode: RESYNC +section-count: 5 +tool-version: 0.17.0 diff --git a/lectures/sir_model.md b/lectures/sir_model.md index 4b14e8de..1f0daa72 100644 --- a/lectures/sir_model.md +++ b/lectures/sir_model.md @@ -7,7 +7,20 @@ kernelspec: display_name: Python 3 language: python name: python3 +translation: + title: 新冠病毒建模 + headings: + Overview: 概述 + The SIR Model: SIR模型 + The SIR Model::Time Path: 时间路径 + The SIR Model::Parameters: 参数 + Implementation: 实现 + Experiments: 实验 + 'Experiments::Experiment 1: Constant R0 Case': 实验1:固定R0的情况 + 'Experiments::Experiment 2: Changing Mitigation': 实验2:改变缓解措施 + Ending Lockdown: 解除封锁 --- + ```{raw}
@@ -16,9 +29,9 @@ kernelspec:
``` -# 新冠病毒建模 +# {index}`新冠病毒建模 ` -```{contents} +```{contents} Contents :depth: 2 ``` @@ -55,7 +68,7 @@ import numpy as np from numpy import exp ``` -最后,我们使用SciPy的数值例程odeint来求解微分方程。 +我们还将使用SciPy的数值例程odeint来求解微分方程。 ```{code-cell} ipython3 from scipy.integrate import odeint @@ -65,17 +78,17 @@ from scipy.integrate import odeint ## SIR模型 -我们要分析的是一个包含四个状态的SIR模型。在这个模型中,每个人都必须处于以下四种状态之一: +我们要分析的这个版本的SIR模型包含四个状态。 + +假设人口中的每个人都必须处于这四种状态之一。 + +这些状态是:易感者(S)、暴露者(E)、感染者(I)和移出者(R)。 -- 易感者(S):尚未感染,可能被感染的人群 -- 潜伏者(E):已感染但尚未具有传染性的人群 -- 感染者(I):已感染且具有传染性的人群 -- 移出者($R$):已经康复或死亡的人群 +说明: -需要注意的是: -- 一旦康复,就会获得免疫力,不会再次感染 -- 处于移出状态($R$)的人包括康复者和死亡者 -- 潜伏期的人虽然已感染,但还不能传染给他人 +* 处于R状态的人已经被感染,并且已经康复或死亡。 +* 假设康复者已获得免疫力。 +* 暴露组中的人尚不具有传染性。 ### 时间路径 @@ -96,28 +109,28 @@ 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) - \sigma e(t) + \dot e(t) & = \beta(t) \, s(t) \, i(t) - σ e(t) \\ - \dot i(t) & = \sigma e(t) - \gamma i(t) + \dot i(t) & = σ e(t) - γ i(t) \end{aligned} ``` 在这些方程中, -* $\beta(t)$ 被称为*传播率*(个体与他人接触并使其暴露于病毒的速率)。 -* $\sigma$ 被称为*感染率*(暴露者转变为感染者的速率) -* $\gamma$ 被称为*恢复率*(感染者康复或死亡的速率)。 +* $\beta(t)$ 被称为**传播率**(个体与他人接触并使其暴露于病毒的速率)。 +* $\sigma$ 被称为**感染率**(暴露者转变为感染者的速率) +* $\gamma$ 被称为**恢复率**(感染者康复或死亡的速率)。 * 点符号 $\dot y$ 表示时间导数 $dy/dt$。 我们不需要单独建模处于 $R$ 状态的人口比例 $r$,因为这些状态构成一个分区。 具体来说,"已移除"的人口比例为 $r = 1 - s - e - i$。 -我们还将追踪累计病例数 $c = i + r$ +我们还将追踪 $c = i + r$,即累计病例数 (即所有已感染或曾经感染的人)。 -对于适当定义的$F$(见下面的代码), 系统{eq}`sir_system`可以用向量形式表示为 +系统{eq}`sir_system`可以用向量形式表示为 ```{math} :label: dfcv @@ -125,18 +138,20 @@ from scipy.integrate import odeint \dot x = F(x, t), \qquad x := (s, e, i) ``` +其中$F$的具体定义参见下面的代码。 + ### 参数 参数$\sigma$和$\gamma$由病毒的生物学特性决定,因此被视为固定值。 根据Atkeson的笔记,我们采用以下参数值: -* $\sigma = 1/5.2$ - 这意味着平均潜伏期为5.2天 -* $\gamma = 1/18$ - 这表示患者平均需要18天才能康复或死亡 +* $\sigma = 1/5.2$ - 这意味着平均潜伏期为5.2天。 +* $\gamma = 1/18$ - 这表示患者平均需要18天才能康复或死亡。 传播率被构造为 -* $\beta(t) := R(t) \gamma$,其中$R(t)$是时间$t$时的*有效再生数*。 +* $\beta(t) := R(t) \gamma$,其中$R(t)$是时间$t$时的**有效再生数**。 (这个符号表示有点令人困惑,因为$R(t)$与表示已移除状态的符号$R$不同。) @@ -203,7 +218,8 @@ x_0 = s_0, e_0, i_0 ```{code-cell} ipython3 def solve_path(R0, t_vec, x_init=x_0): """ - 给定R0的时间路径,计算感染人数i(t)和累计病例c(t)的演变轨迹。 + 给定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() @@ -333,18 +349,17 @@ 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$) -2. 长期封锁方案:实施120天严格封锁($R_t = 0.5$),之后14个月放开管控($R_t = 2$) +1. $R_t = 0.5$持续30天,之后17个月$R_t = 2$。这相当于30天后解除封锁。 +2. $R_t = 0.5$持续120天,之后14个月$R_t = 2$。这相当于4个月后解除封锁。 -模型的初始条件设定为: -- 25,000名活跃感染者 -- 75,000名处于潜伏期的感染者(已感染但尚未具有传染性) +这里所考虑的参数设定模型初始时有25,000名活跃感染者, +以及75,000名已经暴露于病毒、即将具有传染性的人群。 ```{code-cell} ipython3 # 初始条件 @@ -398,4 +413,4 @@ paths = [path * ν * γ * pop_size for path in i_paths] plot_paths(paths, labels) ``` -如果我们能够将感染高峰推迟到疫苗研发出来之前,就有可能大幅降低最终的死亡人数。 +如果我们能够将感染高峰推迟到疫苗研发出来之前,就有可能降低累计死亡人数。