PLOS Computational Biology 17(1): e1008545 · 2021
Sensor-based localization of epidemic sources on human mobility networks
只用少数观测节点的首次到达时间推断疫情源头,给出贝叶斯后验和"最可能区域"。这是目前读到的、在思路上最接近"传感器 + 源集合"的工作。
1研究问题
许多源检测方法要求某一时刻全网的感染状态,这在人类疾病场景里不现实。另一类方法只用少数观测节点(传感器)的到达时间,但很少利用流行病学模型和先验知识,也很少给出不确定性。作者针对霍乱这类水传播疾病,把三件事合在一起:传感器到达时间、人口流动网络上的随机流行病模型、贝叶斯先验。
2方法
- 建模到达时间。给定源 s,K 个观测节点的首次到达时间向量服从 K 维高斯分布,均值 μ_s、协方差 Λ_s。整体是一个以源为分量的高斯混合,沿用 Pinto 等 2012 年的框架。
- 标定参数。μ_s、Λ_s 不由最短路距离直接推出,而是用一个空间显式的随机霍乱模型(含有症状与无症状感染、细菌浓度、按引力模型的人口流动)反复模拟,再做统计平滑得到。
- 加入先验。源的先验可取均匀,也可取正比于各社区本地基本再生数 R0。
- 推断。后验最大者为点估计;按后验从大到小取节点,直到累计后验 ≥ 1−α,得到最高后验密度区域(HPD)。这个区域在"后验质量 ≥ 1−α"的集合中最小,但不要求在网络上连通。
在均匀先验下,点估计等价于以各源为类别的线性判别分析。
32000–2002 年 KwaZulu-Natal 霍乱
- 851 个社区节点,约 14 万报告病例,两波疫情。
- 每波从已被感染的社区中选加权度最高的 9 个作观测节点,约占 1%。
- 四种组合(两波 × 两种先验)下,后验最大的 10 个节点合计约占 0.70 的后验质量。
- 没有真实源可对照,作者结合地理与疫情时间线做了解释。
- 社区"被感染"定义为患病率首次超过 0.1%。阈值提高到 0.2% 时有观测节点始终未被感染,方法直接失效,因为没有处理右删失。
4合成实验
851 个节点轮流作为源,每个源模拟 400 次(300 次用于标定,100 次测试)。变化的因素:观测节点数(9 或 18 个,即 1% 或 2%)、部署方式(随机 或 高加权度)、先验(均匀 或 正比 R0)。
作者报告的主要发现:
- 高度数部署优于随机部署;用高度数部署时,9 个和 18 个观测节点表现相近。
- 观测节点增多时,95% 区域明显变小,覆盖略有下降。
- 95% 可信区域的实际覆盖,只对 R0 > 1.8 或人口中等以上的源能保持在 0.7 以上;对小 R0、小人口的源更低。
- 95% 区域可能超过 100 个节点;只有源的 R0 不太小且人口很大时,才缩到几十个节点。
5局限与读法
- 名义 95%,实测远低于 95%。这是贝叶斯可信区域与频率覆盖的区别,也和高斯假设对小 R0 源不合适有关(作者在讨论中提到)。
- 不确定性没有计入模型本身的误差,例如流动模型、霍乱模型的参数。
- 要求所有观测节点都被感染;有未感染观测节点时没有给出处理。
- 部署只比较了随机与高度数两种,没有优化部署。
6作者代码讲解:NetOrigin
实现整合在 R 包 NetOrigin(CRAN 版本 1.1-6),仓库 jmanitz/NetOrigin,提交 30ecd39b。本文方法由 Jun Li 贡献,函数为 origin_bayesian 与 compute_mu_lambda;包里其余方法(有效距离中位数、递归回溯)在代码注释中标注为 Manitz 等 2016 的方法,另有中心性方法。数据仓库 NetOrigin-data 本次没有下载。本节为静态阅读,未运行。
| 函数 | 作用 | 对应论文 |
|---|---|---|
stochastic_sib_model、initial_condition_sib_model | 随机 SIB 模型(易感—感染—细菌浓度)模拟病例,及其初值设定 | Methods:参数标定 |
compute_mu_lambda(train.data, obs.vec, candidate.thres) | 对每个候选源,用其模拟结果算观测节点到达时间的样本均值 μ_s 和收缩协方差 Λ_s(corpcor::cov.shrink) | 式 (3) 中的 μ_s、Λ_s |
origin_bayesian(events, thres.vec, obs.vec, mu.mat, lambda.list, poss.candidate.vec, prior) | 由病例矩阵和阈值得到各观测节点的首次到达时间;对每个候选算多元高斯对数密度,乘先验并归一化,按后验从大到小返回 | 式 (1)、(4) |
origin_edm、origin_backtracking、origin_centrality | 其他溯源方法 | 不属于本文 |
读代码才看得到的细节
- 只用"所有观测都被感染"的模拟。
compute_mu_lambda丢掉任何一个观测节点没被感染的模拟行;可用行数低于candidate.thres比例的节点不作为候选。这与论文"阈值高时有观测未感染、方法失效"的说法一致:均值和协方差是在"全部检测到"的条件下估计的。 - 用的是绝对到达时间。密度直接作用在观测的绝对时间上,相当于假设传播开始时间已知(合成实验中源在第 1 天感染)。这与 Pinto 2012 用时间差消去未知开始时间的做法不同。
- 节点数写死为 851。
origin_bayesian内部用rep(NA, 851)、1:851,只适用于 KwaZulu-Natal 网络,换图需改代码。 - 没有内置 HPD 区域。函数只返回排序后的后验表,95% 区域要使用者按累计后验自行截取。
- 观测节点的到达时间若为 NA(未感染),多元密度会得到 NA,代码没有处理。
7与你的方案(传感器部署 + 有效源集合)的关系
| 维度 | 本文 | 你的方案 |
|---|---|---|
| 观测 | 传感器首次到达时间(同) | 传感器首次到达时间,含"未感染"记录 |
| 集合 | 后验 ≥ 1−α 的最小集合 | 对每个固定源覆盖 ≥ 1−α 的检验反演集合 |
| 覆盖 | 平均意义,实测对部分源低于 0.7 | 逐源,设计上保证 |
| 部署 | 只比较随机与高度数 | 以期望集合大小为目标优化 |
这是方案最需要引用和对照的工作。它本身给出了你的方案的动机:传感器场景下用后验区域,部分源会严重欠覆盖。本项目 10 月 11 日在小模型上也观察到同样现象(后验 90% 可信集的最差固定源覆盖只有约 0.34)。
可作基线:后验 HPD 区域(同一模型下),报告它的逐源覆盖分布与集合大小。