covid19的SEIR建模
项目描述
SEIR
covid19的SEIR建模
免费软件:MIT
分区SEIR
使用SEIR模型建模流行病的Python包。
安装
该包可在Python包索引中找到,并可以使用pip安装
pip install seir
最新版本可在Github存储库的master分支中找到,并可以使用pip安装,如下所示
pip install git+https://github.com/covid19-bh-biostats/seir
命令行模拟工具
快速入门
运行以下命令以查看所有命令的概览
SEIR --help
从该存储库的根目录运行以下命令以全面演示SEIR的功能
SEIR -cf example_configs/finland_with_restrictions -cm contacts_matrices/finland --visualize-compartments
配置文件
SEIR包包括一个用于模拟简单分区SEIR模型的命令行界面。基本用法如下
$ SEIR --config_file config
在这里,config
是一个包含流行病和人口信息的配置文件。配置文件的示例可以在example_configs/目录中找到。
配置文件应包含三个部分,分别是 [simulation]
、[model]
和 [initial state]
。示例文件位于仓库根目录下的 example_configs/
目录中。
[simulation]
[simulation]
部分定义了与 SEIR 常微分方程数值模拟相关的参数。支持的参数包括
[simulation] max_simulation_time = 300 method = DOP853 max_step = 0.5
这里唯一的必需参数是 max_simulation_time
,即模拟天数。
参数 method
可用于更改数值积分算法。有关支持的值,请参阅 scipy.integrate.solve_ivp 的文档。
max_step
定义了积分中使用的最大时间步长。
[model]
(无分室化)
[model]
部分定义了疾病模型的参数。在其最简单形式中,如果您希望模拟整个群体而无需对其进行分室化,则 [model]
部分如下所示
[model] population = 5e6 incubation_period = 3 infectious_period = 7 initial_R0 = 2.5 hospitalization_probability = 0.1 hospitalization_duration = 20 hospitalization_lag_from_onset = 7 icu_probability = 0.01 icu_duration = 10 icu_lag_from_onset = 11 death_probability = 0.1 death_lag_from_onset = 25
这里的参数是
- incubation_period
疾病的潜伏期(天数)。
- infectious_period
患者在潜伏期之后能够传染他人的天数。
- initial_R0
疾病的基本再生数。
- hospitalization_probability
需要住院的感染者的概率。
- hospitalization_duration
平均住院时间(天数)。
- hospitalization_lag_from_onset
从症状出现到入院的平均时间(天数)。
- icu_probability
需要住院的感染者的概率。
- icu_duration
需要重症监护的平均时间(天数)。
- icu_lag_from_onset
从症状出现到入住 ICU 的平均时间(天数)。
- death_probability
感染者因疾病死亡的概率。
- death_lag_from_onset
从症状出现到死亡的平均时间(天数)。
- population
总人口。
[model]
(分室化)
当您希望将群体分成不同的部分(例如,按年龄组划分)时,[model]
部分将更加复杂。
以芬兰的人口为例,根据年龄分为三个部分:0…15、16…65 和 65+。
[model] compartments = 0-15, 16-65, 65+ population = 871036, 3422996, 1231274 incubation_period = 3 infectious_period = 7 initial_R0 = 2.5 hospitalization_probability = 0.11, 0.17, 0.29 hospitalization_duration = 20 hospitalization_lag_from_onset = 7 icu_probability = 0.01 icu_duration = 10 icu_lag_from_onset = 11 death_probability = 0.1 death_lag_from_onset = 25
这里的参数是
- compartments
以逗号分隔的分室名称列表
- population
以逗号分隔的每个分室的人口
- incubation_period
疾病的潜伏期(天数)。如果是一个数字,则所有分室使用相同的数字。您可以通过提供以逗号分隔的列表来为每个分室定义不同的潜伏期。
- infectious_period
患者在潜伏期之后能够传染他人的天数。如果是一个数字,则所有分室使用相同的数字。您可以通过提供以逗号分隔的列表来为每个分室使用不同的值。
- initial_R0
疾病的基本再生数。一个数字。
- hospitalization_probability
需要住院的感染者的概率。如果是一个数字,则所有分室使用相同的数字。您可以通过提供以逗号分隔的列表来为每个分室使用不同的值。
- hospitalization_duration
平均住院时间(天数)。
- hospitalization_lag_from_onset
从症状出现到入院的平均时间(天数)。
- icu_probability
需要住院的感染者的概率。如果是一个数字,则所有分室使用相同的数字。您可以通过提供以逗号分隔的列表来为每个分室使用不同的值。
- icu_duration
需要重症监护的平均时间(天数)。
- icu_lag_from_onset
从症状出现到入住 ICU 的平均时间(天数)。
- death_probability
感染者因疾病死亡的概率。如果是一个数字,则所有分室使用相同的数字。您可以通过提供以逗号分隔的列表来为每个分室使用不同的值。
- death_lag_from_onset
从症状出现到死亡的平均时间(天数)。
[initial state]
(无分室化)
当模型中没有分室时,配置文件的 [initial state]
部分应类似于以下内容
[initial state] probabilities = True population_susceptible = 0.8 population_exposed = 0.15 population_infected = 0.05
这里的参数是
- probabilities
如果设置为
true
,则本节中其余参数被视为概率,暴露/感染者的总数通过将总人口乘以提供的值来计算。- population_exposed
暴露者的总数(或概率)
- population_infected
感染者的总数(或概率)
[initial state]
(分室化)
当模型中有隔间时,配置文件中的 [初始状态]
部分应类似于以下内容:
[initial state] probabilities = True population_exposed = 0.001, 0.01, 0.005 population_infected = 0.001, 0.01, 0.005
这里的参数是
- probabilities
如果设置为
true
,则本节中其余参数被视为概率,暴露/感染者的总数通过将总人口乘以提供的值来计算。- population_exposed
暴露者的总数(或概率)
- population_infected
感染者的总数(或概率)
[限制条件]
我们可以通过在感染率(如果为隔间模型,则为矩阵)中引入时间依赖性来模拟如社交距离和学校关闭等限制。
限制条件可以在名为 [限制条件名称]
的部分中定义的 config 文件中定义。您可以在同一文件中定义多个限制条件。
以下限制条件作为感染率
的前因子实现,如下所示:
对所有交互的限制
定义限制开始和结束的日期,以及在这两天(包括)之间的感染率矩阵的前因子。
[restriction social-distancing] day-begins = 20 day-ends = 180 infectivity modifier = 0.7
对某些交互的限制
定义限制开始和结束的日期,以及感染率矩阵的前因子矩阵 R 的矩阵元素。
您可以在单独的行上定义前因子矩阵的多个元素。例如,要降低隔间 0-4
、5-9
、15-19
与隔间 35-39
、:code:40-44(反之亦然)之间的接触 20%,以及所有隔间与隔间 60-64
和 65+
之间的接触 80%,您需要指定以下内容:
[restriction social-distancing experiment 2] day-begins = 20 day-ends = 180 infectivity modifier = [ 0-4, 5-9, 15-19 ] : [ 35-39, 40-44 ] : 0.8 all : [ 60-64, 65+ ] : 0.2
从文件中定义限制
定义限制开始和结束的日期,以及存储前因子矩阵的 CSV 格式文件。
[restriction social-distancing experiment 2] day-begins = 20 day-ends = 180 infectivity modifier = file://my_data/restrictions_prefactor.csv
接触模式(隔间模型)
有时我们知道隔间 i
的人与隔间 j
的人有多少不同的日常接触。这被称为接触矩阵,C[i,j]
。
可以通过 -c
标志将接触矩阵提供给 SEIR
命令行工具。
$ SEIR -cm my_contacts_matrix.csv configfile
接触矩阵应该是一个空格或逗号分隔的文件,其列数和行数与配置文件中定义的隔间数量相同。例如,请尝试以下操作:
$ SEIR -cm contacts_matrices/finland -cf example_configs/finland --visualize-compartments
示例接触模式矩阵可以在 Github 存储库中的 contacts_matrices/
目录中找到。
输出文件
SEIR
工具以名为 outfile.csv
的文件输出计算后的模型(可以使用 -o
选项更改)。输出文件是一个逗号分隔的表,包含以下模拟结果:
时间
从模拟开始到每一天的日期数组
('易感者', <隔间名称>)
对应于 '时间' 数组中每一天的
<隔间名称>
隔间中的易感者人数。易感者
所有隔间中的易感者人数。
('暴露者', <隔间名称>)
对应于 '时间' 数组中每一天的
<隔间名称>
隔间中的暴露者人数。暴露者
所有隔间中的暴露者人数。
('感染(活动)', <隔间名称>)
对应于 '时间' 数组中每一天的
<隔间名称>
隔间中的具有活动性感染的人数。感染(活动)
所有隔间中的具有活动性感染的人数。
('感染(总计)', <隔间名称>)
对应于 '时间' 数组中每一天的
<隔间名称>
隔间中具有活动性感染(或历史上曾有过)的人数。感染(总计)
所有隔间中具有活动性感染(或历史上曾有过)的人数。
('移除', <隔间名称>)
对应于“time”数组中每一天的
<compartment name>
隔室移除数量。移除
所有隔室中移除的人的数量。
('hospitalized (active)', <compartment name>)
在“time”数组中每一天,来自
<compartment name>
隔室需要住院的人数。住院(活跃)
需要住院的总人数。
('in ICU', <compartment name>)
在“time”数组中每一天,来自
<compartment name>
隔室(目前)需要重症监护的人数。在ICU(活跃)
目前需要重症监护的总人数。
('deaths', <compartment name>)
来自
<compartment name>
隔室已经死亡的人数(累计总和)。死亡
死亡的总人数。
变更日志
本文件记录了所有对seir的显著变更。本项目遵循语义版本控制。
0.2.2 (2020-04-11)
新增
为config_file_parser和restriction_section_parser添加了测试
修复
在Dockerfile中添加了make、automake、gcc、g++、git,以便能够编译numpy
依赖项
弃用
Travis构建(不如Github工作流程完整)
0.2.0 (2020-04-08)
新增
限制措施的视觉表示
改进了文档
visualize_compartments现在是一个标志
参数的简短替代方案
添加了对json文件输出的支持
修复
依赖项
弃用
0.1.1 (2020-04-07)
新增
修复 * 在指定隔室特定的初始人口不是概率时,* pep8兼容性 * 错误
依赖项
弃用
0.1.0 (2020-04-07)
新增 * 使用COOKIETEMPLE创建项目
修复
依赖项
弃用
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
SEIR-0.2.3.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 24f255ac812b5fb2263283b9814841d9855d55ac7d230694521489d7959e1931 |
|
MD5 | 4c76b63f1c0ad0853925011a1d72c33f |
|
BLAKE2b-256 | 0acd5c6c44aa8eddfc49611c132d774e89b6bcf5646cc54304bf9ee25bae7acb |
SEIR-0.2.3-py2.py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 08c38a9fba455fc1bc352ecdb027d478cb59ad71bc10f33897390e5e4fab3422 |
|
MD5 | 2b262cc4f13ab40546a700e21cdbbde5 |
|
BLAKE2b-256 | dde46df364a96b457f5782a67f9596270dfc61ef1aa3180a44256784cf3fd9a9 |