跳转到主要内容

covid19的SEIR建模

项目描述

SEIR

Build SEIR Package Run Tests https://img.shields.io/pypi/v/SEIR.svg Documentation Status Dependabot Enabled

covid19的SEIR建模

分区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 文件中定义。您可以在同一文件中定义多个限制条件。

以下限制条件Rat作为感染率Infmat的前因子实现,如下所示:

https://latex.codecogs.com/svg.latex?\mathcal{I}\to,R_0\circ,R_1\circ\dots\circ,R_{M-1}\mathcal{I}
对所有交互的限制

定义限制开始和结束的日期,以及在这两天(包括)之间的感染率矩阵的前因子。

[restriction social-distancing]
day-begins = 20
day-ends = 180
infectivity modifier = 0.7
对某些交互的限制

定义限制开始和结束的日期,以及感染率矩阵的前因子矩阵 R 的矩阵元素。

您可以在单独的行上定义前因子矩阵的多个元素。例如,要降低隔间 0-45-915-19 与隔间 35-39、:code:40-44(反之亦然)之间的接触 20%,以及所有隔间与隔间 60-6465+ 之间的接触 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
从文件中定义限制

定义限制开始和结束的日期,以及存储前因子矩阵Rat的 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 (27.9 kB 查看哈希)

上传时间

构建分布

SEIR-0.2.3-py2.py3-none-any.whl (20.8 kB 查看哈希)

上传时间 Python 2 Python 3

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面