From 8e0c84c2d6b138e525982daf7ae7f9573fb6eaf8 Mon Sep 17 00:00:00 2001 From: Humphrey Yang Date: Thu, 10 Jul 2025 11:11:57 +0800 Subject: [PATCH 1/2] update --- lectures/sir_model.md | 54 +++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/lectures/sir_model.md b/lectures/sir_model.md index 9becf49..36332e3 100644 --- a/lectures/sir_model.md +++ b/lectures/sir_model.md @@ -35,7 +35,7 @@ kernelspec: 传染病动态研究。 -疾病传播使用标准SIR(易感者-感染者-移除者)模型进行建模。 +疾病传播使用标准SIR(易感者-感染者-移出者)模型进行建模。 模型动态用常微分方程组表示。 @@ -67,17 +67,17 @@ from scipy.integrate import odeint ## SIR模型 -在我们将要分析的SIR模型版本中有四个状态。 +我们要分析的是一个包含四个状态的SIR模型。在这个模型中,每个人都必须处于以下四种状态之一: -假设人群中的所有个体都处于这四种状态之一。 +- 易感者(S):尚未感染,可能被感染的人群 +- 潜伏者(E):已感染但尚未具有传染性的人群 +- 感染者(I):已感染且具有传染性的人群 +- 移出者(R):已经康复或死亡的人群 -这些状态是:易感者(S)、潜伏者(E)、感染者(I)和移除者(R)。 - -说明: - -* 处于R状态的人已经被感染并且已经康复或死亡。 -* 康复的人被假定已获得免疫力。 -* 处于潜伏期的群体尚未具有传染性。 +需要注意的是: +- 一旦康复,就会获得免疫力,不会再次感染 +- 处于移出状态(R)的人包括康复者和死亡者 +- 潜伏期的人虽然已感染,但还不能传染给他人 ### 时间路径 @@ -98,9 +98,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} ``` @@ -119,7 +119,7 @@ from scipy.integrate import odeint (即所有已感染或曾经感染的人)。 -系统{eq}`sir_system`可以用向量形式表示为 +对于适当定义的$F$(见下面的代码), 系统{eq}`sir_system`可以用向量形式表示为 ```{math} :label: dfcv @@ -127,16 +127,14 @@ from scipy.integrate import odeint \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天才能康复或死亡 传播率被构造为 @@ -190,7 +188,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 @@ -339,16 +337,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 # 初始条件 @@ -402,4 +402,4 @@ paths = [path * ν * γ * pop_size for path in i_paths] plot_paths(paths, labels) ``` -如果能找到疫苗,将曲线峰值推迟到更远的未来可能会减少累计死亡人数。 +如果我们能够将感染高峰推迟到疫苗研发出来之前,就有可能大幅降低最终的死亡人数。 From 37d9bd0afe1c9b8916f023455a26215e4159369f Mon Sep 17 00:00:00 2001 From: Humphrey Yang Date: Thu, 17 Jul 2025 12:29:06 +1000 Subject: [PATCH 2/2] updates --- lectures/sir_model.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/lectures/sir_model.md b/lectures/sir_model.md index 36332e3..4b14e8d 100644 --- a/lectures/sir_model.md +++ b/lectures/sir_model.md @@ -31,9 +31,7 @@ kernelspec: * [NBER工作论文第26867号](https://www.nber.org/papers/w26867) * [COVID-19工作论文和代码](https://sites.google.com/site/andyatkeson/home?authuser=0) -他的这些笔记主要是介绍了定量建模 - -传染病动态研究。 +他的这些笔记主要是介绍了定量建模传染病动态研究。 疾病传播使用标准SIR(易感者-感染者-移出者)模型进行建模。 @@ -72,11 +70,11 @@ from scipy.integrate import odeint - 易感者(S):尚未感染,可能被感染的人群 - 潜伏者(E):已感染但尚未具有传染性的人群 - 感染者(I):已感染且具有传染性的人群 -- 移出者(R):已经康复或死亡的人群 +- 移出者($R$):已经康复或死亡的人群 需要注意的是: - 一旦康复,就会获得免疫力,不会再次感染 -- 处于移出状态(R)的人包括康复者和死亡者 +- 处于移出状态($R$)的人包括康复者和死亡者 - 潜伏期的人虽然已感染,但还不能传染给他人 ### 时间路径 @@ -171,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 @@ -205,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()