病原体离散传播结构种群

塞巴斯蒂安·勒基姆

2024-02-09

除了简单的模拟设置外另一个教程,其中主机是“非结构化的”,诺索伊可以考虑人口结构在离散状态或在连续空间中。这里我们关注的是一个离散的状态结构(有关连续结构,请参见本教程).

离散结构旨在允许模拟在地理环境中与离散的国家如国家,地区、岛屿、城市。请注意,其他类型的结构可能是考虑(例如高风险/低风险等)。在这种情况下,允许参数值根据主机的当前在可用状态中的位置。

本教程的重点是设置诺索伊模拟对于宿主种群结构不同的病原体位置。

人口结构

这里我们考虑三种不同的宿主位置称为“A”、“B”和“C”。主机可以移动(如果它们经历移动事件),具有一定概率可以直接设置,也可以从其他数据派生。这里,我们采取转换矩阵,在后面调用结构矩阵,至为:

#>A、B、C#>A 0.0 0.5 0.5#>B 0.2 0.0 0.8#>C 0.4 0.6 0.0

它可以用图形表示如下:

对于结构矩阵要做到这一点,一些规则必须遵循:

设置模拟

包装器函数nosoiSim公司接受所有参数在本教程中,它将被传递给模拟器单个离散(对于“单主机,离散结构”)。我们因此,首先提供选项type=“单个”popStructure=“离散”要设置分析:

SimulationSingle仿真<- nosoiSim公司(类型=“单身”,pop结构=“离散”, ...)

此模拟类型需要几个参数或选项运行,即:

所有的参数*元素提供个性化级别要考虑的参数,而时间折旧*元件通知模拟器“绝对”模拟时间是否应该应予以考虑。这个差异*元素通知模拟器,如果根据状态存在差异概率主机当前在中,并且主机计数*元素通知模拟器每个状态下的主机数量考虑到。必须提供所有参数,尽管时间折旧*,差异*主机计数*将默认值设置为错误的; 如果您不想使用这些选项,则无需显式提供值。

一般参数

长度.sim最大受影响是通用的定义仿真的参数:

初始化个人初始结构“种子设定参数”:

在这里,我们将从1个人开始运行一个模拟最多1000名感染者,最多300次天。

SimulationSingle仿真<- nosoiSim公司(类型=“单身”,pop结构=“无”,
                             长度.sim=300,最大受影响=1000,初始化个人=1, ...)

核心功能

核心功能p退出,n联系,p移动pTrans公司每个都遵循相同的原则设置.

为了适应不同的情况,它们可以是恒定的,时间相关(使用自感染以来的相对时间t吨对于每个人或“绝对”时间压力时间模拟),甚至单独参数化,以包括一些个体-宿主水平的随机性。

在任何情况下,提供的函数与中的所有其他核心函数一样诺索伊,必须表示为时间的函数t吨,即使不使用时间计算概率。

如果函数使用基于个人的参数,则必须在函数列表中指定(调用参数.退出,param.n联系人,参数.移动参数.Trans)(请参见获取起动). 如果没有使用基于个人的参数,那么列表设置为不适用.

请记住p退出,p移动、和pTrans公司必须返回概率(即介于0之间的值和1)同时联系应返回自然数(正整数或零)。

几个参数,如感染后的时间、“绝对值”模拟时间、位置(离散状态下)和单个参数可以在同一范围内组合功能。

诺索伊可以灵活地将其作为参数您的功能,但应该遵守通用的一般结构。这个函数的参数应为(按此顺序):

  1. 感染后的时间t吨(强制性);
  2. “绝对”时间预时间(可选);
  3. 当前状态当前输入(可选);
  4. 状态中的主机计数主机计数(可选);
  5. 中提供的其他基于个人的参数参数函数.

如果未使用其中一个参数(除了t吨)然后是你不必提供它,可以继续下一个参数。

p退出,参数.退出,timeDep.退出,差异.退出主机计数.退出

  • p退出是第一个必需的基本参数提供主机离开模拟的每日概率(或治愈、死亡等)。
  • 参数.退出是需要的函数列表单独参数化p退出(请参见开始). 每个函数的名称列表中必须与要采样的参数的名称匹配p退出.
  • timeDep.退出允许p退出成为取决于模拟的“绝对”时间,以说明例如,对于季节性或其他外部时间相关协变量。签署人违约,timeDep.退出设置为错误的.
  • 差异.退出允许p退出不同意根据主机的当前离散状态。这可能很有用,例如,如果一个州的死亡率较高(或治疗效果更好!)对于感染,在这种情况下退出模拟的概率更高。默认情况下,差异.退出设置为错误的.小心,每个状态都应该返回一个结果对于p退出.
  • 主机计数.退出允许p退出不同意根据当前处于某个状态的主机数量。默认情况下,主机计数.退出设置为错误的.使用主机计数.退出,差异.退出必须设置为真的也是。

p移动,参数.移动,timeDep.移动,差异.pMove主机计数.pMove

  • p移动是主机的概率(每单位时间)移动,即离开其当前状态(例如,离开状态“A”)。它不应与从中提取的概率混淆这个结构矩阵,表示离开的概率一旦移动正在进行(例如,前往“B”或“C”来自“A”)。
  • 参数.移动是需要的函数列表单独参数化p移动(请参见开始). 每个函数的名称列表中必须与要采样的参数的名称匹配p移动.
  • timeDep.移动允许p移动成为取决于模拟的“绝对”时间,以说明例如,对于季节性或其他外部时间相关协变量。签署人违约,timeDep.移动设置为错误的.
  • 差异.pMove允许p移动与众不同根据主机的当前离散状态例如,不同州的不同旅行率。默认情况下,差异.pMove设置为错误的.小心,每个国家应返回结果p移动.
  • 主机计数.pMove允许p移动不同意根据当前处于某个状态的主机数量。默认情况下,主机计数.pMove设置为错误的.使用主机计数.pMove,差异.pMove必须设置为真的也是。

n联系,param.n联系人,时间部门联系人,差异联系人hostCount.n联系人

  • 联系表示数字(表示为正数整数)感染宿主可能接触的潜在传染病每单位时间的遭遇。在每个时间点将为模拟中的每个活动主机确定。的数量contacts(即函数的输出)必须是一个整数,并且可以设置为零。
  • param.n联系人是需要的函数列表单独参数化n联系(请参见开始). 每个函数的名称列表中必须与要采样的参数的名称匹配n联系.
  • 时间部门联系人允许n联系成为取决于模拟的“绝对”时间,以说明例如,对于季节性或其他外部时间相关协变量。签署人违约,时间部门联系人设置为错误的.
  • 差异联系人允许n联系根据主机的当前离散状态而不同。默认情况下,diff.n联系人设置为错误的.小心,每个州都应该给出一个结果n联系.
  • hostCount.n联系人允许n联系根据当前处于某个状态的主机数量不同而不同。这个可以有助于将接触次数调整为潜在接触次数如果受感染人群接近最大值,则为易感宿主一个州的人口规模。默认情况下,hostCount.n联系人设置为错误的.使用hostCount.n联系人,差异联系人必须是设置为真的也是。

pTrans公司,参数.Trans,时间Dep.pTrans,差异.pTrans主机计数.pTrans

  • pTrans公司是传输过程的核心表示一段时间内的传输概率(当接触发生)。
  • 参数.Trans是需要的函数列表单独参数化pTrans公司(请参见开始). 每个函数的名称列表中必须与要采样的参数的名称匹配pTrans公司.
  • 时间Dep.pTrans允许pTrans公司成为取决于模拟的“绝对”时间,以说明例如,对于季节性或其他外部时间相关协变量。签署人默认情况下,时间Dep.pTrans设置为错误的.
  • 差异.pTrans允许pTrans公司成为根据主机的当前离散状态不同。这个可以用于解释与外部因素相关的不同动态在一种状态下很常见,例如温度。默认情况下,差异.pTrans设置为错误的.小心,每个国家应返回结果pTrans公司.
  • 主机计数.pTrans允许pTrans公司不同意根据当前处于一个状态的主机的数量。默认情况下,主机计数.pTrans设置为错误的.使用主机计数.pTrans,差异.pTrans必须设置为真的也是。

其他

前缀host允许您定义第一个字符表示主机的唯一ID。它后面将跟一个连字符和一个唯一的数字。默认情况下,前缀host“H”代表“主机”。

打印.进度允许您获得一些信息在屏幕上打印有关运行中的模拟的信息。它会的打印内容间隔打印.step。默认情况下,打印.进度使用激活打印步骤=10(您可以更改此频率),但您可能希望通过设置将其停用print.progress=错误.

双主机

在双主机模拟的情况下nosoiSim公司必须为每种主机类型指定,指定人A类B类.包装器函数nosoiSim公司然后将接受所有的参数在本教程中,传递给模拟器双离散(用于“双主机,离散结构”)。因此,我们首先提供选项type=“双重”popStructure=“离散”要设置分析:

仿真双通道<- nosoiSim公司(类型=“双重”,pop结构=“离散”, ...)

此函数需要几个参数或选项才能运行,即:

如您所见,主机类型相关参数现在由指定后缀.A型.B类.

两者都有最大感染。A类最大影响。B类以设置模拟大小的上限。收件人启动模拟,您必须提供至少一个启动主机,任何一个A类B类在里面init.individuals。A类init.individuals。B类以及中的起始位置init.in个数。A类init.individuals。B类,分别是。如果要仅使用一个主机启动模拟,然后初始化个人另一个的可以设置为0并且初始结构不适用.

这里的一个主要区别是,主机可能共享,也可能不共享结构矩阵然而,由于它们存在于同一个“世界”,他们应该共享相同的州名。也可以拥有一个不移动的主机。在这种情况下,p移动可以是设置为不适用在这种“不移动”的情况下仍应提供包含所有状态名称的矩阵。

同样,必须为这两台主机提供所有参数,尽管时间Dep,差异主机计数默认值设置为错误的; 如果您不想使用这些选项,则无需显式提供值。Be公司小心切换差异真的如果你想的话使用主机计数,并记住为每个人提供一个结果状态。

正在运行诺索伊

单个主机

我们在这里为单个主机提供了一个非常简单的模拟病菌。

p退出

对于p退出,我们选择的概率取决于主机当前所在的位置。每个位置(州)必须如本例所示:

p_退出_fct<- 功能(t,电流.英寸){
  如果(当前输入==“A”){返回(0.02)}
  如果(当前输入==“B”){返回(0.05)}
  如果(当前输入==“C”){返回(0.1)}
}

此功能表示如果主机处于状态“A”,则它有2%退出的机会,如果处于“B”状态,则为5%,如果处于状态“C”,则为10%。记得那个p退出与其他核心功能一样,必须的功能t吨,即使t吨未使用。p退出取决于位置,diff.pExit=真然而,“绝对”没有任何用处仿真时间和基于个体的参数,因此timeDep.pExit=假param.pExit=不适用.

p移动

我们为选择一个常量值p移动即0.1,即,受感染的主机有10%的机会离开其状态(此处为位置)。

_移动_fct<- 功能(t){返回(0.1)}

记住p移动与其他核心功能一样,具有是…的函数t吨,即使t吨未使用。p移动不依赖于位置,diff.pMove=错误。同样,也没有使用模拟的“绝对”时间和基于个体的参数,因此timeDep.pMove=假param.pMove=不适用.

n联系

对于n联系,我们选择一个常量函数在正态分布中画一个值意思是0.5和标准偏差1,四舍五入,取其绝对值。

n_触点= 功能(t){防抱死制动系统((rnorm公司(1,0.5,1),0))}

The distribution ofn联系如下所示:

每一次,对于每一个受感染的宿主,n联系重新绘制。记住n联系就像另一个核心一样函数必须是t吨,即使t吨未使用。n联系这里是常数,没有使用模拟的“绝对”时间、主机的位置,也不是基于个人的参数。所以param.nContact=NA,timeDep.nContact=假diff.nContact=错误.

pTrans公司

我们选择pTrans公司以阈值函数的形式:在初次感染后的一定时间内,宿主会不传播(我们称之为潜伏期t_incub公司),以及之后,它将以一定(恒定)的概率进行传输(我们称之为p_最大值). 此函数依赖于自宿主感染以来的时间t吨.

p_Trans_fct<- 功能(t,p_max,t_incub){
  如果(t)<t_incub){p=0}
  如果(t)>=t_incub){p=p_最大值}
  返回(p)
}

因为每个宿主都不同(生物和非生物略有不同因素),您可以期望每个主机在感染动态,因此传播概率超过时间。因此,t_incub公司p_最大值将进行采样根据特定的分布分别为每台主机分配。t_incub公司将从以下正态分布中取样\(平均值\)=7和\(sd\)=1,而p_最大值从具有形状参数的贝塔分布中采样\(\字母\)=5和\(测试版)= 2:

t_incub_fct<- 功能(x){rnorm公司(x,平均值=7,标准偏差=1)}
p_最大值<- 功能(x){罗贝塔(x,形状1=5,形状2=2)}

注意这里t_incub公司p_最大值的功能x个而不是t吨(它们不是核心功能,但基于个人参数),以及x个进入函数作为要绘制的绘图数。

综上所述pTrans公司对于的子集人口中的200人将如下所示:

pTrans公司不依赖于模拟也不依赖于主机位置,因此timeDep.pTrans=假diff.pTrans=错误.然而,由于我们使用基于个体的参数,我们必须提供一个参数.Trans作为函数列表。的名称此列表中的每个元素应该与核心元素具有相同的名称函数(此处pTrans公司)用作参数,例如:

t_incub_fct<- 功能(x){rnorm公司(x,平均值= 7,标准偏差=1)}
p_最大值<- 功能(x){罗贝塔(x,形状1= 5,形状2=2)}

参数_事务= 列表(p_最大值=p_max_fct,t_incub公司=t_incub_fct)

正在运行

一次nosoiSim公司设置完成后,您可以运行模拟(这里的“种子”确保您将获得与此相同的结果教程)。

图书馆(无)

#过渡矩阵
转换矩阵<- 矩阵(c(c)(0,0.2,0.4,0.5,0,0.6,0.5,0.8,0),nrow公司= ,ncol公司= ,数据名=列表(c(c)(“A”,“B”,“C”),c(c)(“A”,“B”,“C”)))

#p退出
p_退出_fct<- 功能(t,电流.英寸){
  如果(当前输入==“A”){返回(0.02)}
  如果(当前输入==“B”){返回(0.05)}
  如果(当前输入==“C”){返回(0.1)}
}

#p移动
p_移动_fct<- 功能(t){返回(0.1)}

#n联系
n_触点= 功能(t){防抱死制动系统((rnorm公司(1,0.5,1),0))}

#pTrans公司
先证<- 功能(t,p_max,t_incub){
  如果(吨<=t_incub){p=0}
  如果(t)>=t_incub){p=p_最大值}
  返回(p)
}

t_incub_fct<- 功能(x){rnorm公司(x,平均值= 5,标准偏差=1)}
p_最大值<- 功能(x){罗贝塔(x,形状1= 5,形状2=2)}

参数_事务= 列表(p_最大值=p_max_fct,t_incub公司=t_incub_fct)

#开始模拟------------------------------------

设置种子(846)
SimulationSingle仿真<- nosoiSim公司(类型=“单身”,pop结构=“离散”,
                             长度.sim=300,最大受影响=300,初始化个人=1,初始结构=“A”,
                             
                             结构矩阵=传递矩阵,
                             
                             p退出=p_Exit_fct,
                             参数.退出=不适用,
                             timeDep.退出=错误的,
                             差异.退出=真的,
                             
                             p移动=p_Move_fct,
                             参数.移动=不适用,
                             timeDep.移动=错误的,
                             差异.pMove=错误的,
                             
                             联系=n_contact_fct,
                             param.n联系人=不适用,
                             时间部门联系人=错误的,
                             差异联系人=错误的,
                             
                             pTrans公司=先证医学,
                             参数.pTrans= 列表(p_最大值=p_max_fct,t_incub公司=t_incub_fct),
                             时间Dep.pTrans=错误的,
                             差异.pTrans=错误的,
                             
                             前缀host=“H”,
                             打印.进度=错误的,
                             打印.step=10)
#>开始模拟
#>正在初始化。。。正在运行。。。
#>已完成。
#>模拟运行了36个时间单位,共有307台主机被感染。

模拟完成后,它会报告时间单位的数量对其运行了模拟(36),以及受感染的宿主(307)。请注意,模拟在此之前已停止到达长度.sim当它穿过最大受影响阈值设置为300。

双主机

设置双主机模拟类似于单主机上述版本,但必须为这两个版本提供每个参数主机。这里,我们为主机A选择与单个相同的参数/上面只有主机。主机B的参数略有不同:

p退出。B类

对于p退出。B类,我们选择的值取决于模拟的“绝对”时间,例如循环气候条件(温度)。在这种情况下,函数的参数应该t吨预时间模拟),顺序如下:

p_退出_fctB<- 功能(t,预时间){((预时间/(2*圆周率*10))+1)/16}#对于周期函数

的值p退出。B类跨越模拟如下:

p退出。B类取决于模拟的时间,do别忘了设置timeDep.退出。B类真的.由于没有基于个人的参数,也没有主持人的位置,我们设置param.p退出。B=不适用差异.退出。B=不适用.

p移动。B类

我们将在这里假设主机B不移动。p移动。B类然后将设置为不适用.

p_Move_fct。B类<- 不适用

p移动。B类不依赖于位置,差异.移动。B=错误。同样,也没有使用模拟的“绝对”时间或基于个人的参数,所以参数.pMove。B=不适用、和timeDep.pMove公司。B=错误.

联系。B类

对于联系。B类,我们选择一个常量函数从提供的概率列表中抽取一个值:

n_contact_fct。B类= 功能(t){样品(c(c)(0,1,2),1,问题=c(c)(0.6,0.3,0.1))}

The distribution of联系。B类如下所示:

每一次,对于每一个受感染的宿主,联系。B类重新绘制。记住联系。B类像其他人一样核心功能必须是t吨,即使t吨未使用。联系。B类是常量在这里,没有使用模拟的“绝对”时间主机的位置,也不是基于个人的参数。因此,param.n联系人。B=不适用,timeDep.n联系人。B=错误diff.n联系人。B=错误.

p事务处理。B类

我们选择p事务处理。B类以高斯函数的形式。它将在以下时间点(平均值)达到最大值最初感染,随后会减少,直到达到0:

p_传输(_Trans_fct)。B类<- 功能(t,最长时间){
  数据形式(t,平均值=最长时间,标准偏差=2)*5
}

因为每个宿主都不同(生物和非生物略有不同因素),您可以期望每个主机在感染动态,因此传播概率超过时间。因此,最长时间将对每个主机进行采样根据一定的分布分别。最长时间将从参数的正态分布中采样\(平均值\)=5和\(sd\)= 1:

最大时间<- 功能(x){rnorm公司(x,平均值= 5,标准偏差=1)}

再次注意,此处最长时间是的函数x个而不是t吨(不是核心功能,但个性化参数),以及x个将函数输入为要绘制的绘制次数。

综上所述pTrans公司对于的子集人口中的200人将如下所示:

pTrans公司。B类不依赖于“绝对”时间模拟结果,时间折旧.事务处理。B=错误然而,由于我们使用基于个人的参数,我们必须提供参数.pTrans作为函数列表。每个名称列表中的元素应该与核心函数同名(此处p事务处理。B类)用作参数,如下所示:

最大时间<- 功能(x){rnorm公司(x,平均值= 5,标准偏差=1)}

参数_事务。B类= 列表(最长时间=最大时间)

正在运行

一次nosoiSim公司设置完成后,您可以运行模拟(这里的“种子”确保您将获得与此相同的结果教程)。

图书馆(无)

#过渡矩阵
转换矩阵<- 矩阵(c(c)(0,0.2,0.4,0.5,0,0.6,0.5,0.8,0),nrow公司= ,ncol公司= ,数据名=列表(c(c)(“A”,“B”,“C”),c(c)(“A”,“B”,“C”)))

#主机A-----------------------------------

#p退出
p_退出_fct<- 功能(t,电流.in){
  如果(当前输入==“A”){返回(0.02)}
  如果(当前输入==“B”){返回(0.05)}
  如果(当前输入==“C”){返回(0.1)}
}

#p移动
p_移动_fct<- 功能(t){返回(0.1)}

#n联系
n_触点= 功能(t){防抱死制动系统((rnorm公司(1,0.5,1),0))}

#pTrans公司
概率<- 功能(t,p_max,t_incub){
  如果(t)<=t_incub){p=0}
  如果(t)>=t_incub){p=p_最大值}
  返回(p)
}

t_incub_fct<- 功能(x){rnorm公司(x,平均值= 5,标准偏差=1)}
p_最大值<- 功能(x){罗贝塔(x,形状1= 5,形状2=2)}

参数_事务= 列表(p_最大值=p_max_fct,t_incub公司=t_incub_fct)

#主机B-----------------------------------

#p退出
p_Exit_fct(退出)。B类<- 功能(t,预时间){((预时间/(2*圆周率*10))+1)/16}

#p移动
p_Move_fct。B类<- 不适用

#n联系
n_contact_fct。B类= 功能(t){样品(c(c)(0,1,2),1,问题=c(c)(0.6,0.3,0.1))}

#pTrans公司
p_Trans_fct。B类<- 功能(t,最长时间){
  数据形式(t,平均值=最长时间,标准偏差=2)*5
}

最大时间<- 功能(x){rnorm公司(x,平均值= 5,标准偏差=1)}

参数_事务。B类= 列表(最长时间=最大时间)

#启动模拟------------------------------------

设置种子(60)
仿真双通道<- nosoiSim公司(类型=“双重”,pop结构=“离散”,
                           长度.sim=300,
                           最大感染。A类=100,
                           最大感染。B类=200,
                           init.individuals。A类=1,
                           init.individuals。B类=0,
                           初始结构。A类=“A”,
                           初始结构。B=不适用,
                           结构矩阵A=transition.max矩阵,
                           结构.矩阵.B=transition.max矩阵,
                           
                           p退出。A类=p_Exit_fct,
                           param.p退出。A类=不适用,
                           timeDep.退出。一个=错误的,
                           差异.退出。A类=真的,
                           
                           p移动。A类=p_Move_fct,
                           参数.pMove。一个=不适用,
                           timeDep.pMove公司。A类=错误的,
                           差异.移动。A类=错误的,
                           
                           联系。A类=n_contact_fct,
                           param.n联系人。A类=不适用,
                           timeDep.n联系人。A类=错误的,
                           diff.n联系人。A类=错误的,
                           
                           p事务处理。A类=先证医学,
                           参数.事务。A类= 列表(p_最大值=p_ max_,t_incub公司=t_incub_fct),
                           时间折旧.事务处理。A类=错误的,
                           差异.事务。A类=错误的,
                           前缀host。A类=“H”,
                           
                           p退出。B类=p_退出_fct。B、,
                           param.p退出。B类=不适用,
                           timeDep.退出。B类=真的,
                           差异.退出。B类=错误的,
                           
                           p移动。B类=p_Move_fct。B、,
                           参数.pMove。B类=不适用,
                           timeDep.pMove公司。B类=错误的,
                           差异.移动。B类=错误的,
                           
                           联系。B类=n_contact_fct。B、,
                           param.n联系人。B类=不适用,
                           timeDep.n联系人。B类=错误的,
                           diff.n联系人。B类=错误的,
                           
                           p事务处理。B类=p_传输(_Trans_fct)。B、,
                           参数.事务。B类=参数_事务。B、,
                           时间折旧.事务处理。B类=错误的,
                           差异.事务。B类=错误的,
                           前缀host。B类=“V”,
                           
                           打印进度=错误的)
#>开始模拟
#>正在初始化。。。正在运行。。。
#>已完成。
#>该模拟已运行34个时间单位,共有106(a)和129(B)台主机被感染。

模拟完成后,它会报告时间单位的数量已运行模拟的最大数量(34),以及受感染的宿主A(106)和宿主B(129)。请注意,模拟有到达之前停在这里长度.sim当它穿过时这个最大感染。A类阈值设置为100。

走得更远

要分析和可视化您的诺索伊模拟输出,你可以看看第页.

使用双主机类型模拟与离散人口结构也可用: