[译]基于模型的机器学习 - 6.1 过敏模型
我们的首要目标是通过在 MAAS 数据中寻找规律,来加深对过敏发展(及其与儿童哮喘之间关系)的理解。为了理解本研究中的相关数据,我们需要先了解一点关于过敏诊断的知识。研究中的医生使用两类检测来尝试判断一个人是否对某种特定的过敏原(如猫毛或花生)过敏。这两类检测是:
皮肤点刺试验,即把一滴过敏原溶液滴在患者的皮肤上(见下图),然后用针刺破皮肤。如果皮肤出现免疫反应,表现为一定大小的红色隆起,则该检测为阳性,否则为阴性。
过敏原特异性 IgE 检测——这是一种血液检测,用于寻找一种叫做免疫球蛋白 E(IgE)的抗体,它专门针对某种特定的过敏原。这种抗体的存在是患者对该过敏原过敏的一个指标。如果这种抗体的含量足够高,检测即为阳性,否则为阴性。
如果一个孩子对某种过敏原的皮肤点刺试验或 IgE 检测为阳性,我们就说他对该过敏原致敏(sensitized)。
对参加本研究的孩子,这两种检测都针对八种过敏原进行:尘螨、猫、狗、花粉、霉菌、牛奶、鸡蛋和花生。为了能够随时间追踪过敏的发展,这些检测在不同年龄(1 岁、3 岁、5 岁和 8 岁)重复进行。因此,可用的数据点就是每个孩子、每种过敏原、每个年龄下的两项检测结果。
参与研究的临床医生相信,不同的过敏模式会使孩子易患不同的疾病,其中一些可能对孩子的健康产生重大影响(如严重哮喘),另一些则可能较为良性(如轻度花粉症)。项目的目标是识别出这些模式,看看它们是否能指示某些特定疾病的发展以及疾病的严重程度。我们的任务是开发一个能够实现这一点的过敏原数据集模型。
对检测结果建模
首先,让我们考虑一个孩子在某个时间点、针对某一种过敏原的检测结果模型。我们需要为每项检测的结果设置变量——我们把它们称为 skinTest 和 igeTest。如果对应的检测为阳性,这些变量为 true;为阴性则为 false。
请记住,这些检测的目的是尝试判断孩子是否真的对某种特定过敏原致敏(过敏)。然而,检测并非完全一致——例如,一个孩子出现 IgE 检测阳性但皮肤试验阴性的情况并不罕见。为了应对这种不一致,我们可以设置一个变量来表示孩子是否真正对该过敏原致敏,我们把它称为 sensitized。如果孩子确实对该过敏原致敏,这个变量为 true,否则为 false。然后我们允许检测结果偶尔与这个变量的取值不一致。换句话说,我们假设每项检测都可能给出假阳性(检测为阳性但孩子并未致敏)或假阴性(检测为阴性但孩子实际致敏)。
如果一个孩子对某种特定过敏原致敏(sensitized = true),那么皮肤点刺试验将以某个概率为阳性(skinTest = true),我们把这个概率称为 probSkinIfSens。由于我们预期检测大多数时候是正确的,我们会预期这个概率较高但小于 1,因为皮肤点刺试验可能出现假阴性。反过来,即使孩子对某种特定过敏原并未致敏(sensitized = false),我们偶尔也可能预期皮肤点刺试验出现阳性,但概率较低,我们称之为 probSkinIfNotSens。尽管这个概率很低,我们仍预期它大于零,因为皮肤点刺试验可能出现假阳性。
这两个概率共同定义了 skinTest 以 sensitized 为条件的条件概率表。
表 6.1:$P(\text{skinTest} \mid \text{sensitized})$ 的条件概率表。表的列对应被条件变量 skinTest 的取值,行对应条件变量 sensitized 的取值,表格单元中包含条件概率值。
我们把这两个概率作为随机变量引入模型,是因为我们希望从数据中学习它们,以确定皮肤点刺试验的假阳性率和假阴性率。为了学习它们的取值,我们必须为每个变量提供合适的先验分布,用以编码我们对它们的假设。让我们把这些假设写下来:
1 如果一个孩子对某种特定过敏原致敏,那么他得到阳性检测结果的概率很高。
2 如果一个孩子对某种特定过敏原不致敏,那么他得到阳性检测结果的概率很低。
正如第 2.6 节所述,我们可以使用 beta 分布作为概率上的先验分布来表示这些假设。假设 6.1 说我们预期 probSkinIfSens 较高,因此我们可以使用偏好较高概率值的 Beta(2,1) 先验。假设 6.2 说我们预期 probSkinIfNotSens 较低,因此我们可以使用偏好较低概率值的 Beta(1,2) 先验。有了这些先验概率,我们现在就可以为皮肤试验画一张因子图,用到我们早在第 2.6 节中引入的 Table 因子。
图 6.1:一个把皮肤点刺试验结果(skinTest)与潜在的过敏致敏状态(sensitized)关联起来的模型。skinTest 变量被观测为等于检测的实际结果,因此以阴影表示。
现在我们有了皮肤试验的模型,可以再加入对应的 IgE 检测模型。我们同样需要为“致敏时阳性的概率” probIgeIfSens 和“未致敏时阳性的概率” probIgeIfNotSens 设置概率变量,并配以相应的 beta 分布先验。sensitized 变量在两项检测之间共享,因为两项检测都在尝试检测同一个潜在的致敏状态。由此得到的、包含两项检测的因子图如图 6.2 所示。
图 6.2:一个把两种过敏检测的结果与潜在过敏致敏状态关联起来的模型。每类检测都有自己的概率变量,这意味着每项检测可以有不同的假阳性率和假阴性率。检测结果是被观测的,因此以阴影表示。
在这个模型中做推断使我们能够把两项检测的结果融合成单一的潜在致敏状态。学习真阳性和假阳性的概率将让模型学会该更关注哪项检测。例如,如果某项检测的假阳性概率很高,那么它的阳性结果对致敏状态推断的影响,就会小于假阳性概率较低的检测的阳性结果。
对随时间变化的检测建模
对每个孩子,我们在多个时间点(1、3、5 和 8 岁)都有检测测量结果。这样一组测量结果被称为时间序列,而对这类数据的分析被称为时间序列分析。为了理解过敏的发展,我们需要构建一个关于过敏检测结果时间序列的模型。
我们可以从在每个时间点复制图 6.2 的因子图开始来构建时间序列模型。这会在每个年龄引入一个独立的 sensitized 变量,我们可以把它们叫做 sensitized1、sensitized3、sensitized5 和 sensitized8。它也会在每个年龄引入独立的检测结果变量,我们同样可以叫它们 skinTest1、igeTest1、skinTest3、igeTest3,依此类推。然而,在每个时间点直接复制“给定致敏/未致敏时阳性检测概率”的变量,会带来一个问题。我们真的预期检测的假阳性率和假阴性率会随时间变化吗?如果每个年龄做的是完全相同的检测,那么假设假阳性率和假阴性率不随时间改变是合理的。让我们把这个假设写下来:
3 对每一类检测,研究中进行的所有此类检测的假阳性率和假阴性率都相同。
这个假设的结果是,皮肤试验的概率变量(probSkinIfSens、probSkinIfNotSens)和 IgE 检测的概率变量(probIgeIfSens、probIgeIfNotSens)将在所有时间点之间共享。这种共享的结果就是图 6.3 的因子图。
图 6.3:过敏检测结果时间序列的一个初始模型,这些结果由一系列潜在的致敏状态来解释。每项检测的假阳性/假阴性概率变量在所有时间点之间共享。
你也许会疑惑,为什么我们把每个时间点的变量都画了出来,而不是用一个板块(plate)把它们全部折叠在一起。这是因为,在对时间序列建模时,我们预期时间上较晚的变量会依赖于较早变量的取值。通过把所有变量都画出来,我们现在就可以添加连接跨时间变量的因子。但这些因子应该是什么呢?
在 1 岁时,孩子已经对某种特定过敏原致敏存在某个初始概率——我们把它称为 probSens1。现在,假设孩子在 1 岁时未致敏(sensitized1 = false),那么他到 3 岁时变为致敏存在某个概率——我们把它称为 probGain3。反过来,如果孩子在 1 岁时已致敏(sensitized1 = true),那么他到 3 岁时保持这种致敏存在某个概率——我们把它称为 probRetain3。我们可以用一个 Table 因子来对此建模,就像我们为皮肤试验和 IgE 检测建模时所做的那样。
当我们考虑 5 岁时,需要问自己一个问题:我们认为 5 岁时的致敏取决于之前两个致敏状态(1 岁和 3 岁),还是只取决于最近的那个(3 岁)?类似地,我们认为 8 岁时的致敏取决于之前全部三个致敏状态(1、3 和 5 岁),还是只取决于最近的那个(5 岁)?这两种假设中的任何一种都可能是合理的,具体取决于免疫系统运作的细节。目前,我们将假设只有最近的那个致敏状态是相关的,因为这样能把模型简化到最大程度:
4 一个孩子在某个时间点是否对某过敏原致敏,只取决于他在前一个时间点是否对该过敏原致敏。
这类假设在时间序列建模中非常常见,以至于它有一个名字——为纪念俄国数学家安德烈·马尔可夫(Andrey Markov),它被称为马尔可夫假设。我们的马尔可夫假设意味着,我们可以像在 3 岁时那样,对 5 岁和 8 岁的致敏建模。因此,对于 5 岁,我们有变量 probGain5 和 probRetain5,表示 3 岁到 5 岁之间获得或保持致敏的概率。类似地,对于 8 岁,我们有变量 probGain8 和 probRetain8,表示 5 岁到 8 岁之间获得或保持致敏的概率。和 3 岁一样,我们可以用 Table 因子来对 5 岁和 8 岁的致敏建模,从而得到图 6.4 的因子图。
图 6.4:一个改进后的时间序列模型,其中每个时间点的过敏致敏状态取决于前一个时间点的致敏状态。与检测假阳性/假阴性率相关的变量和因子被淡化处理,以突出模型中新加入的因子。
看看图 6.4,你可以看到一条连接各致敏变量、贯穿时间的因子链,从 sensitized1 一直到 sensitized8。这种链式结构是做出马尔可夫假设的时间序列模型的常见特征,因此被称为马尔可夫链。
完善模型
为了完善我们的时间序列模型,我们需要把它扩展到覆盖多种过敏原和多个孩子。我们可以为过敏原和孩子分别添加板块,并把致敏变量以及皮肤/IgE 检测变量放入这两个板块内,因为每个孩子、每种过敏原都有检测和致敏状态。假设 6.3 说我们检测的假阳性率和假阴性率在整个研究中都相同,因此变量 probSkinIfSens、probIgeIfSens、probSkinIfNotSens 和 probIgeIfNotSens 位于两个板块之外。这样就只剩下与初始拥有、获得和保持致敏的概率相关的变量了。我们希望这些变量能够在不同过敏原之间变化,以便我们能够学习不同过敏是否在不同时间点被获得或失去。因此这些变量必须位于过敏原板块之内。但如果我们想要学习多个孩子共有的、获得或失去致敏的模式,就必须让这些概率变量在孩子之间共享。目前,做到这一点的唯一办法是把它们放在孩子板块之外。这对应于下面这个假设,也是本模型的最后一个假设:
5 与初始拥有、获得或保持对某种特定过敏原致敏相关的概率,对所有孩子都相同。
有了这个假设,我们现在就可以画出带板块的因子图了,其中的变量被恰当地放置在每个板块的内部或外部(见图 6.5)。
图 6.5:一个针对多个孩子和多种过敏原的完整过敏检测模型。板块用于在孩子和过敏原之间复制某些变量(讨论见正文)。与图 6.4 一样,与检测假阳性/假阴性率相关的变量和因子被淡化处理。
在图 6.5 中,你可以看到:
- 检测的假阳性/假阴性概率位于两个板块之外,因此在所有孩子和所有过敏原之间共享;
- 初始拥有、获得和保持致敏的概率位于过敏原板块之内、孩子板块之外,因此在孩子之间共享,但可以在过敏原之间不同;
- 检测结果和致敏状态位于两个板块之内,因为每个孩子、每种过敏原都有检测和致敏状态。
有了这些板块,我们现在就有了一个完整的模型,可以用于我们的皮肤和 IgE 检测结果数据集。
回顾我们的假设
和前几章一样,我们应该花点时间回顾一下我们的建模假设。它们汇总在表 6.2 中。
| 假设 | 内容 |
|---|---|
| 6.1 | 如果一个孩子对某种特定过敏原致敏,那么他得到阳性检测结果的概率很高。 |
| 6.2 | 如果一个孩子对某种特定过敏原不致敏,那么他得到阳性检测结果的概率很低。 |
| 6.3 | 对每一类检测,研究中进行的所有此类检测的假阳性率和假阴性率都相同。 |
| 6.4 | 一个孩子在某个时间点是否对某过敏原致敏,只取决于他在前一个时间点是否对该过敏原致敏。 |
| 6.5 | 与初始拥有、获得或保持对某种特定过敏原致敏相关的概率,对所有孩子都相同。 |
表 6.2:我们的过敏模型所编码的五个假设。
假设 6.1 和假设 6.2 看起来是安全的假设——如果这些检测在大多数时候都不正确,医生也就不会使用它们了。假设 6.3 看起来是一个合理的假设,但我们可能会担心检测对不同过敏原有不同的假阳性/假阴性率。也有可能检测在研究过程中被改进或更新,从而使这些比率随时间变化。为了核实这一点,我们咨询了 MAAS 的临床医生,他们确认整个研究过程中检测的执行方式完全相同——相同的检测方法、相同的过敏原溶液,甚至是同一个人来做检测!因此这个假设看来相对安全。
假设 6.4 是我们的马尔可夫假设——这是一个常见的简化假设,但也常被批评过于简单。例如,在我们的情形中,它意味着获得/保持致敏的概率只取决于前一个时间点的致敏状态,而不取决于(比如说)孩子已经致敏(或未致敏)了多长时间。尽管如此,这个假设让模型保持简单,因此我们会沿用它。
最后,假设 6.5 说所有孩子都有相同的获得和失去致敏的模式。这个假设与项目的根本目的背道而驰,因为项目的目的正是要识别这些模式如何在不同孩子之间变化。本章其余的大部分内容都将用于探讨如何改进这个假设,但暂时保留它是有用的,这样我们可以先探索新模型的行为。
本页引入的概念回顾
过敏原(allergen) 某人可能过敏的一种物质,例如猫毛或花生。
皮肤点刺试验(skin prick test) 一种把一滴过敏原溶液滴在患者皮肤上、然后用针刺破皮肤的检测。如果皮肤出现免疫反应,表现为一定大小的红色隆起,则检测为阳性,否则为阴性。
IgE 检测(IgE test) 一种血液检测,用于寻找一种叫做免疫球蛋白 E(IgE)的抗体,它专门针对某种特定过敏原。如果这种抗体含量足够高,检测为阳性,否则为阴性。
时间序列(time series) 一系列按时间顺序排列的数据点,表示某个量随时间的测量值——例如股价、血压或人口计数。
时间序列分析(time series analysis) 对时间序列的分析,以理解时间序列数据背后随时间变化的过程。
马尔可夫假设(Markov assumption) 假定一个过程的某个状态只依赖于该过程的前一个状态,而不依赖任何更早的状态。以俄国数学家安德烈·马尔可夫命名。
马尔可夫链(Markov chain) 一个随机过程,其下一个状态的概率分布只依赖于前一个状态,而不依赖任何更早的状态。在因子图中,马尔可夫链表现为一条时间序列变量组成的链,相邻变量之间用因子连接。
下一节:试验模型
- 本文作者:BeanHsiang
- 本文链接:https://beanhsiang.github.io/post/2026-10-07-mbml-asthma_a_model_of_allergies/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。