宾夕法尼亚大学因果推断笔记-全-
宾夕法尼亚大学因果推断笔记(全)
1:欢迎来到因果推断速成课程 🎬

在本节课中,我们将了解这门课程的目标、内容结构以及学习因果推断的重要性。我们将探讨如何区分相关性与因果关系,并介绍课程将涵盖的核心概念与实用工具。
我们经常听到研究表明一件事与另一件事相关联。一些朋友会迅速在社交媒体上分享这些发现,而另一些人则持怀疑态度。
那么,我们如何知道何时相关性等于因果关系?我们如何区分一项研究的好坏?如果你有自己的研究问题,哪些最佳的研究设计和分析方法能帮助你回答这些问题?
本课程将在概念层面进行教学。我们将尝试回答诸如“什么是因果效应和潜在结果”、“如何批判性地思考因果关系”以及“这些统计方法背后的直觉是什么”等问题。
课程将包含如何设计研究并在实践中实施因果推断方法的细节。同时,课程还将提供使用免费统计软件 R 分析真实数据的示例。
我很高兴有这么多人报名并对这一重要主题感兴趣。感谢你的参与。我希望你能从中收获良多。
课程总结
本节课我们一起了解了《因果推断速成课程》的开设目的与核心内容。课程旨在帮助我们理解因果效应的基本概念,学习区分相关与因果,并掌握使用 R 软件进行实际数据分析的方法。在接下来的课程中,我们将逐步深入这些主题。
2:因果关系的困惑 🤔



在本节课中,我们将探讨为什么因果关系有时会引发争议或令人困惑。我们将通过分析虚假相关、个人轶事、科学报道和反向因果等具体例子,来理解建立因果推断这一正式研究领域的重要性,并以此作为后续课程学习的动机。
虚假相关




上一节我们介绍了因果关系可能令人困惑,本节中我们来看看第一个原因:虚假相关。虚假相关指的是两个无关的变量,可能在一段时间内偶然地高度相关。
以下是一个典型的例子:





图中展示了美国缅因州2000年至2009年的离婚率(红色曲线)与人造黄油人均消费量(黑色曲线)。两条曲线走势非常接近。如果不了解这些变量,人们可能会认为它们相互关联或影响。但考虑到它们是“缅因州离婚率”和“人造黄油消费量”,我们有理由怀疑它们实际上并无因果关系。
这个例子中,虚假相关是显而易见的。我们并不认为离婚会影响人造黄油的消费,反之亦然。但在现实中,我们可能遇到两个关系不那么明确的变量,这时就会产生困惑:这究竟是虚假相关,还是真实的因果关系?识别现实世界中的这类虚假相关例子,有时会让因果关系显得不可知。因果推断领域将帮助我们回答这个问题。







个人轶事
另一个使因果推断变得混乱的原因是个人轶事。许多人对自己生活中的因果效应抱有坚定的信念,并乐于分享这些故事。
例如,某人可能会告诉你:“上次我受伤时,用了这种药膏,对我很有效。”但我们如何知道他们是否正确?这需要我们解答。


另一个常见的情况是,当某人长寿时,人们会问他的秘诀。假设比尔·史密斯活到了105岁,他有一个独特的习惯:每天吃一个芜菁。因为他认识的人中只有他这样做,并且他长寿了,所以他相信这有助于他的长寿。
但我们实际知道什么?我们只知道两件事:
- 他活到了105岁。
- 他每天吃一个芜菁。
我们并不知道他的饮食是否真的影响了他的寿命。请注意,这里说的是“影响”,因为他的饮食也可能缩短了他的寿命(尽管他活到了105岁,但如果吃别的,或许能活更久)。我们根本不知道这是否存在因果关系,即不知道是延长、缩短还是毫无影响。更重要的是,我们不知道如果其他人养成这个习惯会发生什么。这类轶事的隐含意义通常是:“这不仅对我有效,我推荐你也这样做,因为它对你也会有效。”但我们实际上并不知道情况是否如此。
科学报道与新闻标题
另一个引发大量讨论、怀疑和辩论的领域是科学报道和新闻标题。很多时候,科学记者会小心避免使用任何形式的“导致”一词,但他们使用的许多词汇带有暗示性,容易被解读为因果关系。
以下是我近年来发现的一个真实标题:
“高红肉饮食与炎症性肠病相关”
读到这个标题的人可能会想:“我不应该吃红肉了。”这里具有暗示性的词是“相关”,但“相关”的含义并不明确。他们是在说一种因果关系(即少吃红肉会降低患炎症性肠病的风险)吗?还是像前面幻灯片中展示的虚假相关一样,只是碰巧有关联但并无因果关系?仅从标题无法明确其真正含义,必须深入研究该研究的设计和方法,才能判断这是否是因果关系。
另一个例子:
“研究显示电子游戏与学业成绩存在正相关”
同样,“相关”一词再次出现。这在标题中非常常见,但其含义不明确。他们用“研究显示”稍微缓和了一下语气,但仍不清楚这是否为因果关系。可能爱玩电子游戏的人恰好本来就是成绩较好的学生(无论玩不玩游戏),也可能是玩电子游戏本身有助于提高学业成绩(例如,提高注意力)。从这个标题看,并不清楚。




还有一个例子:
“男性仅喝一两杯啤酒,前列腺癌风险飙升四分之一”
这听起来绝对是因果关系,因为“飙升”一词暗示饮酒影响了风险。但他们不可能随机分配男性去喝更多啤酒,所以这一定是一项观察性研究。那些摄入更多酒精的男性似乎前列腺癌风险更高。但如果我们改变饮酒行为,会影响前列腺癌风险吗?从标题看并不清楚,尽管它有所暗示。因此,我们仍需仔细审视研究方法,看是否能得出因果结论。
最后,一个巧妙的标题:
“研究显示,打网球可降低任何年龄段的死亡风险”
这里的关键词是“降低”。同样,这听起来像是因果关系:多打网球,就不太可能早逝。但这是否是因果关系,在我看来并不明确。

关于所有这些标题,有一点需要注意:由于因果关系通常不明确,对于任何此类标题,你都可以轻易地说“这只是相关,相关不等于因果”。但如果你对结果感到兴奋,你也可能分享这个标题。人们对这类标题的怀疑程度,很大程度上取决于他们的观点。如果你是个网球爱好者,看到这个标题,你可能会在社交媒体上分享,感到兴奋。而如果你的生活方式不那么活跃,也许你不相信网球对你有益,看到这样的标题,你可能会非常怀疑,并说“这只是相关”。很多时候,人们对标题的怀疑程度取决于他们先前的信念。我们希望在很大程度上摆脱这一点,真正根据证据本身来审视:研究是如何设计的?使用了什么统计方法?做了哪些假设?然后严格基于证据,而不是基于我们先前的信念,来对因果关系做出判断。



反向因果关系
上一节我们讨论了虚假相关和新闻标题,现在我们来探讨所谓的“反向因果关系”。这里我们考虑的是这样一种情况:两个变量之间的关系可能是因果性的,但因果方向可以是任意的。
举个例子,假设我们感兴趣的是城市绿地与运动量之间的关系。一种假设是,如果城市有更多绿地,那么这与运动量有关,但具体是怎样的关系呢?这里有一个问题:是爱运动的人更倾向于优先选择住在绿地附近吗?如果城市里有一个漂亮的公园,也许那些已经经常锻炼的人会想搬到那里。所以,可能是拥有大量绿地的城市吸引了爱运动的人居住。
另一方面,这可能是研究人员更感兴趣的问题(特别是那些想鼓励人们多运动的研究者):城市环境中的绿地会导致人们更多地运动吗?也许已经住在城市里的人,如果你建造更多绿地、更多公园,他们的运动量会增加。因此,在横断面观察性研究中,我们可能会看到绿地越多,运动量越大。但这里的因果箭头可能指向任一方向:绿地可能导致人们更多地运动,也可能吸引爱运动的人来居住,或者是两者的结合。要厘清这一点,我们需要仔细检查这些变量之间的时间关系,并确保我们的数据能够提供某种信号,表明绿地的变化是否导致了已居住在那里的人运动量的变化。这类研究必须设计得非常仔细,否则我们就会陷入困惑,不知道因果箭头指向哪个方向。




因果推断领域简介

我们已经列举了许多例子来说明因果关系为何令人困惑。这旨在阐明我们为何需要一个正式的因果推断领域,以及你为什么可能对学习这门课程感兴趣。
因果推断或因果建模领域试图澄清许多这类困惑。一种方法是提出因果效应的正式定义:我们所说的“因果效应”到底是什么意思?一旦我们明确了因果效应的含义,特别是针对特定研究问题或研究感兴趣的因果效应,那么我们需要哪些假设才能从数据中识别出因果效应?我们要么提前设计研究,知道我们希望收集哪种数据;要么我们已经有了数据,并想知道需要哪些假设才能利用这些数据识别因果效应。
因果推断领域的研究人员努力识别因果假设:我们需要假设什么才能得到这些因果效应?与此相关的是,在观察性研究中,我们必须控制变量,即控制那些被称为“混杂变量”的因素——这些变量既会影响我们感兴趣的处理或暴露,也会影响结果。关于我们需要实际控制哪些变量,存在一些规则。在未来的视频中,我们将花相当多的时间讨论为了估计因果效应需要控制哪些变量。
因果推断领域的另一个重要贡献是敏感性分析。敏感性分析关注的是,你的结果对我们某些因果假设可能被违反的情况有多敏感?我们必须做出因果假设来识别因果效应,但如果这些假设被违反了怎么办?敏感性分析试图量化这一点:如果我们的假设被轻微违反,会改变我们的结论吗?如果被严重违反,会多大程度上改变我们的结论?因此,敏感性分析是因果推断的重要组成部分,我们将在后面讨论。
因果推断简史
我想简要介绍一下因果推断领域的历史。在此过程中,我会遗漏许多重要贡献,对此我向被遗漏者表示歉意,但这只是一个非常概括的概述。统计学家们思考因果建模已有很长时间,一些关键的最初贡献可以追溯到20世纪20年代的赖特和奈曼。但大约从20世纪70年代起,它才真正成为一个正式的统计研究领域,并且此后一直在不断发展。
以下是几个重点:
- 潜在结果的重引入:其中一个最重要的成果是潜在结果框架的重引入,例如鲁宾1974年经典论文中的“鲁宾因果模型”。之所以说“重引入”,是因为这在20世纪20年代的论文中实际上已经讨论过,但在几十年里很大程度上被遗忘了。自20世纪70年代以来,它已成为思考和讨论因果效应的常规词汇的一部分。
- 因果图:另一个重要贡献是因果图,由罗宾斯、格林兰和珀尔等人做出了关键贡献。在未来的视频中,我们将花大量时间讨论因果图。它们通常被认为非常有助于我们写下我们认为的世界是如何运行的,特别是关于我们感兴趣研究的变量。一旦你画出这些因果图,相关的理论已经发展出来,可以指导你需要控制哪些变量来识别因果效应。我们将看到,这些因果图与潜在结果框架相关联,两者之间的联系将帮助我们在估计因果效应时决定使用何种统计方法。
- 倾向得分:在估计因果效应方面,一个主要贡献是倾向得分,由罗森鲍姆和鲁宾首次引入。
- 时间依赖性混杂:过去二三十年另一个主要研究领域与“时间依赖性混杂”有关。粗略地说,这指的是处理或暴露随时间变化的情况,并且某一时间的暴露会影响未来许多不同的变量,而这些变量又会影响未来的处理,从而形成一种反馈循环。那么,当所有这些变量相互影响时,如何估计随时间变化的处理对结果的联合因果效应呢?这是一个非常困难的问题,但已经取得了很大进展,关键贡献来自杰米·罗宾斯和他的“G-方法”。
- 最优动态治疗策略:另一个令人兴奋的领域涉及最优动态治疗策略。这是另一个非常困难的研究领域,在21世纪取得了很大进展。“动态治疗策略”指的不仅仅是治疗A是否优于治疗B,而是针对具有特定特征的这位患者,我应该给他哪种治疗?作为某些实际变量的函数,什么是最优治疗?其中一些变量可能随时间变化。如何根据一些重要的临床变量来识别最优策略?这个领域已经取得了很大进展。
- 靶向学习:最后,在机器学习领域,有一种称为“靶向学习”的通用方法最近变得流行起来。这更像是一种基于半参数理论和高维数据的机器学习方法,我认为已经取得了许多有希望的结果,这主要由马克·范德兰和他的合作者开发。





课程展望与总结



现在,我们展望一下未来。本视频旨在为课程的其余部分提供一些背景和动机。接下来,我们将专注于从观察性研究和所谓的“自然实验”的角度进行因果推断。在很大程度上,我们将忽略随机对照试验,尽管随机对照试验将是我们因果推理的一部分(在随机对照试验中,你实际上是随机分配处理或暴露)。在观察性研究中,处理或暴露就是现实世界中的样子,没有直接的人为干预。自然实验我们稍后会讲到,它指的是现实世界中某些情况看起来像是随机的,即使我们没有正式进行随机化。
随着我们更深入地研究因果建模,记住以下几点很重要:
- 我们必须做出一些不可检验的假设(即因果假设)。“不可检验”意味着我们无法真正从数据中检查它是否为真,我们必须基于某种信念做出假设。当然,很多时候,这种信念并非盲目的,我们很大程度上能够判断这些假设是否合理。但正因为无法检验,这些是我们必须相信其为真的假设,这也是我们进行敏感性分析的原因。
- 科克伦在1972年关于观察性研究的经典论文提醒我们,观察性研究需要保持相当的谦逊,因为我们只能声称是在摸索着接近真相。因此,即使我们学习因果推断领域,并且相信我们能更好地把握因果关系,我们也不会确切知道是否达到了目标。所以我们需要保持谦逊,并始终牢记这一观点。
在本节课中,我们一起学习了因果关系为何令人困惑,探讨了虚假相关、个人轶事、科学报道的模糊性以及反向因果等问题。我们了解到,正是这些挑战催生并推动了因果推断这一正式研究领域的发展,该领域通过定义因果效应、建立识别假设、发展控制混杂的方法以及进行敏感性分析,来帮助我们更严谨地探索和理解因果关系。记住,在因果推断的道路上,我们既要运用严谨的方法,也要保持必要的谦逊。
3:潜在结果与反事实 🧠



在本节课中,我们将学习因果推断的两个核心概念:潜在结果与反事实。我们将从定义和符号开始,这些符号将在整个课程中使用。理解这些概念对于定义因果效应至关重要。





处理与结果



上一节我们介绍了课程概述,本节中我们来看看因果推断的基本要素:处理与结果。当我们思考因果效应时,核心问题是某个处理对某个结果产生了何种影响。



- 处理:也称为暴露,用变量 A 表示。它可以是环境暴露、药物等任何我们想了解其对结果影响的事物。在本课程中,我们通常考虑二元处理,即只有两种处理选项。
- 结果:用变量 Y 表示。它可以是任何我们关心的结局指标。


以下是处理与结果的例子:
- 处理示例:
- 流感疫苗:
A = 1表示接种,A = 0表示未接种。 - 他汀类药物:
A = 1表示服用,A = 0表示未服用。 - 活性药物 vs 安慰剂:
A = 1表示活性药物,A = 0表示安慰剂。
- 流感疫苗:
- 结果示例:
- 心血管疾病:
Y = 1表示两年内患病,Y = 0表示未患病。 - 死亡时间:
Y是一个连续变量,表示存活时间。
- 心血管疾病:
潜在结果




上一节我们定义了观察到的结果 Y,本节中我们来看看一个更基础的概念:潜在结果。潜在结果是指在每种可能的处理下,我们将会观察到的结果。这是一种事前的、假设性的思考。
我们使用上标符号来表示潜在结果:Y^a 表示当处理 A 被设定为特定值 a 时将会观察到的结果。



在二元处理的情况下,每个人都可以被认为拥有两个潜在结果:
Y^1: 如果接受处理(A=1)时的结果。Y^0: 如果未接受处理(A=0)时的结果。
让我们通过例子来理解:

示例1:流感疫苗
- 处理
A: 流感疫苗(1=接种,0=未接种)。 - 结果
Y: 个体患上流感所需的时间。 - 潜在结果:
Y^1: 如果该个体接种了流感疫苗,他患上流感所需的时间。Y^0: 如果该个体未接种流感疫苗,他患上流感所需的时间。






示例2:麻醉方式
- 处理
A: 麻醉方式(1=区域麻醉,0=全身麻醉),研究对象为髋部骨折手术患者。 - 结果
Y: 主要肺部并发症(1=发生,0=未发生)。 - 潜在结果:
Y^1: 如果该患者接受了区域麻醉,是否会发生肺部并发症。Y^0: 如果该患者接受了全身麻醉,是否会发生肺部并发症。

反事实
上一节我们介绍了事前的潜在结果,本节中我们来看看一个事后的概念:反事实。反事实结果是指,在实际情况已经发生之后,去思考如果处理方式不同,结果将会是怎样的。



反事实与潜在结果紧密相关,但视角不同:
- 如果你的实际处理是
A=1,那么你的反事实结果就是Y^0(即,如果你没接受处理会怎样)。 - 如果你的实际处理是
A=0,那么你的反事实结果就是Y^1(即,如果你接受了处理会怎样)。
示例:流感疫苗有效吗?
假设你实际接种了流感疫苗(A=1)并且没有生病(观察到的结果 Y = Y^1 = 未生病)。
那么,你的反事实问题是:如果我当初没有接种疫苗,我会生病吗?
对应的反事实结果就是 Y^0。这个结果我们永远无法真正观察到,因为它与事实相反。



潜在结果与反事实的联系
现在,让我们总结一下潜在结果与反事实之间的关系。

在研究开始前、任何处理决定做出之前,所有结果都是潜在结果(Y^0 和 Y^1)。它们代表了未来可能发生的两种假设情形。


在研究结束后、处理决定已经做出并观察到结果后:
- 观察到的结果是与你实际接受的处理相对应的那个潜在结果,记为
Y^A(例如,若A=1,则观察到Y^1)。 - 反事实结果则是与你实际接受的处理相反的那个潜在结果,记为
Y^(1-A)(例如,若A=1,则反事实结果是Y^0)。



通常,我们假设反事实结果与潜在结果是相同的数值概念,只是思考的语境(事前假设 vs 事后反思)不同。因此,这两个术语经常被互换使用。
总结
本节课中我们一起学习了:
- 处理(A)与结果(Y) 是定义因果效应的基本变量。
- 潜在结果(
Y^a) 是一种事前的、假设性的概念,指在每个可能的处理下将会发生的结果。 - 反事实结果 是一种事后的概念,指在已知实际处理的情况下,思考“如果处理不同,结果会怎样”。它对应于那个未被观察到的潜在结果。
- 潜在结果与反事实在数值上被认为是相同的,它们是连接观察数据与因果推论的核心桥梁。理解它们对于后续学习如何定义和估计因果效应至关重要。
4:假设性干预 🧪
在本节课中,我们将要学习假设性干预的概念。我们将探讨因果效应的含义,区分定义明确与定义不明确的因果效应。我们会讨论可操纵变量的含义、假设性干预的一般概念,并介绍因果推断的根本问题——它是什么、为何具有挑战性,以及我们如何开始思考克服这个问题的方法。



什么是干预?🔧
上一节我们介绍了课程主题,本节中我们来看看干预的具体含义。

我们之所以要定义干预,是因为思考干预的因果效应是一种清晰的方式。有时干预也被称为行动。通常,干预指的是一个可以被操纵的变量——无论是在假设中,还是在实践中我们确实能够操纵它。我们将详细讨论这意味着什么,但核心思想是:我们关注的是那种我们可以进行干预、操纵或采取行动的变量。


如果能做到这一点(即使只是思想实验),我们就可以思考这类变量的因果效应。


“无操纵则无因果” 📜
Holland 曾提出“无操纵则无因果”,这句话在因果推断领域被广泛引用。
其主要观点是:对于那些你无法想象去操纵的变量,思考其因果效应是困难的。然而,干预的因果效应通常是定义明确的。


例如,假设我们想比较药物A与药物B的因果效应。原则上,我们可以想象操纵这个过程:给一些人药物A,给另一些人药物B,并决定谁接受哪种药物。从这个意义上说,我们是在操纵它,我们可以想象采取某种行动。因此,如果我们想知道药物A相比药物B的因果效应是什么,至少在原则上,理解其含义是相对容易的。也就是说,我们可以假设性地干预某人服用何种药物。
“治疗的单一版本”假设 💊
与此相关的是“治疗的单一版本”这一概念。有时这也被称为“无隐藏治疗版本”的假设。
例如,假设我们感兴趣的是身体质量指数(BMI)对健康结果的因果效应。这是一个常见的研究兴趣点,例如,你会听到很多关于肥胖对健康影响的讨论。
但这里我们遇到了一个问题:因为达到一个特定BMI值的方法有很多种。无论是考虑一般的BMI,还是体重或肥胖,假设我们想假设性地操纵BMI(这是我们感兴趣的自变量),我们就会遇到问题,因为存在许多潜在的实现方式,而这些不同的方式可能与不同的结果相关联。
我们可以想象,例如,可能通过开具减肥药来帮助某人达到特定BMI,或者通过锻炼、饮食、手术等多种方式。这意味着,如果我们把BMI视为某种“治疗”或暴露变量,那么达到特定值的方法不止一种,而你所使用的方法可能与结果相关。
一个极端的例子是吸烟。在某些情况下,人们通过吸烟来减肥。吸烟可能是降低BMI的一种方式,但吸烟本身可能与你感兴趣的结果相关。因此,在思考BMI或肥胖的因果效应时,我们进入了困难的领域,原因之一就是不存在“治疗的单一版本”,而且它也不是那种容易操纵的东西。
在这种情况下,更好的做法可能是思考旨在操纵体重的特定干预措施的因果效应。如果我们对体重、BMI或肥胖对某个结果的因果效应感兴趣,与其试图估计那个难以定义的东西,不如思考某个旨在影响体重或BMI的干预措施的因果效应是什么。



不可变变量的挑战 🧬
另一个困难的案例是不可变变量。
这里我们谈论的是诸如种族、性别或年龄等事物。作为研究者,我们甚至无法在假设中真正改变或操纵这些变量。当我们思考潜在结果或反事实时,我们是在想象如果治疗是另一种情况,可能会发生什么。
假设我们对种族对某个结果的因果效应感兴趣。思考一个潜在结果是非常困难的:如果你的种族不同,结果会是什么?因为我们无法直接操纵它。这是一个我们无法操纵的变量的例子,这使得因果推断变得相当困难。年龄也是如此。我们可以看到,随着人们年龄增长,他们患某些结果的风险更高,但很难想象实际物理上操纵他们的年龄意味着什么。
因此,在这些情况下,因果效应的定义更加困难。当我们思考这类变量的因果效应意味着什么时,我们进入了更具挑战性的领域。



应对策略:关注可操纵的干预 🛠️

上一节我们讨论了不可变变量带来的挑战,本节中我们来看看如何应对。


一种解决方法是,与其直接思考这些变量及其因果效应(因为你无法直接干预它们),不如思考你可以操纵的相关事物,即你可以采取行动的干预措施。

例如,关于种族,你可能感兴趣的是:招聘实践中是否存在基于种族的歧视?我们无法想象改变某人的实际种族,然后看他们是否会被雇佣,但我们可以潜在地发送完全相同的简历,唯一的区别是名字听起来像是人们通常联想到的非裔美国人名字还是白人名字。简历上的名字是我们可以直接操纵的东西,然后我们就有可能识别出那种特定类型干预的因果效应,即基于名字听起来是非裔美国人还是白人的招聘歧视。实际上已经有很多这类研究。

关于肥胖,你可以想象例如减肥手术。减肥手术的因果效应是什么?因为这里实际上做出了决定:我是否应该接受减肥手术?这是可以采取的行动,是一种干预,是可操纵的,因此我们有希望在那里识别出因果效应。
社会经济地位是一个非常宽泛的概念,不容易直接操纵某人的社会经济地位。但我们可以想象一种干预,例如,给某人一笔钱作为礼物。这笔额外收入、这笔额外的钱对你感兴趣的某个结果有什么影响?赠送金钱是我们可以直接操纵的事情。



本课程的焦点 🎯


在课程的剩余部分,我们将主要关注那些我们可以视为干预措施的治疗或暴露变量。至少,在假设上,我们可以想象一种干预。


一种有助于判断某个变量是否属于可操纵类型、是否属于假设性干预的方法是:能否想象一个随机试验?你可以设想一个假设的试验。你能想象一个可能存在的、可以操纵这个变量的假设随机试验吗?可能实际进行这个试验是不道德的,但我们应该能够想象它可能发生。
例如,在伦理上,我们可能不能随机分配人们吸烟或不吸烟,但我们可以假设性地想象这样做,对吧?这可能不符合伦理,但我们至少可以想象它。因此,在这种情况下,吸烟原则上可以被视为可操纵的,所以我们可以想象吸烟的因果效应。

然而,我们无法真正想象一个会改变某人种族或改变某人BMI的假设试验。但这并不是说年龄、种族、性别或肥胖没有因果效应。我认为大多数人都相信存在。只是很难定义在这些背景下我们正式所说的因果效应是什么,而且我们很难将其很好地纳入潜在结果框架。在本课程中,我们将使用潜在结果框架来识别因果效应。因此,广泛认为这些(种族、性别、肥胖等)存在因果效应,但只是它不能非常清晰地融入这种涉及数据和估计等形式化的因果框架。这些都是非常困难的问题。


我们将专注于稍微容易一点的问题:那些我们可以视为假设性干预的变量。

为何关注假设性干预? 🤔
我们关注假设性干预,因为它们的含义定义明确,这是关键原因之一。此外,它们具有潜在的可操作性,这实际上是一个非常关键的点。
如果你知道了肥胖的因果效应(假设存在一个),你能做什么呢?你的下一步将是:我能对此做什么?你会开始想象各种行动。因此,如果我们发现肥胖正在缩短人们的寿命,并且我们真的相信这是一个因果效应,那么我们会想弄清楚我们能做什么。我们会提出干预措施。所以,实际上,我们会想知道那个特定干预措施的因果效应是什么。
这样,我们就回到了假设性干预和因果效应的框架。如果我们坚持这个假设性干预的框架,那么我们最终会得到具有潜在可操作性的输出。
那么,什么是因果效应? ⚖️
现在我们来广泛地想象一下。当潜在结果 Y(1) 和 Y(0) 彼此不相等时,我们就说发生了因果效应。因此,如果暴露或治疗变量 A 对 Y 有因果效应,那么 Y(1) 就不同于 Y(0)。也就是说,治疗下的潜在结果不同于未治疗下的潜在结果。
作为一个例子,假设一小时后我的头痛消失了。变量是“一小时后头痛是否消失”,结果是“是”或“否”。我们的观察结果 Y 等于值“是”(如果一小时后头痛消失)或“否”(否则)。

让我们想象可能的治疗是布洛芬。我们称之为 A,A = 1 表示你服药,A = 0 表示你不服。
那么在现实中,我们只看到一种情况。你可能会这样说:“我服用了布洛芬,我的头痛消失了。因此,药物起作用了。”我相信在现实生活中,你会听到人们说这样的话。我经常听到类似的说法:某人做了某事,观察到了某个结果,然后他们说“因此它起作用了”。



但这实际上不是正确的因果推理。他们真正告诉你的只是:Y(1) = 1。换句话说,他们只告诉了你:在治疗下(即服用了布洛芬),结果(头痛消失)等于1。但如果你没有服用布洛芬,会发生什么?这是未知的。换句话说,你的反事实是什么?如果你没有接受治疗,你的头痛会自行消失吗?我们实际上并不知道。
因此,只有当这些潜在结果彼此不相等时,才存在因果效应。如果你的头痛无论如何都会消失,那么我们就不能说服用药物导致了你的头痛消失。




因果推断的根本问题 🚧

上一节我们通过例子引出了一个问题,现在我们来正式定义它:因果推断的根本问题。

希望你现在已经识别出了一个问题。这个问题被称为因果推断的根本问题:对于每个人,我们只能看到一个潜在结果。
在前面的例子中,我们不知道如果他们不服用布洛芬会发生什么。这是我们永远无法为那个人看到的东西。但我们刚刚说过我们需要知道它,才能知道是否存在因果效应。所以这是一个问题,事实上,这是根本问题。
然而,你可以做出某些假设来估计所谓的总体或平均因果效应。与其思考“这个治疗对我个人是否有效”,我们可以从整体上思考一个群体。我们永远无法知道的是所谓的单位水平因果效应或个体水平因果效应——如果我没有服用布洛芬,会发生什么?我实际上无法确切知道这一点。所以我们不会真正去思考针对个体的因果效应。

可以说这是一个几乎无解的问题。但可能的是思考类似这样的问题:如果每个头痛的人都服用布洛芬,头痛缓解率会是多少?与如果没有人服用相比呢? 现在我们不是在试图找出每个个体的因果效应,而是作为一个整体群体,如果每个人都做一件事与如果每个人都做另一件事相比,在这种情况下头痛率会如何?

这样,我们就能够对暴露或治疗在总体上、在群体水平上的效果做出一般性陈述。本课程的大部分内容将集中于此:估计这类群体水平的因果效应。
这就是我们处理因果推断根本问题的方法:通过观察整个群体,而不是观察个体。
总结 📝
本节课中我们一起学习了:
- 假设性干预的含义及其重要性:它帮助我们清晰定义因果效应,并使研究结果具有潜在的可操作性。
- 可操纵变量与不可变变量(如种族、年龄)的区别,以及为何后者在因果推断中更具挑战性。
- “治疗的单一版本” 假设,以及当变量(如BMI)存在多种实现方式时定义因果效应的困难。
- 应对不可变变量挑战的策略:转而研究与它们相关的、可操纵的具体干预措施的因果效应。
- 正式定义了因果效应:当潜在结果
Y(1) ≠ Y(0)时,治疗A对结果Y存在因果效应。 - 因果推断的根本问题:对于任何个体,我们只能观察到一种治疗状态下的结果,永远无法同时知道其反事实结果。
- 解决根本问题的出路:从估计个体因果效应转向估计群体平均因果效应,这是本课程后续内容的焦点。
通过将焦点放在假设性干预和群体效应上,我们为系统性地进行因果推断奠定了坚实的基础。
5:因果效应 🎯
在本节课中,我们将更正式地定义什么是因果效应。我们将讨论两种主要类型的因果效应:平均因果效应和对已治疗者的因果效应。我们将使用统计符号和潜在结果来形式化定义它们,并重点区分“条件化”于变量与“设定/操纵”变量之间的关键差异。
假设世界与平均因果效应
上一节我们介绍了因果推断的基本框架。本节中,我们来看看如何定义因果效应。
首先,设想一个我们感兴趣的人群,用一个圆圈表示。这个圆圈代表了你关心的所有人,或者说是你感兴趣的整体人群。






这可以看作是你的目标人群。例如,如果你关心糖尿病患者以及哪种治疗更好,那么你的人群就是糖尿病患者。这个圆圈代表了你感兴趣的整体人群。
现在,我们来思考假设世界。回忆潜在结果的概念,我们就是在思考假设世界和假设干预。我们现在仍然这样思考。我们还没有真正考虑数据,这只是想象我们理想中希望看到的情况。













我们理想中希望看到的是两个假设世界。


世界一,由这个灰色圆圈描绘,表示我们人群中的每个人都接受治疗A=0。治疗A=0可以是无治疗,也可以是安慰剂,随你想象。但我们描绘的是,在这个世界里,我们整个人群中的每一个人都接受了治疗A=0。
与之相对的是另一个假设世界,在那里每个人都接受了另一种治疗A=1。我们用这个浅蓝色圆圈来描绘。




但这里最重要的是,世界一和世界二拥有完全相同的人,是同一人群。只是在一种情况下,我们对他们做了一件事;在另一种情况下,我们做了另一件事。

如果我们能够同时观察到这两个世界,我们就可以从每个人那里收集结果数据。






然后我们可以取结果的平均值。



即世界一中Y的平均值,以及世界二中Y的平均值。



那么,这个差值就是平均因果效应。


这就是我们所说的平均因果效应。说它是“平均”,是因为它是一个均值,是一个总体层面的平均因果效应,覆盖了整个群体。我们问的是:如果每个人都接受一种治疗,平均结果会是什么?与如果每个人都接受另一种治疗相比呢?

当然,在现实中,我们不会同时看到这两个世界。但这是我们想要的,是我们定义为平均因果效应的东西。



我们可以用统计符号更正式地定义它。这里的E指的是期望值,也就是均值。







这里,我们取的是这两个潜在结果之差的平均值。记住,Y¹是如果接受治疗A=1时的潜在结果,Y⁰是如果接受治疗A=0时的潜在结果。然后我们可以取这个差值的平均值。




来得到平均因果效应。


所以,这个量,这个平均因果效应,就是如果每个人都被用A=1治疗时Y的平均值,减去如果每个人都被用A=0治疗时Y的平均值。这正是我在上一张幻灯片上展示的内容:世界一的Y均值与世界二的Y均值。


在Y是二分类变量的情况下,例如,这就只是一个风险差值。实际上,它是一个因果风险差值。







因为二分类变量的均值只是一个概率或风险,所以当结果是二分类时,潜在结果之差的均值就是一个风险差值,在这里就是因果风险差值。
平均因果效应示例
现在,我们来看一个平均因果效应的例子。

在这个情境下,我们比较髋部骨折手术中区域麻醉与全身麻醉对主要肺部并发症风险的影响。





这里,我们的人群,即之前幻灯片中的圆圈,是接受髋部骨折手术的人群,这就是我们的目标人群。


我们的结果Y是主要肺部并发症,这是一个二分类变量,是或否,1或0。

我们的治疗是区域麻醉与全身麻醉。




假设这里的因果效应,即平均因果效应,是-0.1。


现在,我们只是想象我们知道这个值,这样我们就可以思考因果效应的含义。



在这一点上,我们不考虑估计或其他任何事情。我们想象我们恰好知道这个因果效应是什么,我们想要解释它。



想象因果效应是-0.1。





这意味着,与全身麻醉相比,使用区域麻醉时,发生主要肺部并发症的概率要低0.1。

但思考概率或风险的差值意味着什么有点困难。一个有帮助的方法是用人数来量化。

我们可以想象,如果有1000人要进行髋部骨折手术,那么如果因果效应是-0.1,我们预计在区域麻醉下,发生肺部并发症的人数会比全身麻醉下少大约100人。

我们再来看另一个例子。假设治疗是噻嗪类利尿剂与无治疗,对象是高血压患者。


我们的结果Y是收缩压。

我们的人群,我们感兴趣的圆圈,是高血压患者。


我们感兴趣的是,使用噻嗪类利尿剂治疗是否有效。

现在想象真实的因果效应,这个总体平均因果效应是-20。

结果Y是收缩压。


那么,这意味着,如果你考虑服用噻嗪类利尿剂的高血压患者群体,平均而言,他们的收缩压值会比不服用这种特定药物时低大约20个单位。

条件化 vs. 设定 🔄

接下来,我们将重点讨论一个非常重要的主题,即条件化与设定的区别。


具体来说,我们考虑的是治疗。这涉及到一些统计符号,也涉及到概念性的理解,掌握这个区别至关重要。







首先,我们所说的“条件化”是指通常的统计意义上的条件化,即给定或基于某个特定变量,这里我们关注的是治疗变量A。




主要思想是,这个平均因果效应,即潜在结果之差的均值(我们在不等式左边看到的,E[Y¹ - Y⁰]),通常不等于观察到的结果Y在给定治疗A=1和A=0时的期望值之差。




这个想法是因果推断的基础。让我们思考一下这些不同类型的量意味着什么。


每当你在期望值中看到这条竖线,你可以将其解读为“给定A=1时Y的期望值”。但我通常喜欢把它看作是定义了一个亚人群。所以,与其说“给定A=1”,不如说“在A=1的人群中Y的期望值”,或者“在由A=1定义的人群亚组中Y的期望值”。这条竖线,这种条件化,实际上是将范围限制在一个亚人群。
所以,E[Y | A=1] 意味着在实际接受治疗A=1的人群亚组中,Y的平均值是多少。但他们可能与整个人群有重要的不同。例如,流感风险较高的人可能更倾向于选择接种流感疫苗。
想象情况确实如此,流感风险较高的人更可能接种流感疫苗。那么,如果我们取实际接种了流感疫苗的人群中Y的期望值,我们取的是在一个较高风险人群中的Y期望值。
这与潜在结果Y¹的期望值不同,因为Y¹是如果整个人群都接受治疗A=1时的结果,它没有限制在某个亚人群。所以,当我说“设定”治疗时,我指的是操纵或在潜在结果情境下的干预。当我说“条件化”于治疗时,我指的是限制在亚人群。
我们可以用图示来看。再次想象我们感兴趣的人群是这个圆圈。但在现实中,有些人接受了A=0。这是左边灰色的部分圆圈。你会注意到,它不再是原始人群了。它是实际接受A=0的人群。在这一点上,我们没有假设性地操纵任何东西。这只是现实。有些人实际接受了A=0。这就是他们。


在右手边,这个蓝色的部分圆圈,是实际接受A=1的人群亚组。你会注意到,这些不是同一群人。所以我们可以取这两个亚人群的均值。



这将是由治疗组定义的亚人群之间结果的平均差异。




所以,它将是两个亚人群之间结果的差异。


但接受治疗A=0的人可能与接受治疗A=1的人在基本方面存在差异。因此,我们并没有分离出治疗效果,因为这是不同的人群,他们通常可能具有不同的特征。





这就是为什么“条件化”与“设定”之间的区别非常重要。我们目标瞄准的是这个平均因果效应,即我们在同一群人身上操纵治疗。



与我们实际观察到的东西相对,即由治疗定义的亚人群之间的均值差异。

所以,条件化与设定。正如我提到的,第一行指的是在实际接受治疗A=1的亚人群中Y的期望值。


但这与潜在结果Y¹的期望值不同,Y¹是如果整个人群都用A=1治疗时Y的均值。




通常,接受治疗者与未接受治疗者之间的均值对比不是一个因果效应。



因为它只是在比较两个不同的人群,而这些不同的人群可能在许多方面存在差异,这些差异独立于他们的治疗。他们可能在治疗上不同,但也可能在许多其他变量上不同。
而E[Y¹ - Y⁰],这个潜在结果之差的期望值,是一个因果效应,因为我们比较的是同一人群,唯一不同的是治疗。所以,在一种情况下,我们给每个人治疗A=0;在另一种情况下,我们给每个人治疗A=1。这样我们就分离出了治疗效果。
这是整个课程中都需要牢记的一个非常关键的区别。我们始终瞄准的是涉及潜在结果均值的量。


其他因果效应类型

但这个平均因果效应只是众多可能的因果效应之一。



你可能还对许多其他因果效应感兴趣。



你的选择可能取决于你研究的具体问题,甚至是你可用的数据。这些内容将在课程后面部分涉及,但我会给出几个因果效应的例子。



这里,我们现在取的是潜在结果的比值,而不是差值。所以这是E[Y¹] / E[Y⁰]。如果我们有二元结果,这将是一个因果相对风险。






我们取的是如果所有人都被治疗时的风险与如果没有人被治疗时的风险之比,所以这是一个因果相对风险。

另一个人们感兴趣的常见例子是对已治疗者的因果效应。

你会注意到这里我们条件化于A=1。

这就是“对
6:因果推断速成课 - 因果假设 🧠



在本节课中,我们将学习因果推断中至关重要的四个核心假设。这些假设是连接潜在结果与观测数据的桥梁,是进行有效因果推断的理论基础。我们将逐一探讨它们的含义、作用以及重要性。





概述



因果效应的可识别性需要我们做出一些无法通过数据检验的假设。统计上的可识别性,指的是能够从实际数据中估计出某个参数。在因果推断领域,我们面临一个根本性问题:我们无法同时观测到同一个体的所有潜在结果。因此,为了识别因果效应,我们必须引入一些假设,这些假设被称为因果假设。
最常见的四个因果假设是:
- 稳定单元处理值假设
- 一致性假设
- 可忽略性假设
- 正值性假设
在讨论这些假设时,我们默认观测数据包含一个结果变量 Y,一个处理变量 A,以及一组处理前的协变量 X。X 可以理解为研究中收集的背景信息,例如人口统计学特征、临床诊断等,是我们希望控制的变量集合。




稳定单元处理值假设 (SUTVA) 🧱
SUTVA 假设可以看作由两部分组成:无干扰性和单一版本处理。
上一节我们提到了因果推断的基本问题,本节我们首先来看 SUTVA 假设如何简化我们对潜在结果的定义。
1. 无干扰性
无干扰性是指个体之间互不干扰。这里的“单元”通常指人(如患者)。所谓“干扰”,是指一个单元接受的处理会影响另一个单元的结果或处理效果,有时也称为“溢出效应”或“传染效应”。
以下是可能存在干扰的场景示例:
- 行为干预研究:如果研究对象之间相互交流,那么一个人所受干预的效果可能取决于与他互动的人接受了何种干预。
- 疫苗研究:一个人接种疫苗的效果可能取决于总体人群的接种比例。
通常,我们假设无干扰性成立,即给某人分配处理时,其效果不依赖于其他人的情况。虽然存在处理干扰的因果推断方法,但本课程不涉及。
2. 单一版本处理
这部分假设要求处理只有一种明确的版本。这一点很重要,因为它关系到能否将潜在结果有效地与观测数据联系起来。如果存在多种版本的处理,连因果效应的定义都会变得模糊,并引发其他问题。因此,我们假设存在一个定义清晰、我们可以对其进行干预的单一处理变量。
SUTVA 的优势在于,它允许我们仅根据个体自身的处理状态来定义其潜在结果。我们无需考虑其他所有人的处理状态,这极大地简化了问题。在许多情况下,这是一个合理的假设。



一致性假设 🔗




一致性假设直接连接了潜在结果与观测数据,其原则相对简单明了。


上一节我们了解了 SUTVA 如何简化问题,本节我们来看一个更直接的连接假设——一致性。



该假设表述为:当实际接受的处理 A = a 时,观测到的结果 Y 就等于在该处理水平下的潜在结果 Yᵃ。

用公式表示即:
Y = Yᵃ if A = a
换句话说,如果个体实际接受的处理是 a,那么他观测到的结果就是他假设接受处理 a 时会出现的潜在结果。这个假设为所有可能的处理水平 a 建立了观测结果与潜在结果之间的直接对应关系。
可忽略性假设 🎲
可忽略性假设可能是我们将要讨论的最重要、最受关注的假设,有时也称为“无未测混杂”假设。
在建立了观测与潜在结果的直接联系后,我们面临的核心挑战是处理并非随机分配。本节引入的可忽略性假设旨在解决这个问题。
该假设的基本思想是:在给定一组处理前协变量 X 的条件下,处理分配 A 与潜在结果 Y⁰, Y¹ 独立。
用公式表示即:
(Y⁰, Y¹) ⫫ A | X

这里的符号 ⫫ 表示独立性。X 通常被认为是混杂变量集合。在实践中,处理可能分配给更年长或病情更重的人(即非随机),但一旦我们控制了诸如年龄、健康状况等变量(即 X),我们就可以认为处理近似于随机分配。


在具有相同 X 值的人群中,处理分配可以被视为与潜在结果无关。这里的“随机”特指与潜在结果独立,而不一定是其他意义上的随机。

示例:假设 X 是“年龄”(简化为“年轻”或“年长”)。年长者更可能接受处理(A=1),同时年长者本身发生结果(如髋部骨折)的风险也更高,无论是否接受处理。在这种情况下,处理并非随机分配(边际上不独立)。但如果年龄是唯一影响处理分配和结果的变量,那么在“年轻”和“年长”这两个群体内部,处理分配可以看作是随机的。此时,我们说在给定年龄的条件下,处理分配是可忽略的。
这个假设之所以关键,是因为如果我们拥有足够多且正确的协变量 X,那么处理分配本身就不再是需要担心的因素,它变得“可忽略”,相当于实现了随机化。

正值性假设 📊



正值性假设指的是,每个人(在给定协变量 X 的条件下)都有一定的机会接受任何一种处理。


理解了可忽略性假设让我们能够在控制X后视处理为随机,我们还需要确保有足够的数据来估计效应。这就是正值性假设的作用。


该假设要求:对于每一个协变量 X 的取值 x 和每一种处理 a,个体接受该处理的概率都大于零。





用公式表示即:
P(A = a | X = x) > 0 for all a, x



换句话说,处理不能是协变量 X 的确定性函数。以前面的年龄例子来说,如果所有年长者都接受了处理(概率为1),而所有年轻者都没接受处理(概率为0),这就违反了正值性假设。但如果年长者只是更可能接受处理,而年轻者也有机会接受处理,则不违反。



我们需要这个假设的原因很明确:为了了解在每种处理情境下会发生什么,我们需要数据。如果在某个 X 水平下,所有人都接受了处理,我们根本无法了解如果他们未接受处理会发生什么。只要在每个 X 水平下,都既有接受处理的人也有未接受处理的人,我们就有希望估计该群体内的因果效应。


正值性假设也帮助我们定义了感兴趣的人群。如果有些人永远不可能接受某种处理,我们通常会将他们排除在研究之外,只对那些有机会接受处理的人群进行推断。总之,如果处理分配是完全确定的,我们将缺乏识别因果效应所需的数据。
利用假设连接观测数据与潜在结果 🔄
现在,我们将运用这些因果假设,正式建立观测数据与潜在结果之间的连接。


前面我们分别介绍了四个核心假设,本节我们将看到如何综合运用它们,从纯粹的观测数据表达式中推导出涉及潜在结果的表达式。



我们从仅涉及观测数据的一个期望值开始:
E[Y | A = a, X = x]
这表示在治疗 A = a 且协变量 X = x 的子群体中,观测结果 Y 的平均值。



第一步:应用一致性假设
根据一致性假设,当 A = a 时,观测结果 Y 等于潜在结果 Yᵃ。因此,上式等于:
E[Yᵃ | A = a, X = x]
至此,我们利用一致性假设,将纯观测表达式与潜在结果联系起来。
第二步:应用可忽略性假设
根据可忽略性假设,在给定 X 的条件下,处理分配 A 与潜在结果 Yᵃ 独立。这意味着,一旦条件于 X,再条件于 A 不会提供关于 Yᵃ 均值的额外信息。因此,我们可以去掉条件中的 A:
E[Yᵃ | X = x]
这一步完全依赖于可忽略性假设。
第三步:获得边际因果效应
我们最终感兴趣的往往是边际因果效应,即不条件于特定 X 值的总体平均效应(例如,潜在结果期望值的差 E[Y¹] - E[Y⁰])。为了从 E[Yᵃ | X = x] 得到 E[Yᵃ],我们需要对协变量 X 的分布进行积分(或求和):
E[Yᵃ] = ∫ E[Yᵃ | X = x] dP(x)
由于 E[Yᵃ | X = x] = E[Y | A = a, X = x](通过前两步推导),我们最终得到:
E[Yᵃ] = ∫ E[Y | A = a, X = x] dP(x)
这个公式表明,潜在结果的总体平均值可以通过对观测数据中条件期望值按协变量分布进行加权平均来获得。
总结
本节课我们一起学习了因果推断的四个核心基础假设:
- 稳定单元处理值假设:包含无干扰性和单一版本处理,它简化了潜在结果的定义,使其仅依赖于个体自身的处理状态。
- 一致性假设:直接建立了实际接受的处理所对应的观测结果与潜在结果之间的等价关系。
- 可忽略性假设:这是最关键的一步,它假定在控制了足够的预处理协变量后,处理分配与潜在结果独立,相当于在协变量条件下实现了随机化。
- 正值性假设:确保在每一个协变量组合下,都有个体接受每一种处理,从而为我们提供了估计因果效应所需的数据支持。
最后,我们看到了如何综合运用一致性和可忽略性假设,从一个纯粹的观测数据表达式出发,逐步推导出与潜在结果相关的表达式,并最终通过积分得到我们关心的边际因果效应。这些假设是连接理论与现实、从观测数据中识别因果效应的基石。
7:因果推断速成课 - 分层法 📊

在本节课中,我们将学习一种估计因果效应的方法:分层法。我们将探讨如何通过分层和标准化来识别因果效应,并了解这种方法的局限性,以及为什么在实际应用中我们通常需要其他更复杂的因果推断方法。


分层与边际化:标准化的核心
上一节我们介绍了如何将观测结果与潜在结果联系起来。本节中,我们来看看如何通过分层和边际化来估计边际因果效应。
我们通常感兴趣的因果效应是边际因果效应,即不依赖于特定协变量 X 的效应。例如,平均因果效应定义为:
E[Y¹] - E[Y⁰]
注意,这个公式中没有条件于 X。
为了从条件于 X 的期望值得到我们想要的边际期望值,我们需要对协变量 X 的分布进行平均。这个过程被称为标准化。
标准化的核心公式如下:
E[Yᴬ] = Σₓ { E[Y | A=a, X=x] * P(X=x) }
其中:
E[Yᴬ]是我们想得到的潜在结果Yᴬ的期望值。E[Y | A=a, X=x]是在治疗A=a且协变量X=x的子群体中,观测结果Y的期望值。这是我们可以从数据中计算出来的。P(X=x)是协变量X在总体中的边际分布概率。Σₓ表示对所有X的可能取值求和。

简单来说,标准化就是先按重要变量分层计算效应,然后按照这些变量在总体中的分布进行加权平均。

一个实例:糖尿病药物比较 💊


为了说明标准化的过程,我们来看一个假设的例子。
我们的研究人群是糖尿病患者,我们想比较两种口服降糖药:沙格列汀(较新)和西格列汀。结局指标是主要不良心脏事件。

一个挑战是:使用沙格列汀的患者更可能有其他口服降糖药的使用史。而有此历史的患者本身发生心脏事件的风险就更高。如果不考虑这个因素,直接比较可能会产生误导。


以下是处理这个问题的步骤:
第一步:按关键变量分层
我们的关键变量 X 是“是否有其他口服降糖药使用史”。我们按此将总体分为两层:
- 无使用史组
- 有使用史组
然后,我们在每一层内分别计算两种药物的心脏事件发生率。





以下是原始数据汇总表(未分层):
| 治疗 (A) | 发生MACE (Y=1) | 未发生MACE (Y=0) | 总计 | P(Y=1 | A) |
|---|---|---|---|---|
| 沙格列汀 (A=1) | 350 | 3650 | 4000 | 350/4000 = 8.8% |
| 西格列汀 (A=0) | 500 | 6500 | 7000 | 500/7000 ≈ 7.1% |



粗看之下,沙格列汀组的事件率(8.8%)高于西格列汀组(7.1%)。但这可能是因为沙格列汀更多地用在了高风险(有用药史)患者身上。


第二步:计算层内条件期望

现在,我们按“是否有用药史”进行分层,得到两个子表。
分层数据:
-
无用药史组 (X=0)
治疗 (A) Y=1 Y=0 总计 P(Y=1 | A, X=0) 沙格列汀 50 950 1000 50/1000 = 5.0% 西格列汀 200 3800 4000 200/4000 = 5.0% -
有用药史组 (X=1)
治疗 (A) Y=1 Y=0 总计 P(Y=1 | A, X=1) 沙格列汀 300 2700 3000 300/3000 = 10.0% 西格列汀 300 2700 3000 300/3000 = 10.0%
关键发现: 在每一层内部(即控制了用药史 X 后),沙格列汀和西格列汀的心脏事件发生率完全相同(无史组均为5%,有史组均为10%)。这表明,在控制了混淆变量 X 后,两种药物的效果没有差异。
第三步:边际化(标准化)
上一节我们得到了层内的条件期望。本节中,我们通过边际化来得到我们最终关心的边际潜在结果期望值 E[Yᴬ]。
我们以计算“若所有人都服用沙格列汀”的潜在结果期望 E[Y¹] 为例。根据标准化公式:
E[Y¹] = E[Y|A=1,X=1] * P(X=1) + E[Y|A=1,X=0] * P(X=0)
我们从数据中填入各个部分:
E[Y|A=1,X=1]= 300/3000 = 0.10P(X=1)= (3000+3000) / 11000 = 6000/11000 ≈ 0.545E[Y|A=1,X=0]= 50/1000 = 0.05P(X=0)= (1000+4000) / 11000 = 5000/11000 ≈ 0.455
代入计算:
E[Y¹] = (0.10 * 0.545) + (0.05 * 0.455) ≈ 0.0545 + 0.02275 = 0.07725 ≈ 7.7%
同理,我们可以计算“若所有人都服用西格列汀”的潜在结果期望 E[Y⁰],过程完全对称,结果同样是 7.7%。
因此,边际平均因果效应为:
ACE = E[Y¹] - E[Y⁰] = 7.7% - 7.7% = 0
这证实了两种药物在总体上的效果没有差异。
标准化方法的局限性 🚧
虽然标准化的概念清晰有效,但在实践中面临一个重大挑战:维度灾难。
在实际的观察性研究中,为了满足“给定 X 后治疗可忽略”的假设,我们通常需要控制许多协变量(如年龄、血压、多种病史、生活习惯等)。
如果我们尝试对所有变量组合进行分层,很快就会遇到大量空单元格的问题。也就是说,许多协变量值的组合在样本中根本不存在或只有极少数个体,导致我们无法在该层内可靠地计算 E[Y|A, X],从而使得标准化无法进行。
例如,同时按年龄(20-80岁,每岁一层)和血压(几十个分层)进行分层,会产生上千个格子,很多格子里面可能根本没有数据。

因此,我们需要能够处理高维协变量 X 的替代方法。



总结与展望 📝


本节课中我们一起学习了:
- 分层与标准化是估计边际因果效应的一种基础方法。其核心是先按混淆变量分层计算条件效应,再按该变量的总体分布进行加权平均。
- 我们通过一个糖尿病药物比较的实例,一步步演示了如何通过分层发现粗比较中的偏差,并通过标准化得到无偏的因果效应估计。
- 标准化方法在理论上是理想的,但在实践中因维度灾难而难以直接应用,当需要控制的变量很多时,会出现数据稀疏或空单元格的问题。
正因为标准化的这一局限性,在后续课程中,我们将探索其他更适用于现实复杂数据的因果推断方法,例如:
- 匹配法
- 逆概率加权法
- 倾向得分法
- 工具变量法
这些方法的核心思想,依然是为了实现某种形式的“标准化”,但通过更精巧的统计手段来克服高维数据的挑战。
8:新用户与主动比较器设计 🎯

在本节课中,我们将聚焦于两种重要的研究设计:新用户设计(Incident User Design)和主动比较器设计(Active Comparator Design)。我们将学习它们的基本概念、解决的问题,以及如何通过它们来减少混杂偏倚。
从横截面视角看治疗
上一节我们讨论了混杂因素,本节中我们来看看研究设计如何帮助我们应对挑战。首先,思考一种常见的观察方式:横截面观察。这意味着在某个特定时间点,对人群进行“快照”式观察。此时,一些人可能正在接受治疗,而另一些人则没有。
例如,假设我们想研究练习瑜伽对血压的因果效应。我们可能有一个群体,其中一部分人练习瑜伽,另一部分人不练习。这就是横截面观察:我们只关注当前谁在练习,而不考虑他们过去的治疗历史。
对于当前不练习瑜伽的人,他们可能过去练习过,也可能从未练习过。对于当前正在练习的人,他们可能是长期练习者,也可能是初学者。这带来了一个问题:对于那些过去练习过但现在停止的人,他们为何停止?也许瑜伽让某些人感到焦虑,导致他们停止练习。这些可能因瑜伽而血压升高的人最终退出了研究。此外,长期练习者与初学者或从未开始者可能存在很大差异。这种仅观察当前治疗状态(是或否)而不考虑完整历史的方法,会引入各种难以控制的选择偏倚。
新用户设计:聚焦于治疗起始
为了解决上述问题,我们可以采用新用户设计(也称为新起始者设计)。这种设计的基本思想是,只关注新近开始治疗的人群,而不是所有当前正在治疗的人(无论治疗了多久)。
在瑜伽的例子中,我们感兴趣的是那些开始练习瑜伽的人,并在他们开始后的一个预定时间点观察其结局(如血压)。这样,我们关注的因果问题就变成了:在从未练习过瑜伽的人群中,开始练习瑜伽的因果效应是什么? 通过将问题略微调整为关注“起始治疗”的效应,我们实际上获得了一个更清晰、更少偏倚的研究问题。
以下是新用户设计的关键优势:
- 消除遗留效应:避免了因过去治疗可能产生的持续效应(如长期练习者停止后仍受益)带来的混淆。
- 减少选择偏倚:避免了因治疗无效而停止治疗的人群与持续治疗人群混合造成的偏倚。
然而,新用户设计的一个挑战是:如何确定对照组(未治疗组)的随访起始时间(时间零点)? 对于治疗组,时间零点很明确,即他们开始治疗的时刻。但对于未治疗组,确定一个可比的时间零点则不那么直接,通常需要通过匹配基线特征等方法来解决。
主动比较器设计:比较两种主动干预
另一种强大的设计是主动比较器设计。在这种设计中,我们不将治疗组与“无治疗”组比较,而是与接受另一种主动干预或治疗的组进行比较。
在瑜伽的例子中,我们可能将瑜伽与另一种健身课程(如尊巴舞)进行比较。我们感兴趣的问题是:瑜伽与尊巴舞相比,哪种更有益? 这是一个两种主动干预的直接比较。
主动比较器设计的一个主要优点是能显著减少混杂。比较练习瑜伽的人和完全不运动的人,两组人可能差异很大。但比较选择两种不同健身课程(瑜伽 vs. 尊巴舞)的人,他们在健康意识、生活方式等方面可能更为相似。在药物研究的例子中,比较两种不同的降压药(如袢利尿剂 vs. ACE抑制剂)的患者,比比较用药者与不用任何降压药者,两组患者的基线特征通常更接近。
需要注意的是,主动比较器设计也改变了因果问题。它回答的是一个更具体、更狭窄的问题:两种特定主动治疗之间的相对效应,而不是治疗与“无治疗”之间的绝对效应。选择哪种设计,取决于你真正想回答的科学问题。
强强联合:新用户设计 + 主动比较器设计
在实践中,我们可以将新用户设计与主动比较器设计结合起来,这通常能产生非常稳健的因果推断。在这种联合设计中:
- 我们只纳入在某个时间点新开始两种治疗中任何一种的患者。
- 在治疗起始时间(时间零点),所有患者都未使用过这两种治疗中的任何一种。
- 从时间零点开始,患者开始接受治疗A或治疗B,我们对其进行随访。
这种设计确保了治疗组和对照组在治疗起始前具有可比的治疗史(均为“新用户”),并且由于比较的是两种主动干预,基线特征的差异可能更小,从而进一步减少了混杂偏倚。
设计的局限性与扩展
最后,我们需要认识到这些设计并非适用于所有情况。

以下是新用户与主动比较器设计的一些局限性:
- 无法实施新用户设计:对于某些暴露(如空气污染),可能不存在“零暴露”的时期,因此无法定义“新用户”。
- 科学问题不匹配:研究者可能真正感兴趣的就是与“未暴露”组进行比较(例如,吸烟者 vs. 完全不接触烟草者),而不是与另一种主动暴露比较。
- 关注点不同:本节课我们主要关注治疗起始这个“时点治疗”的设定。但因果推断中也有方法可以处理随时间变化的治疗(例如,持续治疗一整年 vs. 从不治疗),这涉及更复杂的时变处理效应分析。
总结
本节课我们一起学习了两种重要的观察性研究设计:
- 新用户设计:通过聚焦于新开始治疗的患者,避免了长期治疗者、治疗遗留效应和因无效而停止治疗带来的选择偏倚。
- 主动比较器设计:通过比较两种主动干预,利用两组患者在健康意识、求医行为等方面的相似性,有效减少了混杂偏倚。
将两者结合使用,即在新用户中比较两种主动治疗,是实践中进行因果推断非常有力且常用的策略。选择何种设计,最终取决于你想要回答的具体因果问题。
9:混杂因素与可忽略性 🧩

在本节课中,我们将学习因果推断中的一个核心概念:混杂因素。我们将探讨什么是混杂因素,它如何与“可忽略性”假设相关联,并了解为什么我们需要借助因果图来帮助我们识别和控制混杂因素。
什么是混杂因素?
上一节我们介绍了潜在结果和平均因果效应的概念。为了从观测数据中估计因果效应,我们需要做出一些假设,其中最关键的一个就是可忽略性假设。
可忽略性假设是指,在给定一组协变量 X 的条件下,治疗分配与潜在结果独立。用公式表示如下:
(Y(1), Y(0)) ⟂ A | X
其中,Y(1) 和 Y(0) 是潜在结果,A 是治疗分配。
如果这个假设成立,就意味着在具有相同 X 值的个体中,治疗分配就像是随机的,这使我们能够进行有效的因果推断。
混杂因素的定义与示例
混杂因素是那些同时影响治疗分配和结果的变量。这里“影响结果”是指独立于治疗之外的影响,而不是通过影响治疗来间接影响结果。
以下是几个例子,帮助我们理解什么变量是或不是混杂因素:
以下是三种常见情况的分析:
-
不是混杂因素:仅影响治疗
- 示例:假设治疗分配完全随机,比如通过抛硬币决定。
- 分析:抛硬币这个机制只决定了谁接受治疗,但本身不会影响健康结果。因此,它不是混杂因素。
-
不是混杂因素:仅影响结果(风险因素)
- 示例:有癌症家族史的人,未来患癌(结果)的风险更高。但家族史并不影响他们是否接受某种特定治疗的决定。
- 分析:这个变量只影响结果,不影响治疗分配。这类变量通常被称为风险因素,而不是混杂因素。它们不会破坏可忽略性假设。
-
是混杂因素:同时影响治疗和结果
- 示例:年龄较大的人,患心血管疾病(结果)的风险更高,同时他们也更可能被处方他汀类药物(治疗)。
- 分析:年龄同时影响了接受治疗的可能性和健康结果本身。如果不控制年龄,我们就会错误地将结果差异全部归因于治疗。因此,年龄在这里是一个混杂因素。
混杂因素控制的目标
基于以上理解,我们在进行因果推断时的核心任务之一就是混杂因素控制。这主要包含两个层面:
以下是混杂因素控制的三个关键步骤:
- 识别变量集合 X:找到一组协变量 X,使得在给定 X 后,可忽略性假设成立。也就是说,X 需要包含所有重要的混杂因素。
- 应用统计方法:在确定了合适的 X 后,我们需要使用相应的统计方法(如回归、匹配、加权等)来估计控制这些混杂因素后的因果效应。这将是本课程后续的重点。
- 借助因果图:识别出正确的变量集合 X 并非易事。我们将在未来的视频中引入因果图这一工具。因果图能以可视化的方式清晰展现变量间的因果关系,帮助我们系统性地识别出哪些变量必须被控制,哪些不需要,从而更科学地满足可忽略性假设。

总结
本节课中,我们一起学习了混杂因素的核心概念。我们明确了混杂因素是同时影响治疗和结果的变量,理解了它如何与可忽略性假设相关联,并认识到控制混杂因素对于获得无偏因果估计至关重要。最后,我们了解到,因果图将是帮助我们完成混杂因素识别这一关键任务的有力工具。在接下来的课程中,我们将深入探讨因果图的具体应用。
10:因果图入门 🧭

在本节课中,我们将学习因果图的基本概念。我们将熟悉相关术语,并开始理解变量之间“路径”的含义。因果图是进行因果推断的有力工具,它能帮助我们明确需要控制哪些变量,并使我们的研究假设变得清晰可见。
什么是因果图? 📊
上一节我们介绍了课程目标,本节中我们来看看因果图究竟是什么。
因果图,在因果推断文献中通常特指有向无环图,它是用于表示变量间因果关系的一种图形模型。它之所以有用,是因为它能帮助我们识别需要控制哪些变量以消除混杂偏倚,并以直观的方式将我们的假设明确呈现出来。
图形模型基础
接下来,我们通过一些简单的图形来理解核心概念。
首先,我们来看两个变量A和Y。它们被称为节点或顶点,可以代表单个变量,也可以代表一组变量。节点之间的连线称为边。
- 有向图:如果节点之间的边是箭头,例如
A → Y,则表示A直接影响Y。这构成了一个有向路径。 - 无向图:如果节点之间的边只是一条线,例如
A — Y,则表示A和Y之间存在关联,但因果方向未知。
图形模型编码了关于变量间关系的假设。它们能告诉我们变量是否相互独立、是否存在依赖关系或条件独立性。重要的是,它们还能用于推导非参数的因果效应估计量。
关键术语与路径
现在,让我们引入更多术语来理解更复杂的图形。
请看一个包含四个节点(W, Z, A, B)的图。路径是指沿着边从一个顶点到达另一个顶点的路线。例如,从W到B可能有两条路径:W → Z → B 或 W → Z → A → B。而从Z到W只有一条路径:Z → W。
什么是有向无环图?
我们之前提到了有向无环图,现在来详细定义它。顾名思义,它必须满足两个条件:
- 有向:所有边都必须是有方向的箭头。
- 无环:图中不能存在循环。例如,
A → B → Z → A这样的循环是不允许的。
一个合格的有向无环图,其所有连接都是箭头,并且没有任何路径能让你从某个节点出发,沿着箭头方向最终又回到该节点。
在后续课程中,当我们提到“因果图”时,指的都是有向无环图。
节点关系:父母、子女、祖先与后代
为了描述图中节点的关系,我们使用一套类似家族树的术语。这些概念应该很容易理解:
- 父母:如果一个节点有箭头直接指向另一个节点,那么它就是后者的父母。例如,在
A → Z中,A是Z的父母。 - 子女:承接箭头的节点就是发出箭头节点的子女。例如,Z是A的子女。
- 祖先与后代:通过一连串的箭头路径,可以定义更远的亲属关系。如果A是Z的父母,而Z是D的父母,那么A就是D的祖先,D就是A的后代。
需要注意的是,在有向无环图中,一个节点可以有多个父母。例如,一个节点D可以同时有B和Z两个父母。
因果图的核心用途
正如之前提到的,我们将使用有向无环图来帮助我们确定,为了控制混杂(即实现可忽略性),我们需要调整哪些变量集合。
然而,在深入探讨如何具体操作之前,我们必须先理解有向无环图与概率分布之间的关系。这将是后续内容的基础。

本节课中我们一起学习了:因果图(特指有向无环图)的基本定义、图形表示方法以及关键术语(如节点、边、路径、父母、子女等)。我们了解到因果图能直观展示变量间的因果假设,并最终将用于指导我们选择需要控制的变量,以进行有效的因果推断。
11:有向无环图与概率分布的关系 🔗📊

在本节课中,我们将学习有向无环图与概率分布之间的关系。我们将理解DAG如何编码关于概率分布的信息,并学习如何根据给定的DAG分解联合概率分布。
DAG与概率分布
上一节我们介绍了有向无环图的基本概念。本节中,我们来看看DAG如何编码关于变量或节点(顶点)的假设。一个DAG会告诉我们哪些变量是相互独立的,哪些变量在给定条件下是独立的,以及如何分解和简化联合概率分布。
以下是一个示例图,包含四个节点(或变量集):D、A、B和C。这是一个正确的有向无环图,因为图中只有有向路径。我们将探讨这个特定的DAG如何编码关于A、B、C和D联合分布的信息。你可以将A、B、C和D视为随机变量或随机变量集,它们必然有一个联合分布。这个DAG编码了关于该联合分布的假设。
那么,这个DAG具体告诉了我们什么?首先,它意味着在给定所有其他变量的条件下,C的条件分布等于C自身的概率。换句话说,C独立于所有其他变量。我们知道这一点是因为C是孤立的,没有任何变量影响它,它也不影响任何其他变量。因此,它是一个独立的随机变量。
其次,我们可以观察B的条件分布。B直接受A影响,间接受D影响(因为D影响A,A再影响B)。因此,在给定所有其他变量(C、D、A)的条件下,真正重要的是A。只要我们知道A,我们就知道了关于B概率的一切信息。D不会提供额外信息,因为D的影响已通过A体现。此外,C与B无关。因此,我们可以将条件分布简化为只依赖于A。
此外,D和B是边际相关的,因为D影响A,A再影响B。因此,它们不是边际独立的,而是相互关联的。这是我们可以从图中学到的另一个信息。
最后,考虑D的条件分布。我们可以将其简化为只依赖于A,因为B与D的关系也仅通过A。只要我们对A进行条件化,我们就知道了关于D所需的一切信息。C仍然是孤立的。
这些例子展示了如何从DAG中了解概率分布。为了更清晰地理解这些概念,我们来看另一个例子。
另一个DAG示例
考虑另一个DAG示例。在这个图中,如果我们观察A的条件分布,可以将其简化为只依赖于D,因为只有D直接影响A。因此,只要我们对D进行条件化,我们就知道了关于A的一切信息。
接下来,考虑D的条件分布。在这种情况下,我们可以从条件中剔除C,但仍需对A和B进行条件化。这意味着在给定B的条件下,D与C独立。为什么可以剔除C?因为一旦我们对B进行条件化,C就无法提供关于A的间接信息。C本身受B影响,但既然我们已经对B进行了条件化,C就不会提供新的信息。然而,我们需要对A和B都进行条件化,因为D直接影响A和B,所以A和B都能独立地提供关于D的信息。
现在,我们在图中添加一条从A指向C的箭头。这会产生什么影响?观察A的条件分布,现在我们可以从条件中剔除B,但需要保留C和D。A与B在给定C和D的条件下是独立的。因为D直接影响A,A直接影响C,所以我们需要对它们进行条件化。B仅通过其他变量(这些变量我们已经条件化了)与A间接相关,因此可以剔除B。
同样地,观察D的条件分布,我们只需要对A和B进行条件化,C不会提供关于D分布的新信息。因为从D到C的所有路径都经过A或B,而我们已经对这些变量进行了条件化。因此,在给定A和B的条件下,D与C是条件独立的。
联合分布的分解
上一节我们了解了DAG如何编码条件独立性。本节中,我们来看看如何根据DAG分解联合概率分布。给定一个DAG,我们可以通过依次仅对父节点集进行条件化来分解联合分布。
具体步骤如下:
- 从根节点(没有父节点的节点)开始。
- 沿着后代线进行,始终对父节点进行条件化。
让我们通过一个例子来明确这个过程。在这个例子中,有两个根节点:C和D。根节点是没有父节点的节点,因此C和D是根节点。我们从它们开始分解联合分布。
联合分布是P(A, B, C, D)。根据上述步骤,我们首先处理根节点。根节点是独立的随机变量,因此我们有P(C)和P(D)。接下来,我们寻找这些根节点的子节点。C没有子节点,因此处理完毕。D有一个子节点A,因此我们乘以P(A|D)。然后,我们寻找A的子节点,即B,因此乘以P(B|A)。最终,联合分布被分解为:
P(A, B, C, D) = P(C) * P(D) * P(A|D) * P(B|A)
这个分解是由DAG所隐含的。当然,这个分解并非普遍成立,但如果DAG是正确的,那么这就是联合分布的一个恰当分解。
为了更清楚地理解,我们来看另一个例子。在这个图中,只有一个根节点D。因此,我们从P(D)开始。接下来,寻找D的子节点,即A和B。因此,我们乘以P(A|D)和P(B|D)。然后,寻找A和B的子节点。A没有子节点,B有一个子节点C。因此,我们乘以P(C|B)。最终,联合分布被分解为:
P(A, B, C, D) = P(D) * P(A|D) * P(B|D) * P(C|B)
最后,我们在图中添加一条从A指向C的箭头。现在,C有两个父节点:A和B。因此,当我们处理C时,需要对它的两个父节点进行条件化。分解变为:
P(A, B, C, D) = P(D) * P(A|D) * P(B|D) * P(C|A, B)
我们可以看到,DAG直接告诉了我们如何分解联合分布。
DAG与分布的兼容性
因此,DAG与分布之间存在一种兼容性。回到这个特定的DAG,它隐含了一个特定的分解。我们可以认为这个概率分解与这个特定的DAG是兼容的。如果我从这个联合分布的特定分解开始,然后你向我展示这个DAG,我会说它们是兼容的,即该分解与该图兼容。
接下来,我们将反过来看。特定的概率函数不一定隐含唯一的DAG。这里有一个简单的例子,涉及两个DAG。第一个DAG包含两个节点A和B,箭头从A指向B,表示A影响B。第二个DAG包含相同的两个节点,但箭头从B指向A,表示B影响A。这两个DAG传达了不同的信息:第一个表示A影响B,第二个表示B影响A。但它们都告诉我们A和B是相关的。
然而,假设我不是从DAG开始,而是从某个概率陈述开始。例如,假设我告诉你P(A, B) ≠ P(A)P(B),这表示A和B是相关的,或者说A和B不是独立的。如果你从这个陈述开始,你可以画出DAG1或DAG2,但你不知道哪个是正确的。两个DAG都与这个概率陈述兼容。因此,概率陈述并不隐含唯一的DAG。相反,如果你从一个特定的DAG开始,它会隐含某些关于概率陈述的信息。

总结
本节课中,我们一起学习了有向无环图与概率分布之间的关系。我们了解到DAG可以编码变量之间的条件独立性,并指导我们如何将复杂的联合概率分布分解为更简单的条件概率的乘积。同时,我们也认识到,一个概率关系可能对应多个兼容的DAG结构,这体现了因果推断中从数据到模型的不唯一性。掌握这些关系是理解后续更复杂因果模型的基础。
12:路径与关联 🔗

在本节课中,我们将学习因果图模型中路径的基本类型,并理解不同类型的路径如何影响变量之间的关联关系。我们将重点探讨哪些路径能传递信息并导致变量关联,哪些路径则不能。
路径的类型 🛤️
上一节我们介绍了因果图的基本概念,本节中我们来看看连接图中两个节点的路径有哪些主要类型。理解这些类型是分析变量间关联的基础。
以下是三种基本的路径结构:
-
分叉路径
在这种结构中,一个中间变量 E 同时影响两个外部变量 D 和 F。其结构类似于一个叉子,信息从 E 流向 D 和 F。D ← E → F -
链式路径
在这种结构中,变量按顺序影响下一个变量,形成一个链条。例如,D 影响 E,E 再影响 F,信息沿着一个方向流动。D → E → F -
对撞路径
这种结构与分叉路径相反,两个外部变量 A 和 B 共同影响一个中间变量 G。箭头指向 G,看起来像信息在此对撞。A → G ← B
路径如何诱导关联 🤝
理解了路径的类型后,我们现在来看看这些路径何时会导致路径两端的变量(例如 A 和 B)相互关联。关联意味着它们不是独立的,一个变量的信息可以通过路径传递到另一个变量。
以下是能诱导关联的路径示例:
-
分叉路径(含共同原因)
当路径中存在一个共同原因(如 E)影响两端的 A 和 B 时,信息从 E 流向两者。因此,A 和 B 会通过 E 而相互关联(不独立)。A ← E → B -
链式路径(信息流)
在链式路径中,信息可以从一端流向另一端。例如,A 影响 G,G 再影响 B,那么 A 的信息就能传递到 B,导致两者关联。A → G → B
接下来,我们看看不会诱导关联的路径。关键在于路径中是否存在“对撞器”。
以下是不会诱导关联的路径示例:
-
对撞路径
在对撞路径A → G ← B中,A 和 B 的信息都流向 G 并在此“对撞”。没有信息从 G 流回 A 或 B,也没有信息直接在 A 和 B 之间流动。因此,仅通过这条路径,A 和 B 是独立的。A → G ← B # A 和 B 在此路径上独立 -
包含对撞器的复杂路径
即使路径更长、更复杂,只要路径上任何位置存在一个对撞器(变量有两个箭头指向它),它就会阻断信息的流动。例如,在路径A → G ← B → F中,G 是一个对撞器,它阻止了从 A 到 F 的信息流(反之亦然)。
总结 📝
本节课中,我们一起学习了因果图中的路径类型及其与变量关联的关系。
- 我们认识了三种基本路径:分叉路径、链式路径和对撞路径。
- 我们了解到,分叉路径和链式路径通常会在路径两端的变量间诱导出关联,因为信息可以通过共同原因或单向影响进行传递。
- 最关键的一点是,如果一条路径上存在对撞器(即一个有两个箭头指向它的变量),那么这条路径通常不会使其两端的变量相互关联,因为对撞器会阻断信息的流动。

理解路径与关联的规则,是后续学习如何通过控制变量(调整)来进行因果推断的基础。我们将运用这些知识,来识别为了估计因果效应而需要调整的变量集合。
13:条件独立与d-分离 🧩

在本节课中,我们将学习因果图论中的核心概念:如何通过“阻断”路径来建立变量间的条件独立性。我们将重点理解“阻断”的含义、认识“对撞节点”的特殊性,并最终掌握判断变量是否被“d-分离”的规则。
理解“阻断” 📌
上一节我们介绍了因果图的基本结构,本节中我们来看看如何通过控制路径上的节点来“阻断”信息流。路径可以通过控制路径上的节点来被阻断。
考虑一条路径:A 影响 G,G 影响 B。想象我们现在控制了变量 G。G 位于这条链的中间。在这种情况下,我们会阻断从 A 到 B 的路径。
之前我们展示过,在这样一条链中,信息确实能从 A 传递到 B,因此 A 和 B 是相关的。但这种相关性是通过 G 产生的:A 影响 G,G 最终影响 B。所以,实际上是 G 导致了 A 和 B 之间的关联,在某种意义上,它是将两者联系在一起的纽带。因此,如果我们控制了 G(“控制 G”是“阻断它”的另一种说法),我们就阻断了这条路径。这里的核心思想是:如果 G 位于这条链的中间,我们阻断它,就能使 A 和 B 变得独立。
以下是一个更具体的假设性例子:
- A 是温度(室外温度)。
- G 是人行道是否结冰。
- B 是某人是否摔倒。
显然,室外温度 A 会影响人行道是否结冰 G。而 G 会影响 B,即人行道是否结冰会影响某人是否摔倒。但我们假设 A 到 B 没有直接的箭头,即温度不直接影响某人是否摔倒(例如,如果外面很冷但没有冰,你摔倒的可能性并不比外面暖和且没有冰时更高,这只是为了说明而做的假设)。
A 和 B 在这里是边际相关的,温度和某人是否摔倒显然是相关的。如果是温暖的一天,就不可能有冰,因此某人不太可能摔倒。
然而,想象我们现在要阻断 G。控制 G 意味着我们使其同质化。在这种情况下,意味着我们固定了人行道是否结冰的状态。如果我们将其固定,那么 A 和 B 之间就不应该存在关联。例如,如果我控制 G,设想一个“人行道结冰”的世界,那么温度和摔倒应该是无关的。同样,如果我控制 G 并设定“人行道不结冰”,温度和某人摔倒仍然应该彼此无关。这就是通过使 G 对每个人都相同来阻断它,也就是我们所说的控制它。这就是“阻断”的含义。
阻断“分叉”路径 🍴
上一节我们介绍了如何阻断链式路径,本节中我们来看看如何阻断“分叉”路径。分叉路径上的关联也可以被阻断。
这里我们有一条路径,其中 G 同时影响 A 和 B,这是一个分叉。同样,A 和 B 彼此相关,因为 G 同时影响它们,我们在之前的视频中讨论过这一点。但现在,如果我们控制 G,我们将阻断从 A 到 B 的路径。在这个图中,A 和 B 彼此相关的唯一原因是 G 同时影响它们。因此,如果我们固定 G,为 G 选择一个值,控制它使其对每个人都相同,那么 G 就不再影响 A 和 B(因为我们把它固定了)。这样我们就阻断了这条路径,现在 A 和 B 彼此独立。所以,如果我们控制 G,就会阻断这条路径。希望这足够直观:我们可以阻断这类路径,可以阻断分叉,也可以阻断链。
对撞节点的特殊性 ⚡️
上一节我们看到阻断链和分叉能带来独立性,本节中我们来看看一个相反的情况:对撞节点。对撞节点会创造一种不同的、几乎可以说是相反的情况。
现在考虑一个倒置的分叉,即信息在 G 处发生碰撞。根据之前的视频,A 和 B 在这里实际上是独立的。所以 A 和 B 不通过这条路径关联,信息在 G 处碰撞。如果我们真的希望 A 和 B 彼此独立,我们实际上不需要做任何事情,没有需要阻断的路径,我们直接就能得到独立性。
然而,如果你控制了 G,你实际上会在 A 和 B 之间创造出一个关联。所以在这里,如果你阻断 G,实际上会在 A 和 B 之间诱导出关联,这和我们之前看到的效果几乎是相反的。
以下是一个简单的例子来帮助理解这个概念,因为它有时是反直觉的:
- A 是一个开关的状态(例如电灯开关),它要么开要么关。
- B 是第二个开关的状态。
- G 是灯泡是否亮起。
想象一下,我们通过抛硬币来决定 A,所以 A 完全独立于一切。同样,我们用另一枚独立的硬币来决定 B。现在想象,G 只有在 A 和 B 都处于“开”的位置时才会亮起。显然,A 和 B 彼此独立,因为它们只是基于两次独立的抛硬币。我们可以用这个图来描述:A 和 B 都影响 G,但 A 和 B 彼此独立。
正如我们所说,A 和 B 是独立的。例如,如果我告诉你 B 是开的,这并不能告诉你任何关于 A 的信息。然而,在给定 G 的条件下,A 和 B 实际上是相关的。如果你阻断或控制了 G,你就在 A 和 B 之间诱导出了一个关联。我用 G 周围的矩形表示阻断,然后在 A 和 B 之间画一条虚线曲线,让你知道当你控制 G 时,你在 A 和 B 之间打开了一条路径。
想象我控制了 G,这意味着我告诉你 G 是什么,或者我固定了 G。例如,如果我告诉你灯是灭的。那么,如果 B 是开的,A 必须是关的,反之亦然。所以,当我告诉你 G 是什么时,我就知道了 A 和 B 之间的一些关系。但之前,如果我告诉你 B 是什么,我不会知道任何关于 A 的信息,因为 A 只是由抛硬币决定的。一旦我告诉你 G 是什么,A 和 B 就拥有了关于彼此的信息。我们在下面的图中用虚线曲线描绘了这一点,表明如果你阻断 G,你就在 A 和 B 之间打开了一条新路径。所以现在,在给定 G 的条件下,A 和 B 是条件相关的。
理解“d-分离”规则 📐
上一节我们学习了不同路径的阻断规则,本节中我们将利用这些规则来理解“d-分离”。我们将使用刚刚学到的一些规则来思考,一组节点是否能在给定路径上使变量之间产生独立性。如果一组节点能做到这一点,我们就称之为“d-分离”。这里的“d”代表“依赖”,我们考虑的是两个节点之间存在依赖关系的路径,我们想知道一组变量 C 是否能消除这种依赖。随着深入,这会变得更清晰,但这是主要思想。
一条路径被一组节点 C “d-分离”,如果:
- 它包含一个链,并且中间节点在 C 中。这里“中间部分”指的是像 E 这样的节点。为了达到 d-分离(本质上是独立性),我们需要 E 在 C 中,我们之前看到过这一点。你可以把 C 看作是我们将要控制的所有节点的集合,只要链的中间部分在其中,就应该没问题。
- 或者,如果路径包含一个分叉,并且中间节点在 C 中。这里“中间部分”指的是信息流向下游变量的路径顶端部分,如果是分叉,我们需要控制它。
- 或者,如果路径包含一个倒置分叉(对撞节点),我们不希望那个中间节点在 C 中。我们之前看到,如果我们控制了那个中间节点,会诱导出关联。所以,如果它包含一个倒置分叉,我们不希望那个中间节点在 C 中,我们也不希望该对撞节点的任何后代在 C 中。
在这一点上,有些内容可能还不清楚,但我们将更详细地讲解。你会注意到,我刚才指出的这三件事都遵循了之前我们查看不同路径类型、关联性以及何时可以阻断的幻灯片内容。
节点间的“d-分离” 🔗
上一节我们讨论了一条路径的 d-分离,但两个变量之间可能有很多条路径。接下来,我们将思考两个节点之间的一般性 d-分离。
如果一组节点 C 阻断了从 A 到 B 的每一条路径,则称两个节点 A 和 B 被 C “d-分离”。你可以想象从 A 到 B 有许多条路径。我们将尝试通过使用一组节点 C 进行阻断,来创建 A 和 B 之间的条件独立性。也就是说,我们将控制 C。如果我们成功了,阻断了所有路径,那么它们就是 d-分离的,我们可以说 A 在给定 C 的条件下独立于 B。
到目前为止,我们正在学习很多这些规则,但都是为了构建某个目标。特别是作为动机,请回想一下可忽略性假设。
可忽略性假设与处理分配 A 有关,即 A 在给定 X 的条件下独立于潜在结果。希望你现在能看到这里的联系:我们的长期目标是识别一组变量 X,它能在 A 和潜在结果之间建立条件独立性。换句话说,我们将实现 A 和潜在结果之间的 d-分离。这就是我们正在努力的方向。在现阶段,我们严格学习的是那些必须用来判断可忽略性何时成立的规则。

本节课总结:在本节课中,我们一起学习了因果推断中判断变量独立性的核心工具。我们首先理解了通过控制中间节点来“阻断”链和分叉路径,从而消除变量间的虚假关联。接着,我们认识了对撞节点的特殊性,即控制它会反而“打开”路径,诱导出新的关联。最后,我们综合这些规则,掌握了“d-分离”的完整定义:如果一组变量 C 阻断了两个变量间的所有路径,则称这两个变量被 C “d-分离”,即在给定 C 的条件下独立。这些概念是理解后续可忽略性假设和选择调整变量的基础。
14:混杂因素再探讨 🔄

在本节课中,我们将重新审视混杂因素的概念。我们将学习前门路径与后门路径的定义,并理解为何需要阻断后门路径以控制混杂。
前门路径 🚪
上一节我们回顾了混杂因素的基本概念。本节中,我们来看看路径分析中的“前门路径”。
前门路径是指从暴露变量 A 到结局变量 Y 的路径,其起始箭头从 A 指出。这意味着信息或因果效应是沿着箭头方向,从 A 流向 Y。
以下是两个前门路径的例子:
- 直接效应:路径为 A → Y。这表示 A 直接影响 Y。
- 间接效应:路径为 A → Z → Y。这表示 A 通过影响中间变量 Z 来间接影响 Y。
在因果推断中,如果我们只关心 A 对 Y 的总效应,我们通常不会去阻断或控制前门路径上的变量。因为这些路径本身就代表了治疗或暴露的因果效应。控制它们会掩盖我们想要估计的效应。
例如,在路径 A → Z → Y 中,Z 是 A 影响 Y 的一个机制。如果我们控制了 Z,就等于移除了 A 通过 Z 影响 Y 的那部分效应,从而无法估计 A 对 Y 的总效应。
如果研究者希望量化效应通过不同中介路径传递的比例,则需要进行因果中介分析。但本课程主要关注总效应的识别。
后门路径 🚶♂️
理解了前门路径后,我们来看看需要重点关注的“后门路径”。
后门路径是指从 A 到 Y 的路径,但其起始箭头指向 A。这是一种“迂回”的路径,它并非代表 A 对 Y 的因果效应,而是反映了由于混杂因素导致的 A 与 Y 之间的虚假关联。
一个典型的后门路径例子是:A ← X → Y。
在这个路径中:
- X 是一个混杂变量。
- X 同时影响 A 和 Y。
- 这导致即使 A 对 Y 没有真实因果效应,A 和 Y 之间也会出现统计关联。
我们的核心目标就是阻断所有从 A 到 Y 的后门路径。一旦成功阻断,A 与 Y 之间剩余的关联就可以更可信地归因于 A 对 Y 的因果效应(即前门路径)。这等价于在给定一组变量 X 的条件下,实现了可忽略性假设:
(Y(1), Y(0)) ⫫ A | X
其中,X 就是那组足以阻断所有后门路径的变量集合。
混杂控制准则 📐
那么,如何找到这组变量 X 呢?以下是两个常用的准则:
- 后门路径准则:这组变量 X 必须阻断所有连接 A 与 Y 的后门路径,且不能阻断任何前门路径,同时自身不能被 A 影响。
- 分离原因准则:这组变量 X 需要包含所有 A 和 Y 的共同原因,或者对这些共同原因进行测量后的代理变量。
应用这些准则可以帮助我们从复杂的因果图中,系统地识别出需要调整的变量集,从而有效控制混杂偏倚。

本节课总结:我们一起学习了因果图中的前门路径与后门路径。前门路径代表因果效应,不应被阻断;后门路径代表混杂偏倚,必须被阻断。通过后门路径准则或分离原因准则,我们可以识别出需要调整的变量集合,以控制混杂,从而估计暴露对结局的因果效应。
15:后门路径准则 🚪

在本节课中,我们将学习后门路径准则。我们将理解它的定义,如何判断它是否被满足,以及更一般地,如何根据给定的有向无环图来判断一组变量是否足以控制混杂。
概述
上一节我们讨论了混杂和路径的概念。本节中,我们将学习一个具体的准则——后门路径准则,它可以帮助我们系统地判断,为了准确估计处理对结果的影响,需要控制哪些变量。
什么是后门路径准则?
根据后门路径准则,一组变量足以控制混杂,需要满足以下两个条件:
- 它阻断了所有从处理到结果的后门路径。
- 它不包含处理的任何后代变量。
记住,处理的后代变量实际上是处理因果效应的一部分,因此我们不希望控制处理的效应。只要满足这两个条件,就满足了后门路径准则。
满足条件的变量集不一定是唯一的,可能存在多种选择。接下来,我们通过几个例子来理解这一点。
示例分析
以下是几个具体的DAG示例,我们将逐一分析如何应用后门路径准则。
示例一:简单后门路径
假设这是真实的DAG。我们关注处理 A 和结果 Y 之间的关系。图中还有其他变量 V 和 W。

从 A 到 Y 恰好有一条后门路径:A <- V -> W -> Y。这条路径上没有对撞节点,因此它是开放的。
为了阻断这条后门路径,我们需要控制路径上的变量。
以下是足以控制混杂的变量集合:
V(控制V即可阻断路径)W(控制W也可阻断路径)V和W(同时控制两者)
通常,人们倾向于控制更少的变量,因此可能会选择 V 或 W。
示例二:包含对撞节点的路径
假设这是真实的DAG。我们同样关注 A 和 Y。

从 A 到 Y 有一条后门路径:A <- V -> M <- W -> Y。这条路径在 M 处有一个对撞。因此,这条路径已经被阻断,实际上不存在混杂。你甚至可以不进行任何调整,直接分析 A 和 Y 的关系。
然而,如果你错误地控制了 M(一个对撞节点),会发生什么?控制 M 会打开 V 和 W 之间的路径,从而创造出一条新的、开放的后门路径:A <- V -> M <- W -> Y(现在 M 被控制,路径打开)。
因此,如果你控制了 M,就必须额外控制其他变量来阻断这条新路径。
以下是足以控制混杂的变量集合:
{}(空集,即不控制任何变量)VWM, VM, WM, V, W
注意:仅控制 M 是不够的,它会导致混杂。
示例三:多条后门路径
在这个例子中,有两条从 A 到 Y 的后门路径。

路径一:A <- Z -> V -> Y。无对撞节点,可通过控制 Z 或 V 来阻断。
路径二:A <- W -> Z <- V -> Y。在 Z 处有对撞,因此这条路径已被阻断。但是,如果你控制了 Z,就会打开 W 和 V 之间的路径,此时你需要额外控制 W 或 V 来阻断新路径。
综合考虑两条路径,以下是足以控制混杂的变量集合:
V(阻断路径一,且路径二本身已阻断)V, ZZ, WV, Z, W
注意:仅控制 Z 或仅控制 W 是不够的。仅控制 Z 会打开新路径;仅控制 W 则无法阻断路径一。最小集合是 V。
示例四:更复杂的DAG
这个DAG更为复杂,包含三条后门路径。

以下是三条路径及阻断方法:
A <- Z -> V -> Y:可通过控制Z或V阻断。A <- W -> Z -> V -> Y:可通过控制W、Z或V阻断。A <- W -> M -> Y:可通过控制W或M阻断。
综合来看,存在多种变量组合可以同时阻断这三条路径,例如控制 V 和 W,或控制 Z 和 M 等。你需要确保所选集合能覆盖所有路径的阻断条件。
现实应用与思考
你可能觉得这些复杂的DAG不切实际,但实际上在学术研究中,学者们会构建非常详细的因果图。例如,一项研究母亲孕前体重状态与剖腹产关系的文献,就提出了一个包含众多变量的复杂DAG。
这引出了两个问题:
- 如何构建这样的DAG? 这基于领域知识和文献,是一种假设,可能不完全正确。
- 如果DAG画错了怎么办? 即使DAG略有错误,你选择的变量集可能仍然足以控制混杂。这提示我们需要进行敏感性分析(后续课程会涉及),来评估假设错误对结论的影响。
尽管如此,画出DAG的过程本身非常有价值,它能形式化地梳理你对变量间关系的思考。
总结

本节课我们一起学习了后门路径准则。其核心是:要控制混杂,需要选择一组能阻断所有处理到结果的后门路径,且不包含处理后代变量的变量集。
关键要点是:
- 准则的应用依赖于已知的DAG。
- 满足条件的变量集通常不唯一,应优先选择最小集合。
- 构建DAG是一个基于假设的有用过程,能帮助系统化思考。
然而,在实践中,我们可能无法获知完整的DAG。这引出了下一个问题:如果我们没有完整的DAG信息,还能否找到足以控制混杂的变量集?我们将在下一个视频中讨论这个替代性准则。
16:析因准则 🧩

在本节课中,我们将学习一种用于选择控制变量的替代性准则——析因准则。我们将了解该准则的定义,并学习如何根据数据集,运用该准则来识别一组需要控制的变量。
概述
当我们进行因果分析时,一个核心步骤是选择需要控制的变量,以消除混杂偏倚。除了之前介绍的后门准则,析因准则提供了一种更直观的方法。它不要求我们知晓完整的因果图,只需识别出哪些变量是暴露(A)或结果(Y)的原因即可。
什么是析因准则?
析因准则的核心思想是:选择所有观测到的、是暴露(A)或结果(Y)或两者共同的原因的变量,作为需要控制的变量集合。
用公式表示,即控制变量集 Z 需满足:
Z = { 所有观测到的变量 V | V 是 A 的原因,或 V 是 Y 的原因 }
这个准则的优势在于,你无需知道完整的因果图结构,只需有能力判断每个变量是否影响A或Y。
析因准则的性质
析因准则有一个重要性质:如果在观测变量中存在一个能满足后门准则的变量集合,那么根据析因准则选出的变量集合,也足以控制混杂。
这意味着,只要你的数据集中存在一组可以控制混杂的观测变量,那么选择所有A或Y的原因变量,同样能达到目的。
实例分析
为了理解析因准则的应用,我们通过几个假设的因果图(DAG)例子来比较不同的变量选择策略。
假设我们有以下变量:
- 观测变量:M, W, V
- 未观测变量:U1, U2
我们已知 W 和 V 是 A 或 Y 的原因(或两者皆是),而 M 不是 A 或 Y 的原因。
以下是几种变量选择方法:
方法一:控制所有预处理协变量
即控制 M, W, V 全部三个变量。
方法二:应用析因准则
即只控制 W 和 V 这两个变量。
接下来,我们将在不同的真实因果图情境下,检验这两种方法是否足以控制混杂。
例一:需要控制W和V的简单情况

在这个DAG中,从A到Y存在一条后门路径:A ← V → W → Y。
- 控制所有变量(M, W, V):阻断了这条后门路径,满足后门准则。
- 应用析因准则(控制W, V):同样阻断了这条后门路径,也满足后门准则。
在这个例子中,两种方法都有效。
例二:存在对撞子结构的情况

在这个DAG中,由于M是一个对撞子(A → M ← W),从A到Y的后门路径 A ← V → M ← W → Y 本身是被阻断的。因此,理论上不需要控制任何变量。
- 控制所有变量(M, W, V):控制M会打开V到W的路径(V → M ← W),但由于我们同时控制了V和W,这条新打开的路径也被阻断,因此仍然满足后门准则。
- 应用析因准则(控制W, V):没有控制对撞子M,不会打开新路径,同样满足后门准则。
在这个例子中,两种方法也都有效,尽管析因准则选择了比“控制全部”更少的变量。
例三:控制对撞子可能引入混杂

在这个DAG中,唯一的后门路径 A ← U1 → M ← U2 → Y 在对撞子M处被阻断,因此同样不需要控制任何变量。
- 控制所有变量(M, W, V):控制对撞子M会打开路径 U1 → M ← U2,从而创建一条新的混杂路径 A ← U1 — M — U2 → Y,这反而引入了混杂。因此,这种方法不满足后门准则。
- 应用析因准则(控制W, V):没有控制M,因此不会打开U1和U2之间的路径,满足后门准则。
这个例子表明,“控制所有变量”的策略有时可能有害,而析因准则在这种情况下更安全。
例四:无法仅通过观测变量控制混杂的情况

在这个DAG中,存在未观测的混杂因子U1和U2。从A到Y有一条后门路径 A ← U1 → W ← U2 → Y,其中W是一个对撞子。
- 控制所有变量(M, W, V):控制W会打开路径 U1 → W ← U2,从而激活混杂路径 A ← U1 — W — U2 → Y,无法满足后门准则。
- 应用析因准则(控制W, V):同样,控制W会打开U1和U2之间的路径,也无法满足后门准则。
在这种情况下,没有任何一组观测变量可以满足后门准则来控制混杂。因此,析因准则在此失效,但这并非准则本身的问题,而是数据结构决定了混杂无法仅通过观测数据消除。
析因准则的总结与注意事项
本节课我们一起学习了析因准则。总结其特点如下:
- 不一定选择最精简的集合:如例二所示,有时它选择了变量,但实际上可能不需要控制任何变量。
- 概念简单直观:只需列出A或Y的原因变量。
- 具备充分性保证:只要数据中存在一组能控制混杂的观测变量,析因准则选出的集合就一定能控制混杂。
- 需要额外知识:你必须能够正确识别出所有观测到的、是A或Y的原因的变量。这要求你对因果结构有一定了解,虽然不需要完整的因果图。
后续步骤
现在我们已经掌握了如何选择需要控制的变量。接下来的问题是:如何实际进行控制?
常用的方法包括:
- 匹配
- 逆概率加权
这些以及其他方法将在未来的视频中详细讨论。
17:观察性研究 🧐

在本节课中,我们将学习观察性研究。我们将首先理解随机试验与观察性研究的区别,然后探讨“匹配”这一控制混杂因素的方法如何尝试使观察性研究模拟随机试验的效果。最后,我们还将讨论匹配方法的一些优势。
随机试验与观察性研究的区别
上一节我们介绍了混杂因素的基本概念。现在,我们来看看研究者如何应对混杂问题。
我们可以考虑一个简单的有向无环图(DAG),它描绘了经典的混杂设置:一组变量 X 同时影响治疗分配 A 和结局 Y。因此,控制 X 就足以控制混杂。这里的 X 可以看作是一组足以控制混杂的变量集合,其选择可以基于“充分混杂变量集”等准则。我们在此进行简化,核心假设是 可忽略性假设,其含义是:在给定协变量 X 的条件下,潜在结局与治疗分配独立。本质上,我们假设在控制了这些混杂因素后,治疗分配就像是随机化的。
那么,在随机试验中是如何处理这个问题的呢?在现实世界中,治疗分配 A 部分由变量 X 决定,而 X 也影响结局 Y。随机试验通过实际随机化治疗分配来解决这个问题。这相当于切断了从 X 指向 A 的箭头。随机化后,X 不再影响 A,从而阻断了 A 到 Y 的后门路径。
随机试验的另一个特点是,治疗组和对照组中协变量 X 的分布是相同的。我们从一个感兴趣的人群(用一个大圆圈表示)中,随机分配部分人接受治疗(A=1,蓝色圆圈),另一部分人接受对照(A=0,灰色圆圈)。由于随机化,两个治疗组中 X 的分布应与原始人群相同,没有理由不同。这就实现了 协变量平衡。因此,如果两组结局出现差异,就不会是因为 X 的分布不同造成的。在随机试验中,我们通过设计(随机化)来处理混杂因素 X。
为何不总是使用随机试验?
既然随机化如此有效,为何不总是采用随机试验呢?原因有以下几点:
- 成本高昂:随机试验通常比观察性研究昂贵得多,涉及伦理审查、招募受试者、长期随访、复杂协议和大量人员。
- 伦理问题:有时随机分配暴露或治疗是不道德的。例如,研究吸烟是否导致肺癌时,随机让人吸烟是不道德的。
- 参与意愿低:许多人可能拒绝参与试验,因为他们不想被“实验”,或嫌随访麻烦。这导致我们能推断的人群范围缩小,代表性降低。
- 耗时漫长:随机化后需要等待结局发生(如五年生存率),可能耗时很久。等到结果出来时,研究问题可能已不再相关(例如,已有新药上市)。
观察性研究的类型
鉴于随机试验的局限性,观察性研究有其用武之地。主要有两种类型:
1. 前瞻性观察性研究
这类研究是计划性的,研究者主动收集数据。通常会招募受试者,并定期(如每半年或每年)随访收集数据。与试验类似,它会在计划时间点收集一套共同的变量,并严格按照协议测量结局。但与试验不同,其监管较弱,因为研究者不主动干预治疗,只是观察现实情况。合格人群通常也更广泛。不过,它仍有成本较高、实施较慢(需等待结局)的缺点。
2. 基于数据库的观察性研究(回顾性)
这类研究越来越普遍,利用为其他目的已存在的数据。数据是被动收集的,研究者并未主动收集。例如:
- 电子病历:为临床诊疗而记录,可用于研究。
- 行政数据:如保险理赔数据。
- 登记库:如癌症登记库。
以下是这类数据的优缺点:
- 优点:
- 样本量大:例如,可能包含整个医疗系统的数据。
- 成本低廉:数据已存在,只需提取和分析。
- 分析快速:数据(治疗、结局)可能已具备,分析速度快。
- 缺点:
- 数据质量较低:缺乏统一的数据收集标准(如不同实验室的检测方法不同)。
- 测量变异性大:即使像血压测量,其程序也可能在不同诊所或个人间存在差异。
- 数据收集时间不受控:例如,病情重的患者就医频繁、数据多;健康者数据少。
观察性研究的核心挑战:混杂
在观察性研究中,我们不对治疗进行随机化。因此,我们关心的混杂变量 X 的分布在治疗组间通常不同。例如,想象老年人更可能接受治疗(A=1),而年轻人更可能接受对照或未治疗(A=0)。在分布图上,治疗组(蓝色曲线)的高峰可能在60多岁,而对照组(灰色曲线)的高峰可能在50多岁。虽然存在重叠区域,但总体分布不平衡。这与随机试验中我们期望的平衡状态不同。
匹配方法:模拟随机试验
匹配方法试图使观察性研究更像随机试验。其主要思想是:将治疗组(A=1)的个体与对照组(A=0)的个体进行配对,配对依据是协变量 X。我们试图为每个治疗组个体找到一个具有相似或相同 X 值的对照个体。
在前面的年龄例子中,观察性研究里年轻年龄段的对照个体多,年长年龄段的治疗个体多。而随机试验中,任何年龄段的治疗和对照个体数应大致相同。匹配的目标就是实现这一点:在任何特定的 X 取值组合下,治疗组和对照组的个体数量应大致平衡。

匹配的优势
匹配方法在处理混杂方面有几个显著优势:
- 在“设计阶段”处理混杂:这里的“设计阶段”指的是在不查看结局数据的情况下进行操作。匹配可以仅基于协变量 X 进行,对结局数据盲法,这与随机试验中在结局出现前就通过设计控制混杂的思路相似。
- 揭示协变量分布的重叠不足:匹配可能发现某些治疗组个体找不到任何相似的对照个体。这表明这些个体几乎没有机会接受对照治疗。这非常有用,因为我们可能希望将这些人排除在研究之外。对无法接受另一种治疗的人进行效应推断需要外推,而我们没有相关信息。这有助于识别 正性假设(即对于任何协变量组合,接受任一种治疗的概率都应非零)的违反情况,并通过排除相应个体来满足该假设。如果不进行匹配,这种重叠不足可能被忽视。
匹配后的分析
一旦完成匹配,数据在协变量 X 上应该达到平衡。此时,我们可以像分析随机试验数据一样进行结局分析。分析可以相对简单,例如,直接比较匹配后两组结局的均值。这感觉上非常类似于分析一个随机试验的数据。
本节课中,我们一起学习了观察性研究。我们比较了随机试验与观察性研究的核心区别,了解了观察性研究的两种主要类型及其优缺点。我们重点探讨了观察性研究中混杂分布不平衡的核心挑战,并深入介绍了“匹配”这一方法如何通过模拟随机试验的平衡特性来控制混杂。最后,我们总结了匹配在“设计阶段”处理混杂、揭示数据重叠问题等方面的优势,以及匹配后如何进行简洁的结局分析。
18:匹配方法概述 🧩

在本节课中,我们将学习因果推断中一种重要的方法——匹配。我们将了解匹配的基本动机、它所针对的总体,并区分“随机平衡”与“精细平衡”这两个核心概念。
匹配的基本动机
上一节我们提到了匹配的目标。本节中,我们来看看匹配背后的核心动机是什么。
匹配的目标是,根据我们识别出的、足以控制混杂因素的一组协变量,将处理组个体与对照组个体进行配对。
为了便于理解,我们先从单一协变量的情况开始。假设我们只关心一个协变量:高血压。我们将高血压患者标记为红色,非高血压患者标记为蓝色。
想象一下,高血压诊断部分决定了个体接受何种治疗,也可能与结局相关。因此,这是一个我们需要控制的变量。
在一个假设的小型人群中,处理组和对照组在高血压这个协变量上存在不平衡。在处理组中,67%的个体是红色的(患有高血压)。而在对照组中,情况相反,只有20%是红色的。这与随机试验中的期望不同,在随机试验中,处理组和对照组的高血压患者比例应大致相同。
我们可以通过匹配来解决这个问题。我们将每个处理组个体与一个对照组个体配对。
以下是匹配过程:
- 将一个红色的处理组个体与一个红色的对照组个体配对。
- 将一个蓝色的处理组个体与一个蓝色的对照组个体配对。
- 重复此过程,直到为所有处理组个体找到匹配。
匹配完成后,未被匹配的对照组个体将被剔除。现在,在这个匹配后的样本中,处理组和对照组在高血压这个协变量上实现了完美平衡:两组都有67%的红色圆圈。这类似于随机试验中协变量达到的平衡状态。
多协变量与随机平衡
上一节我们讨论了单一协变量的简单情况。然而,现实分析中我们通常需要控制多个协变量,其中一些可能是连续变量,这使得匹配变得复杂得多。
实际上,我们几乎不可能在全部协变量上找到完全相同的个体进行精确匹配。一个处理组个体可能找不到任何在协变量上与其完全一致的对照组个体。
但即使在随机试验中,处理组和对照组个体也并非完美匹配。对于一个给定的处理组个体,可能没有一个对照组个体是完美匹配。然而,随机试验中协变量的分布在两组之间是平衡的。我们将这种平衡称为随机平衡。
因此,匹配的目标并非追求精确的个体匹配,而是通过寻找相近的匹配,使得匹配后两组间协变量的分布非常相似,从而实现类似随机试验的随机平衡。
例如,假设我们现在有两个协变量:性别(男/女)和年龄(岁)。我们有两个处理组个体和更多的对照组个体(通常对照组规模更大,以便有更多选择来寻找良好匹配)。
以下是寻找匹配的过程:
- 对于第一个处理组个体(男性,56岁),我们在对照组中寻找一个相近的匹配,例如一位55岁的男性。
- 对于第二个处理组个体(女性,47岁),我们在对照组中找到一位年龄完全相同的女性作为匹配。
通过这个过程,我们使得对照组中协变量的分布看起来与处理组相似。
匹配所估计的因果效应
上一节我们了解了如何通过匹配使协变量分布平衡。本节中,我们来看看这种匹配方法默认估计的是哪一种因果效应。
如果我们从处理组群体出发,并尝试从对照组中为他们寻找匹配,那么最终我们会使对照组的协变量分布与处理组相似。因此,我们最终估计的是处理组个体的平均处理效应。
ATT = E[Y(1) | A=1] - E[Y(0) | A=1]
这与针对整个总体的平均因果效应形成对比。匹配通常侧重于估计ATT,因为这是一个有效的因果效应,它推断的是实际接受治疗的人群。我们比较的是他们实际接受治疗的结果与他们如果都未接受治疗时的潜在结果。
当然,也存在一些方法可以使匹配后的样本代表总体,从而估计ATE,但这通常更复杂。在本视频中,我们主要记住,典型的匹配方法(从处理组出发寻找对照)估计的是ATT。
精细平衡的概念
上一节我们讨论了随机平衡。本节中,我们介绍一个相关的概念:精细平衡。
有时我们可能无法为所有个体找到理想的匹配。可能对于许多个体,我们能找到非常好的匹配,但对于另一些则不能。然而,如果我们最终仍然能使处理组和对照组之间协变量的边际分布相同,我们可能愿意容忍一些不理想的匹配。这就称为精细平衡。

请看一个具体例子。假设我们有两个匹配对:
- 匹配对1:处理组(男性,40岁)匹配到对照组(女性,45岁)。这不是一个理想的匹配(性别不同,年龄也不同)。
- 匹配对2:处理组(女性,45岁)匹配到对照组(男性,40岁)。同样不是一个理想的匹配。
单独看,每个匹配对都没有良好的随机平衡(个体不相似)。但如果我们把这两个匹配对放在一起看:
- 处理组:50%为男性,平均年龄为 (40+45)/2 = 42.5岁。
- 对照组:50%为男性,平均年龄为 (45+40)/2 = 42.5岁。
尽管个体匹配不理想,但两个群体在性别和年龄的分布上完全相同。这就实现了精细平衡。
许多匹配软件可以施加精细平衡约束。软件在寻找匹配时,会尽量寻找最佳的成对匹配,但只要最终能达到精细平衡,它也会容忍一些较差的匹配。这是一个可以在软件中设定的选项。
匹配的数量:一对一与多对一
最后,我们来讨论匹配的数量策略。到目前为止,我们主要关注一对一匹配,即为每个处理组个体寻找一个对照组匹配,然后剔除未匹配者。
但还有其他选项:
- 多对一匹配:可以预先决定为每个处理组个体匹配K个对照组个体。例如,进行五对一匹配。
- 可变数量匹配:匹配的数量可以变化。我们可能为一些处理组个体匹配一个对照,为另一些匹配多个对照,这取决于能找到多少良好的匹配。
这些方法之间存在权衡。大体上讲,一对一匹配通常能产生更好的个体匹配质量,但会丢弃更多数据,可能导致效率损失。多对一匹配能利用更多数据,但可能降低个体匹配的相似度。
总结
本节课中,我们一起学习了因果推断中匹配方法的概述。
我们首先了解了匹配的基本动机:通过配对使处理组和对照组在重要协变量上达到平衡,以模拟随机试验的条件。接着,我们认识到当存在多个协变量时,目标是实现随机平衡,即协变量分布在两组间相似。
我们明确了典型的匹配方法(从处理组出发寻找对照)所估计的是处理组个体的平均处理效应。然后,我们学习了精细平衡的概念,即即使个体匹配不完美,只要两组协变量的边际分布相同,也是可以接受的。
最后,我们简要讨论了不同的匹配数量策略(一对一、多对一、可变匹配)及其权衡。
理解这些核心概念,是进一步学习和应用具体匹配方法(如倾向得分匹配)的重要基础。
19:直接基于混杂因素匹配 📊

在本节课中,我们将学习如何通过直接匹配混杂因素来进行因果推断。我们将首先理解为何需要距离矩阵,并探讨几种距离矩阵的选项。接着,我们将讨论如何利用这些距离矩阵进行匹配。
为什么需要距离矩阵? 🤔
为了找到“接近”的匹配对象,我们需要一个衡量“接近程度”的指标。由于我们通常需要控制许多变量,几乎不可能找到一个处理组个体与一个对照组个体在所有变量上完全一致。因此,我们需要一个度量标准来评估两组协变量之间的相似程度。
我们将介绍两种距离度量方法:马氏距离 和 稳健马氏距离。它们都能衡量两组协变量的相似性。
马氏距离 📏
首先,我们引入一些符号。X_j 表示个体 j 的协变量向量。这里的 j 代表数据集中的一个人,X 是你预先确定需要控制的一组混杂因素变量。
个体 i 和个体 j 之间的协变量距离用 D(X_i, X_j) 表示。它是一个函数,输入两个个体的协变量值,输出一个单一的距离分数。
其公式如下:
D(X_i, X_j) = sqrt( (X_i - X_j)^T * S^{-1} * (X_i - X_j) )
让我们分解一下这个公式:
(X_i - X_j)是协变量向量的差值。对于每个变量(例如年龄、血压),我们计算个体i和j之间的差值。^T表示转置。S是协变量X的协方差矩阵,S^{-1}是其逆矩阵。这部分的作用是缩放。由于变量(如年龄和糖尿病状态)的单位和尺度不同,直接相加差值没有意义。逆协方差矩阵相当于将每个变量的差值除以其方差,从而将所有变量置于一个可比较的尺度上。
总的来说,你可以将其粗略地理解为缩放后的平方差之和再开方。如果两组协变量差异很大,距离值就大;如果差异很小,距离值就小。我们可以为任何一对个体计算这个 D 值,特别是将一个给定的处理组个体与所有不同的对照组个体进行比较,从而得到一个距离列表,帮助我们找到良好的匹配。
示例说明
假设我们只有三个协变量:年龄、COPD(慢性阻塞性肺病,1=是,0=否)和女性(1=是,0=否)。
我们有一个处理组个体:年龄78岁,无COPD,女性。
我们需要在对照组中为他寻找匹配。假设有6个对照组候选人。
以下是匹配过程的简要说明:
- 候选人A:年龄70岁,有COPD,男性。在COPD和性别上都不匹配,距离值较大(例如4.2),不是好匹配。
- 候选人B:年龄18岁,无COPD,女性。在COPD和性别上匹配,但年龄差异巨大,距离值也较大(例如3.6),不是好匹配。
- 候选人C:年龄75岁,无COPD,女性。在所有三个变量上都接近,距离值最小(例如0.5),是最佳匹配。
通过计算所有候选人与处理组个体的马氏距离,并选择距离最小的一个,我们就能找到最接近的匹配。这个计算过程可以很容易地用R等软件完成。
稳健马氏距离 🛡️
接下来,我们看看马氏距离的一个替代方案:稳健马氏距离。其动机与异常值有关。异常值可能导致个体间的距离非常大,即使他们的其他协变量非常相似。
为了解决这个问题,我们可以使用秩次。这是一种经典的稳健统计方法,即用变量的秩次代替原始值进行计算。
具体操作如下:
- 对于每个变量(如年龄),将数据集中的所有值从小到大排序,并用其排名(1, 2, 3,...)代替原始值。
- 然后,对转换后的秩次数据应用相同的马氏距离公式。
这样做的好处是,可以减轻极端值的影响。例如,年龄最大和第二大的个体,原始年龄可能相差很大,但它们的秩次只差1。
此外,在使用秩次时,通常希望协方差矩阵 S 的对角线是常数,这意味着所有变量在尺度上被同等对待,不会过度加权某个变量。统计软件通常可以自动处理这些细节。
距离矩阵的应用策略 ⚙️
我们已经了解了为什么需要距离以及两种距离度量方法。匹配的一个优点是,你可以采取一些灵活的策略,例如对某些变量要求精确匹配,而对其他变量允许近似匹配。
以下是两种常见策略:
-
对关键变量进行精确匹配:如果你希望对少数最重要的混杂因素进行精确匹配,可以在计算距离后增加一个步骤:如果个体在这些关键变量上不匹配,就将计算出的距离设置为无穷大(或一个极大的数),从而在匹配算法中排除这种组合。
-
基于倾向得分进行距离匹配:另一种常见的方法是先计算倾向得分,然后在倾向得分上进行距离匹配。这将是另一个视频的主题,但在此提请注意这种可能性。
匹配算法选择 🧮
一旦我们有了距离矩阵,如何实际选择匹配对象呢?我们将介绍两种最流行的算法。
上一节我们介绍了如何计算个体间的距离,本节中我们来看看如何利用这些距离进行实际的配对。
以下是两种主要的匹配算法:
- 贪婪匹配:也称为最近邻匹配。其工作原理是:依次为每个处理组个体,从未被匹配的对照组中挑选距离最小的那个作为匹配对象。它的优点是计算速度非常快,通常可以毫无压力地应用于大型数据集。
- 最优匹配:这种算法试图最小化所有匹配对之间的总距离或平均距离,而不仅仅是单个处理对象的最短距离。理论上,这应该能产生整体上更好的匹配质量。但它的缺点是计算量要求很高,在大型数据集上可能遇到困难。

本节课总结:在本节课中,我们一起学习了直接基于混杂因素进行匹配的核心步骤。我们首先理解了为何需要距离度量,并深入探讨了马氏距离和稳健马氏距离这两种衡量协变量相似性的方法。接着,我们了解了如何应用距离矩阵,包括对关键变量进行精确匹配的策略。最后,我们介绍了两种实际的匹配算法:计算高效的贪婪匹配和追求全局最优但计算量大的最优匹配。掌握这些概念是进行有效匹配分析的基础。
20:贪婪最近邻匹配 🎯

在本节课中,我们将学习一种名为“贪婪最近邻匹配”的因果推断方法。我们将了解其算法原理、优缺点,并探讨一对一匹配与多对一匹配的区别,最后介绍“卡钳”的概念。
概述
贪婪最近邻匹配是一种直观且易于实现的匹配算法。它通过为每个处理组个体寻找距离最近的对照组个体来构建匹配对。我们将从算法步骤开始,逐步深入其细节。
贪婪匹配算法
上一节我们介绍了匹配的基本前提,即已识别出一组足以控制混杂的预处理协变量,并计算了每个处理组个体与所有对照组个体之间的距离 D_IJ。本节中,我们来看看贪婪匹配的具体执行步骤。
以下是贪婪匹配算法的核心步骤:
- 随机排序:首先,将处理组和对照组个体的列表进行随机排序。这有助于避免初始数据顺序对匹配结果产生影响。
- 顺序匹配:从处理组列表的顶部开始,为第一个处理组个体寻找距离
D_IJ最小的对照组个体。 - 移除已匹配对象:一旦找到最佳匹配,就将该对照组个体从可用匹配池中移除。
- 迭代过程:移动到下一个处理组个体,重复步骤2和3,为其寻找剩余对照组中的最佳匹配。
- 循环直至完成:持续此过程,直到所有处理组个体都完成匹配。
算法示例
为了更清晰地理解,我们来看一个简单的例子。假设我们有两个处理组个体和六个对照组个体,协变量包括年龄、COPD(慢性阻塞性肺病)和性别。
首先,我们为第一个处理组个体(78岁,无COPD,女性)寻找匹配。计算其与每个可用对照的距离后,我们找到最佳匹配:一个75岁、无COPD、女性的对照个体。我们将他们配对,并赋予一个共同的匹配ID(例如 match_id = 1)。
match_id | treated | age | copd | female
---------|---------|-----|------|--------
1 | 1 | 78 | 0 | 1
1 | 0 | 75 | 0 | 1
接着,为第二个处理组个体(68岁,无COPD,男性)寻找匹配。此时,第一个匹配对象已从池中移除。在剩余对照中,最佳匹配是一个55岁、无COPD、男性的个体。尽管年龄差距较大,但这是当前可用的最佳选择。他们被赋予新的匹配ID(例如 match_id = 2)。
match_id | treated | age | copd | female
---------|---------|-----|------|--------
2 | 1 | 68 | 0 | 0
2 | 0 | 55 | 0 | 0
贪婪匹配的优缺点
了解了算法流程后,我们来评估一下这种方法的优势与局限。
优点:
- 直观易懂:算法逻辑简单,易于理解和解释。
- 计算高效:步骤清晰,即使在大数据集上运行速度也很快。
- 易于实现:可以轻松地用代码实现,也有现成的软件包(如
matchup)可用。
缺点:
- 依赖初始顺序:匹配结果会受到处理组列表初始随机排序的影响,不同排序可能导致不同匹配。
- 非全局最优:算法每一步只追求局部最优(当前个体的最佳匹配),并不能保证所有匹配对的总距离
∑D_IJ最小,有时可能导致较差的整体匹配效果。
一对一匹配 vs. 多对一匹配
到目前为止,我们讨论的都是一对一(或配对)匹配。但有时我们可能希望为每个处理组个体匹配多个对照,即进行多对一匹配(例如K:1匹配,K>1)。
使用贪婪算法同样可以实现多对一匹配。只需先为每个处理组个体找到一个最佳匹配,然后回到列表开头,为每个处理组个体寻找第二个最佳匹配(从剩余对照中),如此循环K次即可。
这两种策略存在权衡:
- 一对一匹配:通常能获得更紧密的匹配对,计算更快,但会丢弃更多对照组数据,导致样本量较小,估计效率可能较低。
- 多对一匹配:能利用更多对照组数据,样本量更大,估计可能更高效(方差更小)。但后续匹配的质量会下降,可能引入更多偏差。
这本质上是一个偏差-方差权衡问题:一对一匹配偏差更小但方差可能更大;多对一匹配方差更小但可能偏差稍大。
卡钳匹配
最后,我们引入“卡钳”的概念。在实际数据中,可能存在某些处理组个体,在对照组中根本没有足够相似的个体可供匹配。

为了解决这个问题,可以设置一个卡钳值,即最大可接受距离 caliper_max。在运行贪婪匹配算法时,只有当最佳匹配的距离 D_IJ 小于或等于 caliper_max 时,才接受该匹配。否则,我们将不匹配该处理组个体,将其从分析中排除。
作用:
- 确保匹配质量,避免极差的匹配影响估计结果。
- 使“正值性”假设更可能成立。如果对于一个处理组个体,在对照组中找不到足够接近的匹配,可能意味着该个体特征组合在对照组中几乎不存在,这违背了正值性假设。卡钳匹配通过排除这些个体,使分析样本更符合该假设。
代价:
- 分析的目标人群会发生变化,从“所有处理组个体”变为“所有能找到足够好匹配的处理组个体”,这有时在解释上会带来一些复杂性。
总结
本节课中,我们一起学习了贪婪最近邻匹配方法。我们了解了其逐步为处理组个体寻找最近邻对照的算法,讨论了其直观、高效但非全局最优的特点。我们比较了一对一匹配与多对一匹配在偏差和效率上的权衡。最后,我们引入了卡钳的概念,它通过设置最大匹配距离来保证匹配质量并支持因果推断的关键假设。掌握这些概念,是运用匹配方法进行可靠因果推断的重要基础。
21:因果推断速成课程 - P21:最优匹配 🎯

在本节课中,我们将学习最优匹配的概念。我们将从一个例子开始,说明为什么贪心匹配并非最优,然后详细讨论什么是最优匹配以及它的实现方式。
为什么贪心匹配不是最优的? 🤔
上一节我们介绍了匹配的基本概念,本节中我们来看看贪心匹配的局限性。所谓“最优”,我们指的是在全局距离度量上的最优。例如,最优意味着所有匹配对的距离总和最小。理想情况下,这个总和应该是可能达到的最小值,我们称之为全局最优。而贪心匹配通常达不到全局最优。





我们来看一个例子。假设我们想根据年龄进行匹配。为了简化,我们假设只有一个混杂因素,即年龄。现在我们想象有三个处理组对象和十二个对照组对象。



以下是处理组对象的年龄:45岁、38岁和41岁。以下是可用的对照组对象的年龄列表。








我将使用贪心算法,逐个进行匹配。处理组对象和对照组对象在左侧。当我找到匹配时,我会将它们放在右侧的列中。
我们从第一个对象开始。第一个对象是45岁,其最佳匹配是44岁的对照组对象。我将这个匹配放在这里。我们匹配了一个处理组对象和一个对照组对象。第一个处理组对象是45岁,最佳匹配(即年龄绝对差值最小)是44岁。
接下来,我们看第二个处理组对象,即38岁。我划掉了44岁,因为他不再可用于匹配。我们发现36岁是最佳匹配。我们在这里是贪心的,我们只是找到年龄绝对差值最接近处理组对象的对象。现在我们将38岁与36岁匹配,并从列表中划掉36岁,这个人不再可用于匹配。
接下来,我们转到41岁。41岁可以匹配到47岁(如图所示),也可以匹配到35岁,距离相同。我随便选了一个。无论哪种情况,距离都是6。现在我们可以把这些绝对距离加起来。第一个匹配对的距离是1,第二个匹配对的距离是2,第三个匹配对的距离是6,因此总距离为9。所以,处理组和对照组之间的年龄总差异是9。这是贪心匹配的结果。
然而,实际上可以找到一组更好的整体匹配。这里我列出了一组更好的匹配。
同样,处理组对象在这里,年龄是45、38和41。我将这个对照组对象与第一个处理组对象匹配,这个对照组对象与第二个处理组对象匹配,这个对照组对象与第三个处理组对象匹配。如果你把这些距离加起来,第一对的差异是2,第二对的差异是2,第三对的差异是3。所以这里的总距离是7。而回顾之前,总距离是9。因此,这里的总距离更小。
这个例子说明了,使用贪心算法时,总是选择当前最小距离的匹配,并没有考虑全局情况。有时你可能希望为后面的对象保留一个更好的匹配,而接受当前一个稍差的匹配。但贪心匹配从不向前看,不考虑全局,只是总是抓住最佳匹配。因此,在全局距离意义上,它不一定是最优的。
这说明了贪心匹配不一定是最优的,而且通常确实不是,至少在最小化总距离方面是如此。
什么是最优匹配? 🧠
那么最优匹配是做什么的呢?最优匹配旨在最小化全局距离。全局指的是总距离。你可以想象全局情况是:考虑处理组对象和对照组对象之间所有可能的匹配组合,计算每种组合的总距离,然后选择具有最小总距离的那组匹配。
但这会涉及大量计算。虽然可以做到,但如果数据集很大,计算量会非常大。这是一个难题。
它可以通过网络流优化方法来解决。其细节远超本课程范围,但本质上,这是一个困难的优化问题,不过人们已经找到了解决方法。即便如此,计算要求仍然很高。
总的来说,对于小数据集,最优匹配非常可行;对于大数据集,计算负担可能变得过大。但核心思想是,最优匹配旨在最小化这个全局距离。
有软件包可以实现这一点,例如R语言中的optmatch或RCbalance。
最优匹配的计算可行性 ⚙️
那么最优匹配在计算上是否可行呢?这实际上取决于问题的规模。这里的规模通常指的是可能的处理-对照配对数量。
例如,如果你有100个处理组对象和1000个对照组对象,就有100,000种可能的配对。实际上,这是可以在合理时间内解决的问题规模。事实上,你的计算机甚至可能处理一百万个处理-对照配对,但这需要一些时间。一旦你达到数千个对象和可能上百万个配对,你的计算机可能会运行很长时间,但通常处理这个数量级是可行的。
然而,一旦达到例如10,000个处理对象和100,000个对照对象(即十亿级别的配对),你可能就无法使用最优匹配了。你的计算机可能会运行一个月或更长时间,所以这实际上不可行。
因此需要注意,尽管最优匹配应该比贪心匹配更好,但有时最优匹配根本不可行。
不过,你可以采取一些措施。有不同的方法可以使最优匹配更可行。这可能不是完全的全局最优匹配,而是一种折中方案。
你可以施加一些约束来使最优匹配变得可行。例如,想象一下,在一项多中心临床研究中,我们可能希望在医院内部进行匹配。与其在整个数据集上一次进行最优匹配,不如在医院内部进行最优匹配。这样做的想法是,你只接受给定医院内的处理-对照配对。在医院内部进行最优匹配,这大大减少了问题的规模。
假设有10家规模相同的医院,你基本上将优化问题的规模减少了10倍(除以10),因此可能变得可行。你可以将这些视为区组,你可能希望在区组内进行匹配。
另一个例子可能是在主要疾病类别内进行匹配。例如,主要疾病类别可能是某人住院时的主要诊断代码,如心力衰竭、慢性阻塞性肺病等。你可能希望将处理组和对照组对象在主要疾病类别内进行匹配,这就是一个区组的例子。如果你在这些区组内进行优化,就可能得到计算上可行的方案。
这也被称为稀疏匹配。你可以在R包RCbalance中实现这一点。使用这种特定软件包,你还可以告诉它容忍一些不完美的匹配,只要实现了精细平衡。我们之前讨论过一点精细平衡,但提醒一下,你可能愿意接受不完美的匹配。例如,只要性别在治疗组和对照组中的总体分布相同,你可能愿意匹配一个男性和一个女性。
有多种方法可以使这些匹配问题更可行,例如在给定约束条件下进行优化等。有软件可以使所有这些变得可行,你可以根据特定研究的需求进行定制。使用软件相对简单,并且在计算上是可行的。
总结 📝
本节课中我们一起学习了最优匹配。我们首先通过一个例子说明了贪心匹配并非全局最优,因为它只关注当前最佳匹配而不考虑整体。然后,我们探讨了什么是最优匹配,即旨在最小化所有匹配对总距离的全局优化方法。我们讨论了其计算可行性,指出对于大数据集可能面临挑战,但可以通过施加约束(如区组内匹配)来应对。最后,我们提到了实现最优匹配的软件工具。理解最优匹配有助于我们在进行因果推断时,构建出协变量平衡性更好的处理组和对照组,从而得到更可靠的效应估计。
22:平衡性评估 📊

在本节课中,我们将学习如何评估匹配后的协变量平衡性。我们将介绍标准化差异的概念,并展示如何通过表格和图形来检查匹配是否成功。
概述
上一节我们介绍了匹配的基本方法。本节中,我们来看看如何评估匹配的效果。匹配的主要目标之一是使处理组和对照组在协变量上达到平衡,类似于随机试验中的情况。为了判断匹配是否成功,我们需要检查协变量在两组之间是否平衡。
什么是平衡性评估?
平衡性评估是指在完成匹配后,检查处理组和对照组在各个协变量上的分布是否相似。在随机试验中,由于随机化,协变量会自动平衡。匹配的目标就是创造类似的条件。
以下是评估平衡性的两种主要方法:
- 标准化差异:检查两组间均值的差异,并以标准差为单位进行标准化。
- 假设检验:例如,对连续变量使用双样本T检验,对分类变量使用卡方检验,并报告P值。
然而,假设检验的P值依赖于样本量。在大样本研究中,即使均值差异很小,也可能得到显著的P值。因此,通常更推荐使用标准化差异。
标准化差异详解
标准化差异是一种不直接依赖于样本量的平衡性度量。其核心思想是将两组间的均值差异,除以一个合并的标准差,从而得到一个以标准差为单位的差异值。
对于一个给定的协变量 X,其标准化均值差异的计算公式如下:
SMD = (X̄_treatment - X̄_control) / S_pooled
其中:
- X̄_treatment 是处理组中该协变量的样本均值。
- X̄_control 是对照组中该协变量的样本均值。
- S_pooled 是合并标准差,计算公式为:
sqrt((S²_treatment + S²_control) / 2)。S²_treatment和S²_control分别是两组的样本方差。
SMD的绝对值通常被用来评估平衡性。常见的经验法则是:
- SMD < 0.1:通常表示平衡良好。
- 0.1 ≤ SMD ≤ 0.2:存在一定差异,但通常可以接受。
- SMD > 0.2:表示存在严重的失衡,需要关注。
如何呈现结果:Table 1
在学术论文中,通常使用“Table 1”来呈现研究人群的基本特征。在匹配分析中,Table 1 会分别展示匹配前和匹配后的情况。
以下是一个来自右心导管插入术(RHC)研究的简化示例。表中列出了几个协变量在处理组(RHC)和对照组(No RHC)中的情况。
匹配前 (Unmatched)
| 变量 | 对照组 (No RHC) | 处理组 (RHC) | 标准化差异 |
|---|---|---|---|
| 样本量 (N) | 2,181 | 2,184 | - |
| 年龄 (岁), 均值 (标准差) | 61.2 (16.7) | 60.8 (16.0) | 0.06 |
| 性别 (% 男性) | 55.6% | 55.0% | 0.01 |
| ... (其他变量) | ... | ... | ... |
| 神经疾病 (%) | 16.2% | 5.4% | 0.35 |
从表中可以看到,匹配前,在“神经疾病”这个变量上,两组的患病率差异很大(16.2% vs 5.4%),标准化差异为0.35,表明存在严重失衡。
匹配后 (Matched)
| 变量 | 对照组 (Matched No RHC) | 处理组 (Matched RHC) | 标准化差异 |
|---|---|---|---|
| 样本量 (N) | 2,184 | 2,184 | - |
| 年龄 (岁), 均值 (标准差) | 60.8 (16.0) | 60.8 (16.0) | 0.00 |
| 性别 (% 男性) | 55.0% | 55.0% | 0.00 |
| ... (其他变量) | ... | ... | ... |
| 神经疾病 (%) | 5.7% | 5.3% | 0.02 |
匹配后,两组样本量相同(配对匹配),所有协变量的标准化差异绝对值都降到了0.1以下。特别是“神经疾病”的差异变得非常小(5.7% vs 5.3%),标准化差异仅为0.02。这时的数据分布更接近随机试验的结果,说明匹配是成功的。
可视化平衡性:Love Plot
当协变量很多时,用图形来展示所有变量的标准化差异会非常直观。这种图形有时被称为“Love Plot”。
下图展示了上述例子中匹配前后各变量标准化差异的变化:
- 红线 代表匹配前的标准化差异。
- 蓝线 代表匹配后的标准化差异。
- 灰色虚线 位于0.1处,作为平衡性良好的参考阈值。
从图中可以清晰地看到,匹配前(红线),多个变量的点位于0.1阈值右侧,表明存在失衡。匹配后(蓝线),所有变量的点都聚集在0.1阈值左侧,非常接近0,说明匹配显著改善了所有协变量的平衡性。
这种图形能让我们快速、整体地评估匹配效果。
总结

本节课中,我们一起学习了如何评估匹配后的协变量平衡性。我们介绍了标准化差异这一核心概念及其计算公式,它比假设检验的P值更稳定。我们学习了如何通过Table 1来对比匹配前后的数据,并利用Love Plot对多个协变量的平衡性进行可视化评估。成功的匹配应使处理组和对照组在关键协变量上的分布尽可能相似,标准化差异的绝对值最好小于0.1,从而使观察性研究的数据更接近随机试验的理想状态。如果评估发现平衡性不佳,我们可能需要返回上一步,重新考虑或调整匹配策略。
23:匹配后数据分析 📊

在本节课中,我们将学习如何分析经过匹配处理后的数据。我们将假设你已经完成了数据匹配,并检查了平衡性,现在准备分析结果数据。我们将重点介绍适用于匹配数据的统计方法,特别是随机化检验(也称为置换检验或精确检验),并解释其原理和用途。
概述
上一节我们介绍了数据匹配和平衡性检查。本节中,我们来看看如何对匹配后的结果数据进行统计分析。核心目标是检验处理效应是否存在,并估计其大小和置信区间。所有分析方法都应考虑数据已匹配这一事实。
随机化检验(置换检验)🎲
随机化检验的核心思想是:在完成匹配后,我们可以将数据视为来自一项随机化试验。检验步骤如下:
- 选择一个检验统计量。
- 根据观察到的数据计算该统计量。
- 假设零假设(即无处理效应)成立。
- 在每一对匹配的个体中,随机置换处理分配标签(例如,随机决定谁被视为处理组,谁被视为对照组)。
- 基于置换后的数据重新计算检验统计量。
- 重复步骤4和5多次(例如1000次),记录每次的统计量。
- 将观察到的统计量与置换产生的统计量分布进行比较。如果观察值在分布中显得“异常”(例如,处于极端位置),则拒绝零假设。
以下是具体操作流程:
二元结果数据示例
假设我们有一个二元结果(例如,事件发生=1,未发生=0),并且有13个匹配对。
我们选择的检验统计量是处理组中事件发生的总次数。
以下是一些假设的匹配对数据:
| 匹配对编号 | 处理组结果 | 对照组结果 |
|---|---|---|
| 1 | 0 | 0 |
| 2 | 1 | 0 |
| 3 | 0 | 1 |
| 4 | 0 | 0 |
| 5 | 1 | 0 |
| 6 | 1 | 0 |
| 7 | 0 | 0 |
| 8 | 0 | 0 |
| 9 | 1 | 0 |
| 10 | 0 | 1 |
| 11 | 0 | 0 |
| 12 | 1 | 0 |
| 13 | 0 | 0 |
在观察数据中,处理组共有 6 次事件发生(统计量 T = 6)。
接下来,我们在零假设下进行随机置换。对于每个匹配对,我们随机交换处理组和对照组的标签(相当于以50%的概率交换0和1)。只有结果不一致的匹配对(即一个为0,一个为1)在置换时会影响统计量。
重复此过程多次(例如1000次),每次记录处理组的事件发生次数,得到该统计量的经验分布。
如果观察到的统计量(T=6)在这个分布中处于常见区域(例如,靠近中心),则说明该结果在无处理效应的情况下并不罕见,我们没有足够证据拒绝零假设。反之,如果观察值处于分布的极端尾部,则表明可能存在处理效应。
对于此例,我们可以使用McNemar检验(一种用于配对二元数据的标准检验)来获得精确的p值。在R语言中,操作如下:
# 创建列联表矩阵
# 格式:[两者均为1, 仅处理组为1; 仅对照组为1, 两者均为0]
x <- matrix(c(1, 5, 2, 5), nrow=2, byrow=TRUE)
# 执行McNemar检验
mcnemar.test(x)
检验结果会给出一个p值(例如p=0.45),这远大于0.05,因此我们不能拒绝“无处理效应”的零假设。这个p值与通过大量随机置换计算得到的p值在概念上是等价的。
连续结果数据示例
上一节我们看了二元结果的例子。本节中,我们来看看当结果是连续变量时(例如收缩压)该如何分析。
假设我们有20个处理-对照匹配对。我们选择的检验统计量是处理组与对照组样本均值的差异。
公式: T = mean(处理组) - mean(对照组)
假设计算出的观察差异为 -8.2(即处理组的平均收缩压比对照组低8.2个单位)。
同样,我们进行随机化检验:在每个匹配对内随机置换处理标签,重新计算均值差异,重复多次。
经过1000次置换后,我们得到统计量T的经验分布。如果零假设成立,这个分布应大致以0为中心。
在我们的例子中,观察值T = -8.2 落在了经验分布的极端尾部,甚至在1000次置换中从未出现过如此极端的值。这表明观察到的差异在“无处理效应”的假设下极不可能发生,因此我们拒绝零假设,认为存在处理效应。
对于连续配对数据,更常用的方法是配对t检验。在R中操作如下:
# 假设‘treated’和‘control’是两个对应的数值向量
t.test(treated, control, paired=TRUE)
该检验会输出均值差异的点估计(如-8.2)、置信区间(如-10.7 到 -5.7)和一个极小的p值,从而为处理效应提供统计证据。
其他适用的结果模型 🧮
除了上述的随机化检验和配对t检验,还有其他统计模型可以用于分析匹配后的数据,具体取决于结果变量的类型:
以下是几种常用模型:
- 条件逻辑回归:适用于匹配后的二元结果数据。
- 分层Cox模型:适用于生存时间或事件发生时间数据。与标准Cox模型类似,但允许基线风险函数在每个匹配集内不同(通过
strata(匹配ID)实现)。 - 广义估计方程:适用于多种类型的结果,特别是二元结果。通过指定
cluster=匹配ID来解释匹配集内的相关性。GEE可以用于估计因果风险差(使用恒等连接函数)、因果风险比(使用对数连接函数)或因果优势比。

总结
本节课中,我们一起学习了如何分析经过匹配后的数据。我们介绍了随机化检验(置换检验) 的基本原理和步骤,并通过二元结果和连续结果的两个例子演示了其应用。我们还提到了其他适用于匹配数据的标准分析方法,如McNemar检验、配对t检验、条件逻辑回归、分层Cox模型和广义估计方程。选择哪种方法取决于结果数据的类型和你想要估计的因果效应度量。关键在于,所有分析都必须尊重数据经过匹配这一设计。
24:敏感性分析 🔍

在本节课中,我们将学习敏感性分析的核心概念。敏感性分析用于评估研究结论在关键假设(如无未测量混杂)被违反时的稳健性。我们将探讨什么是隐藏偏倚,并介绍一种在实践中进行敏感性分析的具体方法。
隐藏偏倚的概念
上一节我们介绍了匹配分析的目标。匹配的主要目标是实现观测协变量的平衡。这些协变量是你事先选定、认为足以控制混杂的变量集合。如果这些观测变量不平衡,就会产生显性偏倚。匹配后,你可以检查平衡性,如果发现不平衡,可以识别并尝试纠正它。
然而,匹配并不能保证我们未匹配的变量达到平衡。这些可能是未观测到的变量,或是你选择不匹配的变量。如果这些未观测变量本身是混杂因子且不平衡,就会产生隐藏偏倚。这种情况违反了“可忽略性”假设,也可称为存在未测量混杂。
这与随机试验不同,随机试验通过随机化应能平衡所有变量(包括观测和未观测的)。在匹配分析中,我们只能期望实现观测变量的平衡。
敏感性分析的核心思想
那么,敏感性分析的主要思想是什么呢?我们思考的是:如果存在隐藏偏倚,它需要达到多严重的程度,才会改变我们的研究结论?
“改变结论”可以指:
- 一个原本统计显著的结果变得不显著。
- 处理效应的方向发生改变(例如从正效应变为负效应)。
这是一个非常有用的概念,因为我们通常认为研究中很可能存在某种程度的未测量混杂。我们想知道,我们的结论是对关键假设的轻微违反就很敏感,还是对违反具有相当的稳健性。
量化隐藏偏倚:Gamma (Γ)
为了更详细地讨论敏感性分析,引入一些符号会很有帮助。
令 π_j 表示个体 j 接受处理的概率。
类似地,π_k 表示个体 k 接受处理的概率。
假设个体 j 和个体 k 在观测协变量上完全匹配,即 X_j = X_k。
那么,如果 π_j = π_k,则不存在隐藏偏倚。这意味着在匹配对中,尽管观测特征相同,但接受处理的概率也相同,因此没有未观测因素影响处理分配。
现在,考虑以下不等式:
1/Γ ≤ (π_j / (1 - π_j)) / (π_k / (1 - π_k)) ≤ Γ
不等式中的分子是个体 j 接受处理的比值比(概率除以1减概率),分母是个体 k 的比值比。因此,这个比值本身就是一个比值比。
这里的 Γ 就是一个比值比。
- 如果 Γ = 1,则 π_j = π_k,意味着没有隐藏偏倚。
- 如果 Γ > 1,则表示存在隐藏偏倚。这意味着即使观测协变量相同,个体 j 接受处理的可能性也高于个体 k,这可能是由未观测变量导致的。

因此,Γ 可以量化“无隐藏偏倚”这一假设被违反的程度:
- Γ = 1:假设完全成立。
- Γ 非常接近 1:假设轻微违反。
- Γ 远大于 1:假设严重违反。
实践中的敏感性分析
接下来,我们看看如何利用 Γ 代表隐藏偏倚这一思想进行实践分析。
假设你完成了一项匹配分析(确保良好的平衡性),并进行了结果分析,发现了处理效应的证据。这个证据是基于“无隐藏偏倚”(即 Γ = 1)的假设得出的,这通常是你初步分析(主要分析)的起点。
敏感性分析部分则是:逐渐增大 Γ 的值,直到处理效应的证据消失(例如,结果不再具有统计显著性)。对于每个选定的 Γ 值,你都需要在假设该 Γ 值成立的前提下重新分析数据。
以下是评估敏感性的逻辑:
- 如果你发现 Γ 只需增加到很小(例如 Γ = 1.1)结论就改变了,那么我们可以说推断结果对未测量混杂非常敏感。这意味着匹配对中一个个体相对于另一个个体的处理概率只需有微小差异,就足以改变我们的结论。
- 反之,如果结论直到 Γ 增加到很大(例如 Γ = 5)才改变,那么我们可以说结论对隐藏偏倚不敏感,我们会对自己的结论更有信心。因为需要相当强的隐藏偏倚才能推翻原结论。
具体的重新分析方法超出了本视频的范围,但已有一些 R 软件包(如 rbounds、sensitivitymv、sensitivityfull)可以实现。Paul Rosenbaum 的《观察性研究设计》一书也提供了更多细节。
总结
本节课中,我们一起学习了敏感性分析。我们首先了解了隐藏偏倚(由未观测混杂因子引起)与显性偏倚(由观测变量不平衡引起)的区别。然后,我们引入了参数 Γ 来量化隐藏偏倚的程度。最后,我们探讨了敏感性分析在实践中的应用逻辑:通过考察结论随着 Γ 值增大而改变的程度,来评估研究结果对未测量混杂假设的稳健性。这帮助我们理解研究结论在多大程度上依赖于“无未测量混杂”这一关键假设。
25:R语言因果推断数据实例分析 🧪

在本节课中,我们将学习如何使用R语言进行一项实际的匹配因果分析。我们将使用一个公开的右心导管插入术(RHC)数据集,通过匹配方法来估计治疗(RHC)对结局(死亡)的因果效应。
数据准备与加载
首先,我们需要加载分析所需的数据和R包。我们将使用两个主要的包:tableone用于创建描述性表格以评估组间平衡,Matching用于执行实际的匹配过程。
以下是加载数据和必要包的代码:
# 加载所需的包
library(tableone)
library(Matching)
# 读取数据
rhc_data <- read.csv("path_to_your_rhc_data.csv")
# 查看数据结构,了解变量和缺失值
str(rhc_data)
head(rhc_data)
为了简化后续分析,我们将数据中的一些字符型变量转换为数值型变量。例如,结局变量“death”在原始数据中编码为“Yes”/“No”,我们将其转换为1/0的二进制变量。
# 将字符变量转换为数值变量
rhc_data$death_numeric <- ifelse(rhc_data$death == "Yes", 1, 0)
# ... 对其他需要的变量执行类似转换
# 创建用于分析的新数据集,包含治疗变量、结局变量和选定的协变量
my_data <- rhc_data[, c("treatment", "death_numeric", "age", "meanbp", "...")]
我们定义了一个协变量列表 X_vars,用于匹配和平衡评估。在实际分析中,您应该包含所有相关的混杂变量,但为了演示清晰,这里仅使用一个子集。
# 定义用于匹配的协变量列表
X_vars <- c("age", "meanbp", "...")
评估匹配前的组间平衡
在开始匹配之前,评估治疗组和对照组在协变量上的初始不平衡程度至关重要。这有助于我们了解潜在的混杂程度。
我们可以使用 tableone 包轻松创建“表1”,来比较两组在关键协变量上的分布。
# 创建匹配前的平衡表
table1_unmatched <- CreateTableOne(vars = X_vars,
strata = "treatment",
data = my_data,
test = FALSE)
# 打印表格,并显示标准化均值差(SMD)
print(table1_unmatched, smd = TRUE)
输出表格会显示每个协变量在两组中的均值、标准差,以及标准化均值差(SMD)。通常,SMD的绝对值大于0.1被认为存在有意义的失衡。从示例结果中,我们可以看到一些变量(如平均血压meanbp)在两组间存在较大差异,这表明需要进行匹配来调整这些混杂因素。
执行贪婪匹配
上一节我们介绍了如何评估初始的不平衡,本节中我们来看看如何使用Matching包执行贪婪最近邻匹配,以改善组间的可比性。
匹配的目标是为每个治疗组个体找到一个或多个在协变量上最相似的对照组个体。这里我们进行1:1配对匹配。
# 执行贪婪匹配
set.seed(123) # 设置随机种子以保证结果可重复
match_result <- Match(Y = NULL, # 暂时不指定结局变量
Tr = my_data$treatment,
X = my_data[, X_vars],
M = 1, # 1:1匹配
replace = FALSE)
# 从匹配结果中提取匹配对的数据
matched_data <- my_data[c(match_result$index.treated, match_result$index.control), ]
matched_data$pair_id <- rep(1:length(match_result$index.treated), 2)
评估匹配后的组间平衡
匹配完成后,我们必须再次评估平衡性,以确认匹配是否有效减少了混杂偏倚。
我们使用与匹配前相同的CreateTableOne函数,但这次应用于匹配后的数据集。
# 创建匹配后的平衡表
table1_matched <- CreateTableOne(vars = X_vars,
strata = "treatment",
data = matched_data,
test = FALSE)
print(table1_matched, smd = TRUE)
在理想的匹配后,所有协变量的SMD都应变得非常小(远小于0.1)。在示例中,匹配后所有变量的SMD都接近于零,表明治疗组和对照组在观察到的协变量上已经非常相似,类似于随机化试验后的情况。这为我们后续的因果效应估计提供了良好的基础。
进行结局分析:配对T检验
既然我们已经通过匹配获得了平衡的数据集,现在可以估计治疗对结局的因果效应了。一种简单的方法是使用配对T检验。
首先,我们需要根据匹配对,分别提取治疗组和对照组的结局数据。
# 提取匹配对中的治疗组和对照组结局
y_treated <- matched_data$death_numeric[matched_data$treatment == 1]
y_control <- matched_data$death_numeric[matched_data$treatment == 0]
# 计算配对差异(每个治疗-对照对的结局差异)
pair_diff <- y_treated - y_control
# 对配对差异执行单样本T检验(检验均值是否为0)
t_test_result <- t.test(pair_diff)
print(t_test_result)
检验结果提供了因果风险差的点估计和置信区间。例如,点估计为0.045意味着,如果所有人都接受RHC治疗,与所有人都不接受治疗相比,死亡概率平均高出4.5个百分点。一个具有统计学显著性的P值(如 < 0.05)支持存在因果效应的结论。
进行结局分析:McNemar检验
对于二分类结局,除了配对T检验,我们还可以使用McNemar检验,它专门用于分析配对分类数据。
以下是创建配对列联表并执行McNemar检验的步骤:
# 创建配对结局的列联表
pair_table <- table(y_treated, y_control)
print(pair_table)
# 执行McNemar检验
mcnemar_result <- mcnemar.test(pair_table)
print(mcnemar_result)

列联表显示了四种类型的配对数量:两者均死亡、两者均存活、治疗死亡而对照存活、治疗存活而对照死亡。McNemar检验关注的是后两种不一致配对的数量。如果治疗导致更高的死亡风险,我们预期“治疗死亡/对照存活”的对数会显著多于“治疗存活/对照死亡”的对数。检验结果同样会给出一个P值,用于判断治疗效应是否显著。
总结与扩展说明
本节课中,我们一起学习了在R语言中执行匹配因果分析的完整流程:
- 数据准备:加载数据、转换变量格式、选择协变量。
- 平衡评估:使用
tableone包在匹配前后创建“表1”,并通过标准化均值差(SMD)量化不平衡。 - 执行匹配:使用
Matching包进行贪婪最近邻匹配,以构建一个协变量平衡的数据集。 - 效应估计:在匹配数据上,使用配对T检验或McNemar检验来估计平均治疗效应(此处为因果风险差)。
重要说明与扩展:
- 本教程为演示目的,仅使用了部分协变量。在实际分析中,您应基于领域知识,尽可能纳入所有重要的混杂变量。
- 我们估计的是因果风险差。如果您想估计风险比或比值比,可以使用广义估计方程(GEE)等模型,例如在
geepack包中使用logit链接函数。 Matching包是基础选择。对于更复杂的匹配需求(如精细平衡、最优匹配),推荐研究rcbalance包,其在学术文献中有详细说明。tableone包的功能非常强大,不仅能生成表格,还能创建用于评估平衡的图形(如爱丽丝图、标准差分布图),是进行严谨匹配分析的重要工具。
通过以上步骤,我们得出结论:在控制了所选混杂因素后,接受右心导管插入术(RHC)的患者具有更高的死亡风险。这展示了如何使用观察性数据进行因果推断的基本方法。
26:倾向性评分 🎯


在本节课中,我们将学习倾向性评分的概念及其平衡性质。倾向性评分是因果推断中的一个核心工具,它帮助我们处理观察性研究中的混杂变量。
什么是倾向性评分?
倾向性评分是指在给定协变量 X 的条件下,个体接受治疗的概率。具体来说,我们将治疗定义为 A = 1,对照定义为 A = 0。
因此,对于个体 i,其倾向性评分 πᵢ 的正式定义为:
πᵢ = P(A = 1 | Xᵢ)
倾向性评分是协变量 X 的函数。例如,假设年龄是唯一的协变量,且年龄越大的人接受治疗的可能性越高。那么,60岁个体的倾向性评分就会高于30岁的个体。
如果一个体的倾向性评分为0.3,这意味着在给定其特定协变量的情况下,他们有30%的概率会接受治疗。
倾向性评分的平衡性质
上一节我们介绍了倾向性评分的定义,本节中我们来看看它的一个重要特性:平衡性质。
倾向性评分是一个平衡评分。这意味着,如果我们限定在具有相同倾向性评分值的人群中,那么治疗组和对照组之间的协变量分布应该是平衡的。
为了理解这一点,想象有两个个体,他们有不同的协变量值 X,但却有相同的倾向性评分 π(x)。由于倾向性评分就是接受治疗的概率,这意味着尽管他们的协变量不同,但接受治疗的可能性是相同的。因此,在治疗组中,我们预期会以大致相同的比例看到这两种类型的协变量组合。
更正式地说,对于任意一个固定的倾向性评分值 p,以下等式成立:
P(X | π(X) = p, A = 1) = P(X | π(X) = p, A = 0)
这个性质意味着,如果我们根据倾向性评分进行匹配或分层,就可以在分析中实现协变量的平衡。这之所以有效,是因为我们假设了可忽略性,即在给定 X 的条件下,治疗分配是随机的。通过限定倾向性评分,我们实际上是在限定治疗分配的概率,从而模拟了一个随机试验的环境。
如何估计倾向性评分?
在随机试验中,倾向性评分通常是已知的,由研究设计决定。然而,在观察性研究中,倾向性评分是未知的,需要我们根据观测数据进行估计。
以下是估计倾向性评分的主要步骤:
- 构建预测模型:将治疗变量 A 视为“结果”,将协变量 X 视为预测因子。这是一个典型的二元分类预测问题。
- 选择模型:最常用的方法是逻辑回归。模型形式如下:
logit(P(A=1 | X)) = β₀ + β₁X₁ + ... + βₖXₖ
但也可以使用任何其他适用于二元结果的机器学习模型。 - 获取预测概率:拟合模型后,为每个个体计算其接受治疗的预测概率。这个介于0和1之间的概率值,就是该个体的估计倾向性评分。
关键在于,我们的兴趣不在于模型系数本身,而在于为每个个体生成的预测概率。
总结
本节课中我们一起学习了倾向性评分。我们首先定义了倾向性评分是给定协变量下接受治疗的概率。接着,我们探讨了其核心的平衡性质,即相同倾向性评分下,治疗组与对照组的协变量分布相同。最后,我们介绍了在观察性研究中如何通过建模(如逻辑回归)来估计倾向性评分,为后续基于倾向性评分的匹配、加权或分层分析奠定基础。
27:倾向性评分匹配 🎯

在本节课中,我们将学习倾向性评分匹配的核心概念与操作步骤。我们将重点介绍倾向性评分重叠、尾部修剪、卡钳匹配等关键方法,并解释如何利用这些技术来估计因果效应。
概述
倾向性评分匹配是一种简化多变量匹配问题的有效方法。它通过将多个协变量汇总为一个单一的评分(即倾向性评分),然后基于此评分进行匹配,从而在处理组和对照组之间实现协变量分布的平衡。
倾向性评分作为平衡评分
上一节我们介绍了倾向性评分的基本概念。本节中,我们来看看它如何作为平衡评分发挥作用。
倾向性评分是一个平衡评分。这意味着,即使我们没有直接在协变量上进行匹配,而只是在倾向性评分上进行匹配,也应该能够实现处理组和对照组之间协变量分布的平衡。
此外,倾向性评分是一个标量。每个人只会得到一个介于0和1之间的单一数值。这极大地简化了匹配问题,因为我们只需要在一个变量上进行匹配,而不是在一整套变量上。本质上,倾向性评分汇总了所有协变量X的信息,我们只需基于这个汇总值进行匹配。
检查倾向性评分重叠
在估计出倾向性评分之后、实际进行匹配之前,通常需要检查倾向性评分分布的重叠情况。
以下是检查重叠的步骤:
- 比较处理组和对照组的倾向性评分分布。
- 通过绘图直观地观察两组分布是否有重叠区域。
- 理想的重叠意味着所有研究对象都有一定的概率接受任一种处理,这支持了“正性”假设。
一个良好的重叠示例如下:处理组(蓝色)的倾向性评分分布整体略高于对照组(红色),但两组在整个评分范围内都存在重叠。这表明,无论倾向性评分高低,两组中都有个体存在,因此可以合理地假设所有个体都有机会接受任一种处理。
相反,如果出现下图所示的重叠不良情况:在高倾向性评分区域,对照组几乎没有个体;在低评分区域,处理组几乎没有个体。这意味着对于具有某些极端协变量组合的个体,他们几乎注定会接受某一种处理,这违反了正性假设。
尾部修剪
当出现重叠不良时,一个常见的处理方法是进行“尾部修剪”。
尾部修剪是指从数据中移除具有极端倾向性评分的个体。这样做的目的是使正性假设更合理,并防止在估计因果效应时进行不可靠的外推。
以下是两种常见的修剪方法:
- 移除任何倾向性评分低于处理组最小倾向性评分的对照组个体。
- 移除任何倾向性评分高于对照组最大倾向性评分的处理组个体。
分析师可以自行决定“极端”的定义,但上述方法是常见的选择。修剪尾部是一个可选步骤,但检查分布重叠并据此决定是否修剪,是良好的实践。
进行匹配
在检查并可能修剪了尾部之后,我们就可以进行匹配了。
现在,我们基于倾向性评分这个单一数值来计算个体间的距离,并尝试最小化这个距离。我们可以使用贪婪最近邻匹配或最优匹配等方法,步骤与之前基于多变量匹配类似,只是距离度量现在基于倾向性评分。
一个常用的技巧是,在匹配前对倾向性评分进行logit变换。公式如下:
logit(p) = log( p / (1-p) )
其中 p 是倾向性评分。这个变换将0到1之间的评分拉伸到整个实数轴,保留了原始评分的排序,但在某些情况下(如处理罕见时)能使匹配更容易。
使用卡钳确保匹配质量
为了确保匹配质量,避免“糟糕”的匹配,我们可以使用“卡钳”。
卡钳定义了我们认为可接受的最大距离阈值。距离超过卡钳的匹配将被视为不可接受。在实践中,一个常见的卡钳设置方法是基于logit变换后倾向性评分的标准差。
具体步骤如下:
- 估计倾向性评分
p。 - 计算其logit值:
logit(p)。 - 计算数据集中
logit(p)的标准差sd。 - 将卡钳设置为
0.2 * sd。
0.2 这个因子是经验值,意味着我们允许的匹配差异约为标准差的20%。你可以调整这个值(例如改为 0.1),更小的卡钳会得到质量更高、偏差更小的匹配对,但也会减少匹配成功的数量,从而增加效应估计的方差。这需要在偏差和方差之间进行权衡。
匹配后的分析
一旦完成了倾向性评分匹配,后续的分析就与任何其他匹配分析完全相同。
我们可以使用随机化检验、条件逻辑回归、分层Cox模型等方法来分析匹配后的数据,以估计处理效应。
总结


本节课中,我们一起学习了倾向性评分匹配的全过程。我们从理解倾向性评分作为平衡评分开始,学习了如何检查评分分布的重叠,以及如何处理重叠不良的情况(尾部修剪)。接着,我们探讨了基于倾向性评分进行匹配的步骤,包括可选的logit变换和使用卡钳来控制匹配质量。最后,我们指出匹配后的分析与标准匹配分析无异。掌握这些步骤,能够帮助我们在存在多个混淆变量的情况下,更有效地估计因果效应。
28:R语言中的倾向性评分匹配 🧪

在本节课中,我们将学习如何在R语言中执行倾向性评分匹配分析。这涉及多个步骤,包括如何拟合倾向性评分模型、如何进行实际匹配,以及匹配后如何分析数据。
我们将使用公开可用的右心导管插入术数据作为示例。该数据涉及五家医院的ICU患者,治疗是右心导管插入术,我们称之为RHC。结局是死亡与否。混杂因素包括人口统计学特征、疾病诊断等。每组都有数千名受试者。
第一步:准备数据与包
首先,我们需要加载必要的R包、读取数据并查看数据结构。在本分析中,我们将使用 table1 包和 MatchIt 包。
原始数据包含许多字符变量,因此第一步是将它们转换为数值变量。然后,我们将创建用于分析的数据集,其中包含协变量、治疗变量和结局变量。
# 加载必要的包
library(table1)
library(MatchIt)
# 读取数据
data <- read.csv("rhc_data.csv")
# 将字符变量转换为数值变量(示例)
# data$variable <- as.numeric(as.factor(data$variable))
# 创建分析数据集
my_data <- data.frame(
treatment = data$RHC,
outcome = data$death,
# 列出所有协变量
age = data$age,
sex = data$sex,
# ... 其他协变量
)
第二步:拟合倾向性评分模型
上一节我们准备好了数据,本节中我们来看看如何拟合倾向性评分模型。假设我们感兴趣的是逻辑回归模型。
在倾向性评分模型中,治疗是结局。我们使用 glm 函数进行逻辑回归,其中治疗变量是因变量,所有协变量是自变量。
# 拟合倾向性评分模型
p_model <- glm(treatment ~ age + sex + ... , # 列出所有协变量
family = binomial(link = "logit"),
data = my_data)
# 查看模型摘要
summary(p_model)
模型摘要显示了哪些变量与治疗概率显著相关。例如,如果“女性”变量的系数为负,则表明女性接受治疗的可能性低于男性。这有助于我们理解谁更可能接受治疗,并检查模型是否存在编码错误。
接下来,我们为每个个体计算倾向性评分。
# 计算倾向性评分
p_score <- predict(p_model, type = "response")
第三步:检查倾向性评分分布与重叠
在开始匹配之前,检查倾向性评分的分布和重叠情况非常重要。我们希望看到治疗组和对照组在倾向性评分上有足够的重叠。
以下是检查重叠的代码示例:
# 绘制倾向性评分分布(治疗组 vs 对照组)
library(ggplot2)
plot_data <- data.frame(p_score = p_score, treatment = my_data$treatment)
ggplot(plot_data, aes(x = p_score, fill = factor(treatment))) +
geom_density(alpha = 0.5) +
labs(title = "倾向性评分分布(匹配前)", x = "倾向性评分", fill = "治疗组")
从图中,我们主要寻找重叠区域。理想情况下,两组分布应有大量重叠,不应出现在倾向性评分尾部只有治疗组或只有对照组的情况。
第四步:执行倾向性评分匹配
现在我们已经有了倾向性评分,接下来看看如何进行匹配。我们将使用 MatchIt 包,它简化了匹配过程。
MatchIt 包可以自动计算倾向性评分并进行匹配。我们指定匹配方法,例如“最近邻”贪婪匹配。
# 使用 MatchIt 进行倾向性评分匹配
m_out <- matchit(treatment ~ age + sex + ... , # 使用与模型相同的公式
data = my_data,
method = "nearest", # 最近邻匹配
distance = "glm") # 使用逻辑回归计算倾向性评分
# 查看匹配结果摘要
summary(m_out)
# 创建平衡诊断图
plot(m_out, type = "jitter") # 抖动图
plot(m_out, type = "hist") # 直方图
抖动图 非常有用,它显示了匹配和未匹配的个体。通常,你会看到四个区域:未匹配的治疗组、匹配的治疗组、匹配的对照组和未匹配的对照组。匹配后,两组的倾向性评分分布应看起来非常相似。
直方图 则直观地展示了匹配前后倾向性评分分布的变化。匹配后,两组的分布形状应更加接近。
第五步:评估匹配平衡性
匹配后,评估协变量的平衡性至关重要。我们通常使用标准化差异,希望所有协变量的标准化差异绝对值都小于0.1。
以下是使用 table1 包创建平衡表的示例:
# 提取匹配后的数据
matched_data <- match.data(m_out)
# 创建平衡表(比较匹配后治疗组与对照组的协变量)
table1(~ age + sex + ... | treatment, # 列出协变量,按治疗分组
data = matched_data,
overall = FALSE)
通过查看平衡表,我们可以确认匹配是否有效改善了协变量的平衡。
第六步:使用卡钳进行匹配
有时,简单的最近邻匹配可能无法达到理想的平衡。这时,我们可以使用卡钳匹配。卡钳设定了一个最大允许距离,只匹配倾向性评分差异在这个范围内的个体。
以下是使用 Match 包(注意不是MatchIt)进行卡钳匹配的示例:
# 首先,确保已安装并加载 Match 包
# install.packages("Match")
library(Match)
# 进行无卡钳的匹配(作为比较)
match_no_caliper <- Match(Y = my_data$outcome,
Tr = my_data$treatment,
X = log(p_score/(1-p_score)), # 使用logit转换后的评分
M = 1, # 1:1匹配
replace = FALSE)
# 进行有卡钳的匹配
# caliper = 0.2 表示卡钳宽度为 logit(倾向性评分) 标准差的0.2倍
match_with_caliper <- Match(Y = my_data$outcome,
Tr = my_data$treatment,
X = log(p_score/(1-p_score)),
M = 1,
replace = FALSE,
caliper = 0.2)
使用卡钳后,匹配的对数通常会减少,因为一些差异过大的个体被排除了。但剩下的匹配对质量更高,协变量平衡性更好(标准化差异更小)。代价是样本量减小,可能导致估计效率略有下降,但偏倚更小。
第七步:匹配后结局分析
最后一步是对匹配后的数据进行结局分析,以估计平均处理效应。对于二分类结局(如死亡),我们可以使用配对检验或条件逻辑回归。
以下是使用配对t检验(适用于连续结局)或McNemar检验(适用于二分类结局)的简单示例:
# 提取有卡钳匹配后的数据索引
matched_indices <- match_with_caliper$index.treated
control_indices <- match_with_caliper$index.control
# 创建匹配后的数据集
matched_pairs_data <- data.frame(
treated_outcome = my_data$outcome[matched_indices],
control_outcome = my_data$outcome[control_indices]
)
# 对于二分类结局,使用McNemar检验
result <- mcnemar.test(matched_pairs_data$treated_outcome,
matched_pairs_data$control_outcome)
print(result)
# 计算风险差及其置信区间(示例)
library(boot)
# ... 这里可以使用自助法计算风险差和置信区间
分析结果将提供一个点估计(如风险差)和置信区间。我们可以比较使用卡钳前后结论是否一致。在本例中,即使使用卡钳后匹配对数减少,主要结论通常保持不变。
总结 🎯

本节课中,我们一起学习了在R语言中执行倾向性评分匹配的完整流程:
- 准备阶段:加载数据与包,处理变量类型。
- 建模阶段:使用逻辑回归拟合倾向性评分模型,并计算每个个体的评分。
- 诊断阶段:检查倾向性评分的分布与重叠。
- 匹配阶段:使用
MatchIt或Match包进行匹配(可选择是否使用卡钳)。 - 评估阶段:通过标准化差异和图形评估匹配后的平衡性。
- 分析阶段:对匹配后的数据执行结局分析,估计因果效应。
关键点在于,匹配(尤其是使用卡钳)可以改善协变量平衡,减少混杂偏倚,但可能会以损失部分样本为代价。在实际分析中,建议尝试不同的匹配设置并比较结果,以确保结论的稳健性。
29:逆概率加权处理的直观理解 🧠

在本节课中,我们将学习一种估计因果效应的方法——逆概率加权处理。我们将通过将其与匹配法联系起来,直观地理解其工作原理。课程将从一个简单的二元混杂因子示例开始,逐步解释逆概率加权如何通过调整权重来模拟随机试验的平衡性,从而估计因果效应。
逆概率加权与匹配法的关系
上一节我们介绍了因果推断的基本概念,本节中我们来看看逆概率加权处理。为了直观理解,我们将其与更熟悉的倾向得分匹配法进行类比。
假设我们有一个单一的二元混杂因子,记为 X。我们需要控制这个变量以估计处理效应。
现在,假设在 X=1 的人群中,接受处理的概率是 0.1。这意味着,对于 X=1 的个体,其倾向得分 e(X) 为 0.1。这是一个不太可能接受处理的亚组。
P(A=1 | X=1) = e(X=1) = 0.1
另一方面,在 X=0 的人群中,接受处理的概率是 0.8。这意味着,对于 X=0 的个体,其倾向得分 e(X) 为 0.8。这是一个非常可能接受处理的亚组。
P(A=1 | X=0) = e(X=0) = 0.8
我们可以用一张图来描绘这种情况:用一条垂直线分隔处理组和对照组,用蓝色(X=1)和红色(X=0)表示不同的混杂因子取值。这与我们上面关于倾向得分的描述相符。
倾向得分匹配的视角
让我们先关注 X=1 这个组。在这个亚组中,平均每10个人里,我们预期有1个人接受处理,9个人作为对照。这与随机试验的期望不同,随机试验中处理组和对照组的人数应大致相等。
倾向得分匹配法会怎么做呢?由于这里只有一个协变量,所有 X=1 的个体都有相同的倾向得分。匹配时,我们会将一个处理组个体与一个随机选择的对照组个体进行配对。
经过匹配后,我们使用的数据是:处理组有1个个体,对照组也有1个(被匹配的)个体。然而,这个被匹配的对照组个体实际上代表了原本的9个对照组个体。换句话说,匹配后,1个处理组个体在分析中“代表”了9个对照组个体。
匹配法通过丢弃部分数据(本例中丢弃了8个对照个体)来创造这种平衡。
逆概率加权处理的思路
与其丢弃数据,我们是否可以通过调整每个个体的权重来达到同样的平衡效果呢?这就是逆概率加权处理的核心思想。
在这个例子中,那个唯一的处理组个体,其“代表性”应该是9个对照组个体的总和。因此,我们可以上调这个处理个体的权重,同时下调每个对照个体的权重,使得他们的总“影响力”相等。
逆概率加权正是这样做的:它根据个体实际接受的处理来赋予权重。
以下是赋予权重的具体规则:
- 对于接受处理(A=1) 的个体,其权重为 1 / P(A=1|X),即倾向得分的倒数。
- 对于接受对照(A=0) 的个体,其权重为 1 / P(A=0|X),即“不接受处理”概率的倒数。
这被称为逆概率处理加权。
权重计算示例
让我们回到 X=1 组的例子进行计算。
-
处理组个体 (A=1):
- 倾向得分
P(A=1|X=1) = 0.1 - 权重 =
1 / 0.1 = 10
- 倾向得分
-
对照组个体 (A=0):
P(A=0|X=1) = 1 - 0.1 = 0.9- 权重 =
1 / 0.9 = 10/9 ≈ 1.11
现在,我们有1个权重为10的处理个体,和9个每个权重约为1.11的对照个体。9个对照个体的总权重为 9 * (10/9) = 10。通过加权,处理组个体的总影响力(10)与对照组个体的总影响力(10)变得相等了。这模拟了随机试验中该亚组内的平衡。
再看 X=0 组的情况
现在让我们看看 X=0 的组。其倾向得分为0.8,因此该组内个体很可能接受处理。假设有5个个体,其中4个在处理组,1个在对照组。
如果进行倾向得分匹配,我们会将那个唯一的对照组个体与处理组中的一个个体配对。匹配后,1个对照组个体在分析中“代表”了4个处理组个体。
使用逆概率加权:
- 处理组个体 (A=1):
- 权重 =
1 / P(A=1|X=0) = 1 / 0.8 = 1.25
- 权重 =
- 对照组个体 (A=0):
- 权重 =
1 / P(A=0|X=0) = 1 / 0.2 = 5
- 权重 =
计算总影响力:4个处理个体的总权重为 4 * 1.25 = 5,与那个权重为5的对照个体相等。逆概率加权再次成功创造了组间平衡。
总结

本节课中,我们一起学习了逆概率加权处理的直观原理。
我们通过一个简单的二元混杂因子例子,展示了IPTW如何工作:
- 核心思想:通过给每个观察值赋予权重,使数据在混杂因子层面上看起来像是来自一个随机试验。
- 权重公式:
- 处理组权重:
W = 1 / e(X) - 对照组权重:
W = 1 / (1 - e(X))
- 处理组权重:
- 与匹配法的关系:IPTW可以达到与倾向得分匹配类似的目标——创造组间可比性——但无需丢弃任何数据,而是通过重新加权来利用所有样本信息。
无论是通过一对一匹配,还是通过逆概率加权,我们最终都实现了:对于给定的倾向得分值(或给定的X值),处理组个体的集合与对照组个体的集合在分析中具有同等的重要性,就像在随机试验中一样。这为后续无偏地估计平均处理效应奠定了基础。
30:深入理解逆概率加权估计 ⚖️

在本节课中,我们将深入探讨逆概率加权估计的直观理解。我们将重点关注这种加权方法如何创建“伪总体”,并最终消除混杂效应。为了便于理解,我们将从调查抽样这个例子入手。
从调查抽样到因果推断 🔄
在调查中,相对于其他群体,过度抽样某些群体是非常常见的做法。例如,你可能最终想研究某个少数群体、老年人或某个相对于总人口规模较小的亚群体,并希望确保获得足够大的该群体样本量。因此,你可能会对这些群体进行过度抽样。
那么,如果你想要估计整个总体的均值,而不仅仅是某个亚群体的均值,你就必须对数据进行加权,以校正过度抽样的影响。这种方法被称为霍维茨-汤普森估计。
只要你知道每个群体的基础比例以及你使用的抽样权重(即你过度抽样的程度),你就可以通过加权还原回原始总体。这实际上与我们在观察性研究中比较不同处理时的情况相关。
观察性研究中的“过度抽样” 📊
在一个存在混杂的观察性研究中,你通常会在协变量的不同取值水平上,对处理组或对照组进行“过度抽样”。换句话说,你可以想象,也许更健康的人更有可能接受某种治疗。这可以被视为一种“过度抽样”——相对于理想的随机化情况(即健康人群中处理组和对照组人数相等),你在某种意义上过度抽样了接受处理的人。
从这个意义上说,它类似于调查抽样,因此存在使用加权来还原原始总体的可能性。我们接下来要尝试的就是使用加权来创建一个没有混杂的伪总体。
创建无混杂的伪总体:一个例子 🧩
让我们考虑一个倾向性得分为0.9的情况。这意味着存在一个由协变量X定义的亚群体,他们接受处理的概率为0.9。这是一群极有可能接受处理的人。
我们可以用下图表示:在处理组中,有9个红色圆圈;在对照组中,有1个。这是正确的比例,因为我们看到每10个受试者中有9个接受了处理。这就是原始总体。观察这个图,它确实看起来像是“过度抽样”——相对于理想情况(处理组和对照组平衡),你过度抽样了接受处理的人。

我们可以应用加权来得到我们真正想要的结果。
- 对于处理组,我们应用权重
1 / 0.9,即10/9。每个处理组的受试者将获得10/9的权重。 - 对于对照组,我们应用权重
1 / 0.1,即10。
应用这些权重后,我们最终会在处理组和对照组各得到10个圆圈。在处理组,每个人算作 10/9 个人,原来有9个人,(10/9) * 9 = 10。在对照组,每个人算作10个人,原来有1个人,10 * 1 = 10。
我们可以将其视为一个应用了权重后的伪总体。在这个新总体中,没有过度抽样,它完全按照我们期望的方式平衡,就像一项随机试验一样。
重申一下:在原始总体中,某些人基于其协变量更有可能接受处理。但在这个伪总体中,无论其X值如何,每个人接受处理的概率都相等。这当然是你进行随机试验时希望看到的情况——每个人接受处理的概率相等,且不依赖于X,因为我们本质上是在抛硬币。
如何进行估计 📈

现在,让我们想象我们实际上想要进行估计。回想一下,如果我们想估计一个因果效应,我们通常需要估计类似下式的东西:
E[Y(1)]
这里,Y(1) 是处理下的潜在结果。E[Y(1)] 表示如果总体中每个人都接受了处理,Y的平均值。这是我们感兴趣的量之一。我们同样也需要 E[Y(0)](另一种潜在结果的均值)。我将以类似的方式说明如何估计其中一个潜在结果的均值。
我将逐步解析以下这个公式,希望这能让过程更清晰:
E[Y(1)] ≈ ( Σ [I(A_i=1) * Y_i / π(X_i)] ) / ( Σ [I(A_i=1) / π(X_i)] )
首先要注意的是,我们有两个指示函数 I(A_i=1),并且我们对 i=1 到 N 求和。N是你数据中(随机抽样的)总人数。
- 指示函数
I(A_i=1):这个函数会“挑选”出接受处理的个体。A_i=1表示接受处理,A_i=0表示未接受。它就像一个开关:如果个体接受了处理,开关打开(值为1),我们保留这个Y值;如果为0,我们就忽略它。这只是一种花哨的说法,表示我们只想要处理组的受试者。
如果没有混杂,我们只需取处理组Y的样本均值来估计处理组Y的均值。但这里存在混杂,所以我们实际上需要取伪总体的样本均值,而不是原始总体的,因为原始总体存在混杂。上面的公式所做的正是这件事。
- 分子
Σ [I(A_i=1) * Y_i / π(X_i)]:这部分是处理组伪总体中Y值的总和。我们说“处理组”是因为我们挑选了接受处理的个体,说“伪总体”是因为我们进行了加权。我们加总了处理组伪总体中所有的Y值。 - 分母
Σ [I(A_i=1) / π(X_i)]:我们不能只加总Y值,还需要除以某个总数,就像计算样本均值时需要除以N一样。这里我们需要除以的是处理组伪总体中的“受试者数量”,这本质上就是权重的总和。所以我们只考虑处理组个体,然后加总他们的权重。
进行这个除法后,我们就得到了潜在结果均值的有效估计。这一切都基于我们的典型假设得到满足:
- 可交换性:也称为可忽略性。假设我们的协变量X已经完全捕捉了所有混杂因素,因此在给定X的条件下,处理分配是随机的。
- 正值性:倾向性得分
π(X)严格介于0和1之间,永远不会恰好等于0或1。每个人都有非零的概率接受任一种处理。
这里的 π(X_i) 就是倾向性得分。
关于这一点,还有一个额外的说明:你可以看到为什么正值性假设如此重要。因为我们除以了倾向性得分本身,如果倾向性得分实际为0,就会导致除以零的问题。这进一步重申了正值性假设的重要性。
总结 📝
本节课中,我们一起学习了逆概率加权估计的直观原理。我们从调查抽样的类比出发,理解了在观察性研究中,协变量导致的处理组不平衡可以视为一种“过度抽样”。通过应用逆概率权重(1/π(X) 用于处理组,1/(1-π(X)) 用于对照组),我们能够构建一个伪总体。在这个伪总体中,处理分配与协变量X无关,模拟了随机试验的环境,从而允许我们无偏地估计潜在结果均值(如 E[Y(1)])。整个过程依赖于可交换性(无未测混杂)和正值性(所有个体都有机会接受任一种处理)这两个关键假设。
31:边际结构模型 🧠

在本节课中,我们将学习一种特殊的因果模型——边际结构模型。我们的目标是理解这种模型是什么,特别是它与普通回归模型有何不同。
概述
之前我们讨论了用于估计简单因果效应(如平均因果效应)的逆概率加权法。然而,这种通用的逆概率加权方法,可以用来估计更复杂的因果模型中的参数。边际结构模型正是这样一种模型,它用于对潜在结果的平均值进行建模。
什么是边际结构模型?
边际结构模型是对潜在结果均值的建模。
“边际”一词源于模型不依赖于混杂因素的条件。我们最终感兴趣的是总体平均因果效应,即对整个群体的潜在结果的期望值,而不是在给定某些协变量X或特定亚群体条件下的效应。这就是“边际”的含义——总体平均,可以理解为对整个群体的平均。
“结构”一词则与我们对潜在结果(而非观测结果)进行建模这一事实有关。
线性边际结构模型
首先,我们来看一个线性边际结构模型。
需要注意的关键点是,我们的模型是针对潜在结果的期望值。具体来说,它是针对某个特定处理值 a 的潜在结果 Y^a 的期望值的模型,并且我们假设该期望值在 a 本身是线性的。
其公式为:
E[Y^a] = ψ₀ + ψ₁ * a
其中,ψ₀ 和 ψ₁ 是我们想要估计的未知参数。假设 a 目前只能取 0 或 1(例如,对照 vs. 治疗)。
在这种情况下:
E[Y⁰](即如果所有人都不接受治疗的潜在结果均值)就等于ψ₀(因为当a=0时,ψ₁*a项消失)。E[Y¹](即如果所有人都接受治疗的潜在结果均值)等于ψ₀ + ψ₁。
因此,两者的差值 (ψ₀ + ψ₁) - ψ₀ = ψ₁ 就是平均因果效应。所以,这里的 ψ₁ 具有因果解释,它代表了潜在结果之间的平均差异。
这是一个非常简单的线性边际结构模型,通常在结果为连续变量时使用。
逻辑边际结构模型
为了巩固这个概念,我们来看一个逻辑边际结构模型。这适用于结果为二分类变量的情况。
其公式为:
logit(E[Y^a]) = ψ₀ + ψ₁ * a
这里,logit 是连接函数。由于 Y^a 是二分类变量,其期望值 E[Y^a] 就等于 P(Y^a = 1),即概率。
这个模型表明,潜在结果 Y^a 等于1的对数几率是处理 a 的线性函数。如果我们对参数 ψ₁ 取指数 exp(ψ₁),得到的就是一个因果比值比。
因果比值比的定义是:
[P(Y¹=1) / (1 - P(Y¹=1))] / [P(Y⁰=1) / (1 - P(Y⁰=1))]
分子是假设全人群都接受治疗时,结果为1的几率;分母是假设全人群都接受对照时,结果为1的几率。
包含效应修饰因子的模型
以上是简单的边际结构模型,但你可以构建更复杂的模型。接下来,我们考虑一个包含效应修饰因子的模型,这通常被称为处理效应的异质性。也就是说,处理效应可能在不同亚群体中有所不同,而我们可能对此感兴趣。
假设 V 是一个能修饰处理 A 效应的变量(例如,糖尿病状况、性别等)。我们可以在边际结构模型中纳入它。
现在,我们建模的是给定 V 时潜在结果的期望值。注意,我们并非控制所有混杂因素,而只针对我们关心的效应修饰因子 V 进行条件化。对于大多数混杂因素,我们希望通过边际化来平均掉它们的影响,只保留我们关心的效应修饰因子。
模型可以写成:
E[Y^a | V] = ψ₀ + ψ₁*a + ψ₂*V + ψ₃*a*V
模型的右侧包含了处理 A 的主效应、变量 V 的主效应以及两者的交互项 A*V。
如何解释这些参数呢?一种方式是,对于给定的 V 值,比较不同处理下的潜在结果均值。
对于特定的 V 值,平均因果效应为:
E[Y¹ | V] - E[Y⁰ | V] = (ψ₀ + ψ₁ + ψ₂*V + ψ₃*V) - (ψ₀ + ψ₂*V) = ψ₁ + ψ₃*V
因此,如果这个边际结构模型是正确的,并且我们估计出了参数 ψ₁ 和 ψ₃,那么对于任何一个 V 值,我们都可以通过代入公式计算出相应的处理效应。
广义边际结构模型
我们可以将边际结构模型推广到更一般的形式。
其一般形式为:
g(E[Y^a | V]) = h(A, V; ψ)
这里:
g(.)是一个连接函数(例如,对于连续结果是恒等连接,对于二分类结果是logit连接)。E[Y^a | V]是在给定效应修饰因子V的条件下,潜在结果的期望值。h(A, V; ψ)是我们指定的一个关于处理A、变量V和参数ψ的函数。它通常类似于回归模型中指定的形式,可以是包含主效应、交互项甚至多项式项的加性线性组合。
关键在于,我们建模的对象是潜在结果。因此,如果我们能估计出这些参数 ψ,我们就能得到因果效应的估计值。
核心挑战与总结
本节课我们一起学习了边际结构模型。我们了解到,边际结构模型是对潜在结果均值的建模,“边际”强调总体平均效应,“结构”指其针对潜在结果。
我们介绍了简单的线性模型和逻辑模型,以及如何纳入效应修饰因子来研究处理效应的异质性。最后,我们看到了其广义形式。
然而,最关键的问题是:如何估计这些模型? 因为等式左侧涉及的是潜在结果,而非观测数据。在普通回归模型中,左右两侧都是观测数据,估计相对直接。但在边际结构模型中,由于潜在结果并非全部可观测,我们需要特殊的方法(如之前提到的逆概率加权)来进行估计。这将是后续课程可能深入探讨的内容。

总而言之,边际结构模型为我们提供了一种灵活框架,用于在考虑混杂因素的情况下,对复杂的总体平均因果效应进行建模和估计。
32:逆概率加权估计 🎯

在本节课中,我们将学习如何使用逆概率加权(IPTW)方法来估计边际结构模型(MSM)的参数。我们将从回顾标准回归模型的参数估计开始,逐步过渡到如何通过加权处理观测数据,以消除混杂偏倚,从而获得因果效应的无偏估计。
回顾标准回归模型的参数估计
上一节我们介绍了边际结构模型的基本概念,本节中我们来看看如何估计其参数。首先,我们需要回顾标准回归模型的参数估计方法。
线性回归模型
线性回归模型是一种常见的统计模型,其形式如下:
公式: Y = Xβ + ε
其中,Y 是观测到的结果变量,X 是协变量矩阵,β 是待估计的参数向量,ε 是误差项,通常假设其均值为零且方差恒定。
为了估计参数 β,我们通常使用最小二乘法。该方法通过最小化观测值与模型预测值之间的平方差来求解参数。

公式: min Σ(Y - Xβ)²
通过求解以下估计方程,我们可以得到参数估计值 β_hat:
公式: Xᵀ(Y - Xβ) = 0
广义线性模型
广义线性模型(GLM)扩展了线性回归模型,适用于非连续型结果变量(如二元或计数数据)。其形式如下:
公式: E[Y|X] = g⁻¹(Xβ)
其中,g 是链接函数,g⁻¹ 是其反函数。例如,在逻辑回归中,g 是 logit 函数。
广义线性模型的参数 β 可以通过求解以下估计方程来估计:
公式: Σ [ (∂μ/∂β) * V(μ)⁻¹ * (Y - μ) ] = 0
其中,μ = E[Y|X],V(μ) 是方差函数。
边际结构模型的参数估计
现在,我们将上述方法应用于边际结构模型。边际结构模型与广义线性模型形式相似,但关键区别在于它建模的是潜在结果的均值,而非观测结果的均值。
边际结构模型的形式
一个简单的边际结构模型示例如下:
公式: E[Y(a)] = g⁻¹(β₀ + β₁a)
这里,Y(a) 表示当治疗变量 A 被设定为特定值 a 时的潜在结果。注意,我们是在“设定”治疗值,而不是“条件于”观测到的治疗值。这是因果推断与标准回归分析的核心区别。
在存在混杂的情况下,直接拟合标准回归模型无法得到无偏的因果效应估计。然而,通过逆概率加权,我们可以创建一个无混杂的“伪总体”,从而应用标准回归技术。
逆概率加权的基本思想
逆概率加权的核心思想是为每个观测分配一个权重,该权重等于其观测到治疗值的概率的倒数。这样,加权后的数据在治疗组和对照组之间平衡了混杂因素,模拟了一个随机化试验的环境。
权重 W 的计算公式如下:
代码:
W = A / P(A=1|X) + (1-A) / P(A=0|X)
其中,A 是观测到的治疗变量(0或1),P(A=1|X) 是倾向得分(即给定协变量 X 下接受治疗的概率)。
加权估计方程
在创建了加权伪总体后,我们可以使用加权的广义线性模型估计方程来估计边际结构模型的参数:
公式: Σ W * [ (∂μ/∂β) * V(μ)⁻¹ * (Y - μ) ] = 0
这个方程与标准广义线性模型的估计方程类似,只是引入了权重 W。通过求解这个方程,我们可以得到因果参数 β 的无偏估计。
实施步骤
以下是使用逆概率加权估计边际结构模型参数的具体步骤:
-
估计倾向得分:首先,需要建模治疗变量
A给定协变量X的概率。通常使用逻辑回归模型。
代码示例(逻辑回归):model_ps <- glm(A ~ X, family=binomial, data=data) data$ps <- predict(model_ps, type="response") -
计算权重:根据倾向得分计算每个观测的权重。
代码:data$weight <- ifelse(data$A == 1, 1 / data$ps, 1 / (1 - data$ps)) -
指定边际结构模型:根据研究问题和结果变量的类型(连续、二元、计数等),指定合适的边际结构模型形式(如线性、logistic、Poisson等)。
-
拟合加权回归模型:使用统计软件拟合加权的广义线性模型,并指定上一步计算的权重。
代码示例(加权线性回归):model_msm <- glm(Y ~ A, family=gaussian, data=data, weights=weight) -
计算稳健标准误:由于加权过程可能人为地“放大”了样本量,直接使用模型输出的标准误可能不准确。因此,需要使用稳健方差估计方法(如三明治估计量)或自助法(bootstrap)来获得正确的标准误和置信区间。
代码示例(使用三明治估计量):library(sandwich) library(lmtest) coeftest(model_msm, vcov=vcovHC(model_msm, type="HC0"))
总结
本节课中我们一起学习了如何通过逆概率加权来估计边际结构模型的参数。我们首先回顾了标准回归模型的参数估计方法,然后指出了在存在混杂时直接应用这些方法的局限性。通过为观测数据分配基于倾向得分的权重,我们可以创建一个无混杂的伪总体,从而能够使用标准的广义线性模型技术来估计因果效应。关键步骤包括估计倾向得分、计算权重、指定模型、拟合加权回归以及使用稳健方法计算标准误。掌握这一方法为从观察性数据中进行因果推断提供了强大的工具。
33:平衡性评估 🎯

在本节课中,我们将学习如何评估使用逆概率处理加权(IPTW)方法后,处理组与对照组之间协变量分布的平衡性。我们将介绍评估平衡性的核心方法,包括计算标准化均值差和使用可视化图表。
概述
逆概率处理加权会创建一个“伪总体”或加权后的总体。我们的目标是评估加权后,处理组与对照组在协变量分布上是否达到了平衡。这类似于在随机对照试验中,我们期望看到的组间均衡状态。
上一节我们介绍了如何拟合倾向性评分模型并计算权重。本节中,我们来看看如何应用这些权重并评估平衡性是否达成。
评估平衡性的方法
评估平衡性主要有两种方式:创建汇总统计表(如表一)和绘制可视化图表。核心在于比较加权后各协变量在处理组与对照组间的差异。
以下是两种常用的具体评估手段:
- 计算加权均值与标准化差异:计算每个协变量在处理组和对照组中的加权均值,并使用标准化均值差来量化差异的大小。
- 绘制平衡性诊断图:通过图表直观展示加权前后各协变量标准化差异的变化。
标准化均值差
标准化均值差是衡量组间差异的一个常用指标。其核心思想是计算两组均值的差异,并用一个合并的标准差进行标准化。
在不加权的原始数据中,对于一个特定协变量 X,其标准化均值差的计算公式为:
SMD = (X̄_treated - X̄_control) / Sp
其中:
X̄_treated是处理组中该协变量的样本均值。X̄_control是对照组中该协变量的样本均值。Sp是合并标准差,例如可以计算为:Sp = sqrt((Var_treated + Var_control) / 2)。
通常,我们关注差异的绝对值,即 |SMD|。经验上,|SMD| < 0.1 通常被认为组间达到了较好的平衡。
加权后的标准化均值差
在应用逆概率处理加权后,我们需要计算的是加权数据的标准化均值差。其概念与上述相同,但计算中使用的均是加权统计量。
具体步骤如下:
- 按处理状态分层。
- 对于每一个协变量,分别计算其在处理组和对照组中的加权均值与加权方差。
- 使用相同的公式计算加权后的标准化均值差:
加权SMD = (加权X̄_treated - 加权X̄_control) / 加权Sp。
你可以手动计算这些加权统计量,也可以利用为调查分析设计的软件包(如R中的 survey 包)来便捷地完成。
实例分析:右心导管插入术数据
让我们通过一个实例来具体理解。该研究比较了接受右心导管插入术(RHC,处理组)与未接受(对照组)的患者。下表展示了一部分协变量在加权前后的比较。
| 协变量 | 对照组 (n≈3500) | 处理组 (n≈2100) | 原始SMD | 加权后SMD |
|---|---|---|---|---|
| 年龄 | 数据 | 数据 | 0.12 | 0.01 |
| 性别 | 数据 | 数据 | 0.05 | 0.00 |
| 血压 | 85 | 68 | 0.40 | 0.02 |
| 心力衰竭 | 数据 | 数据 | 0.15 | 0.03 |
| 结肠癌 | 数据 | 数据 | 0.08 | 0.01 |
| 败血症 | 数据 | 数据 | 0.40 | 0.04 |
| 昏迷 | 数据 | 数据 | 0.30 | 0.02 |
解读:
- 在原始数据(未加权)中,多个协变量(如血压、败血症)的标准化差异(SMD)较大(>0.1),表明存在明显的组间不平衡,即混杂。
- 在应用逆概率处理权重后,所有协变量的标准化差异均降至0.1以下,最大的也仅为0.04。这表明加权成功地创建了一个协变量分布均衡的伪总体。
平衡性诊断图
除了表格,我们还可以通过图形直观地展示平衡性的改善。下图绘制了各协变量在加权前后标准化差异的绝对值。
(此处为示意图:一张散点图,Y轴为标准化差异绝对值,X轴为各个协变量名称。每个协变量对应两个点:一个代表原始数据的SMD(红色),一个代表加权后的SMD(蓝色)。一条垂直的虚线位于SMD=0.1处。所有蓝色点都紧密分布在0附近,且低于0.1线;而许多红色点则显著高于0.1线。)
解读:
- 该图按原始数据的不平衡程度降序排列协变量。
- 红色点(原始数据):多个协变量的SMD远超0.1的阈值线,证实了原始数据存在混杂。
- 蓝色点(加权后数据):所有点都紧密聚集在0附近,且全部位于0.1阈值线以下。这清晰地表明,逆概率处理加权有效地消除了这些观测到的协变量不平衡。
如果加权后仍不平衡怎么办?
如果在评估后发现加权后的数据依然存在不平衡(即某些协变量的SMD仍较大),你可以采取以下措施:
以下是可能的调整步骤:
- 改进倾向性评分模型:此时尚未分析结局变量,因此返回修改模型不属于“数据窥探”。你可以检查是否遗漏了重要的预测变量,或者模型设定(如线性假设)是否不合适。
- 迭代建模:这是一个设计阶段的过程。你可以根据平衡性诊断结果,反复调整倾向性评分模型(如增减变量、加入交互项或多项式项),直到对加权后的平衡性感到满意为止。
总结

本节课中我们一起学习了如何评估逆概率处理加权后的平衡性。核心方法是计算加权数据的标准化均值差,并利用表格或图形进行展示。目标是使所有协变量的标准化差异绝对值小于0.1,这表明我们成功模拟了一个近似随机化的实验环境。如果未达到平衡,可以返回精修倾向性评分模型并重新评估。在发表相关研究时,同时呈现原始数据与加权后的平衡性表格是一种很好的做法。
34:权重分布 📊

在本节课中,我们将学习逆概率加权估计中权重的分布。我们将探讨为什么过大的权重会导致问题,特别是如何增加效应估计的标准误。我们还将学习如何检查权重的分布,以确保分析的稳定性。
上一节我们介绍了逆概率加权的基本原理,本节中我们来看看权重的具体分布及其影响。
为什么权重的大小很重要?
权重的实际数值大小至关重要,因为较大的权重会导致因果效应估计的噪声增加,从而产生更大的标准误。
考虑一个极端情况:假设数据中有一个人的权重为10,000。这意味着在分析中,这个人基本上代表了10,000个人。如果结果是二元的(例如“是”或“否”),那么这一个人的结果(“是”或“否”)在计算中会被当作10,000个人的结果来处理。因此,这一个人的数据会极大地影响整体估计值,从而引入显著的波动性,导致估计值高度可变。理想情况下,我们不希望任何个体的权重远大于其他人。
大权重如何导致大标准误?
理解大权重导致大标准误的一个有效方法是借助自助法的思想。
自助法是一种估计标准误的方法。其基本思想是:从原始样本中有放回地随机抽取N个观测值,形成一个自助样本。这个过程重复多次,每次都会得到一个新的参数估计值。这些估计值的方差或标准差,就可以作为原始估计量标准误的近似。
现在,假设我们的样本中有一个权重极大(例如10,000)的个体。在进行自助抽样时,这个个体可能出现在某些自助样本中,也可能不出现。当这个个体出现时,由于其巨大的权重,它会将参数估计值强烈地拉向自己的方向;当它不出现时,则不会产生这种影响。因此,从一次自助抽样到另一次,参数估计值会产生巨大的波动。这种波动性直接体现为估计量的高方差,即大的标准误。
权重与“正值性”假设的关系
权重的计算公式是:权重 = 1 / P(观测到的处理 | 协变量)。一个非常大的权重意味着分母 P(观测到的处理 | 协变量) 非常小,即该个体在给定其协变量条件下,接受其实际处理的概率接近于零。
这并不一定直接违反“正值性”假设(该假设要求概率严格大于零),但它意味着我们濒临违反该假设。对于某些协变量取值,个体接受特定处理的可能性极低。因此,出现极大权重也提示我们需要重新审视数据是否满足建模所需的“正值性”假设。
如何检查权重分布?
检查权重分布是评估逆概率加权模型稳定性的关键步骤。以下是几种实用的方法。
1. 绘制权重分布图
以下是两种常用的可视化方法,用于直观展示权重分布。
- 密度图:显示权重值的分布密度。图中底部的刻度线代表实际的权重值。通过密度图,可以快速看出权重主要集中在哪个范围,以及是否存在远离主分布区的极端大值。
- 排序散点图:将所有权重值从小到大排序后绘制。横轴是排序序号,纵轴是权重值。这种图能清晰地展示有多少个体拥有较大的权重,以及这些大权重的具体数值。例如,可以轻松看出有多少个体的权重超过了某个阈值(如5或15)。
2. 计算权重摘要统计量
除了绘图,直接计算权重的数字摘要也很有帮助。
以下是使用R语言获取权重摘要的示例代码:
# 获取权重的摘要统计信息,包括最小值、四分位数、中位数、最大值
summary(weights)
# 查看最小的6个权重值
head(sort(weights), 6)
# 查看最大的6个权重值
tail(sort(weights), 6)
summary 命令会输出权重的关键分位数。例如,如果第三四分位数(75th percentile)是2.28,意味着75%的个体权重低于此值。同时,关注最大值(如21)可以了解权重的上界。
head 和 tail 命令能列出最小和最大的几个权重值及其对应的观测编号。例如,输出可能显示第795号观测拥有最大的权重。这有助于定位这些特殊个体,以便进一步检查他们的协变量数据,理解为何他们会获得如此大的权重。

本节课中我们一起学习了权重分布在逆概率加权估计中的重要性。我们了解到,过大的权重会通过增加估计量的波动性而导致更大的标准误,并且这可能暗示着数据濒临违反“正值性”假设。为了诊断这一问题,我们可以通过绘制权重密度图或排序散点图来可视化分布,并通过计算摘要统计量(如分位数和极值)来量化检查。这些步骤对于确保因果推断结果的稳健性至关重要。
35:大权重的修正方法 🛠️

在本节课中,我们将学习当使用逆概率加权法进行分析时,如果发现数据集中存在非常大的权重,应该如何处理。我们将探讨识别问题、检查数据、调整模型以及具体的修正策略,如尾部修剪和权重截断。
检查异常权重个体 🔍
上一节我们介绍了逆概率加权的基本概念。本节中,我们来看看当发现非常大的权重时,首先应该做什么。
如果发现某些个体的权重非常大,第一步是仔细检查这些个体的观测数据。你需要识别出权重最高的个体,单独查看他们的数据。主要目的是理解他们为何会有如此大的权重。
例如,假设你拟合了一个逻辑回归模型来估计倾向得分。你可以查看模型的系数,并结合这些高权重个体的具体数据,分析是哪些变量或变量组合导致了极端权重的产生。这可能是因为某个变量取值极端,也可能是一系列变量的特定组合在数据中非常罕见。
以下是检查时需要关注的两个核心方面:
- 数据合理性:检查这些个体的所有数据是否在合理范围内。是否存在数据录入错误或异常值?
- 模型正确性:检查倾向得分模型是否指定正确。也许模型本身没有问题,只是这些个体确实具有极端的特征组合,从而导致了较大的权重。但首先需要排除模型误设的可能性。
理解模型外推问题 📈
为了更直观地理解问题,我们考虑一个简单的例子。假设我们只有一个连续混杂变量 X,并且假设倾向得分模型在Logit尺度上是线性的,即:
logit(P(Treatment=1)) = β₀ + β₁X
想象一下数据点和拟合曲线的关系。绝大多数数据点可能集中在 X 的一个较小范围内(例如 -0.4 到 0.4)。逻辑回归模型的参数 β 主要基于这个范围内的数据来估计。
然而,如果存在一个离群值,其 X 值远超出这个范围,模型对于该点的预测就严重依赖于“Logit线性”这个假设。由于该点附近几乎没有数据,我们无法验证这个假设在该区域是否成立。模型可能预测该个体接受治疗的概率接近1。如果该个体实际上并未接受治疗,他就会获得一个极大的权重。
问题的关键在于,在数据稀疏的区域,模型在进行大量外推。可能存在许多其他形状的曲线(例如,增长更平缓的曲线),它们在数据密集的区域与我们的线性Logit模型拟合得一样好,但在外推区域会给出不同的概率估计,从而产生小得多的权重。
因此,极端权重的出现可能有两个主要原因:
- 模型假设不当:在数据稀疏区域,模型形式(如线性Logit)可能不符合真实情况。
- 数据错误:极端值可能是由于数据录入错误或测量错误导致的。

尾部修剪策略 ✂️
在开始逆概率加权分析之前,一个有助于减少极端权重的方法是基于倾向得分的分布进行尾部修剪。这样做有两个好处:一是使“正值性”假设(即每个个体都有机会接受任一种处理)更加合理;二是可以直接消除一些最极端的权重。
尾部修剪意味着直接从数据集中移除某些个体。一个常见的策略是:
以下是具体的操作步骤:
- 对于治疗组个体,计算对照组个体倾向得分的第98百分位数。然后,移除所有倾向得分高于此百分位数的个体(无论其属于治疗组还是对照组)。
- 对于对照组个体,计算治疗组个体倾向得分的第2百分位数。然后,移除所有倾向得分低于此百分位数的个体。
这样操作后,剩下的数据集中在倾向得分分布的重叠区域,确保了治疗组和对照组个体在特征上有足够的可比性。
需要注意的是,尾部修剪改变了我们进行推断的目标人群。我们从推断“整体人群”转变为推断“有合理机会接受任一种治疗的亚人群”。虽然这通常是可接受的,甚至更合理,但必须明确意识到目标人群的定义已经发生了变化。
权重截断方法 ⚖️
无论是否进行了尾部修剪,都可以考虑使用权重截断。这种方法不删除个体,而是设定一个权重的上限。
具体做法是:预先设定一个可接受的最大权重值(例如100,或基于权重分布的某个百分位数,如第99百分位数)。然后,将所有超过此上限的权重值修改为这个上限值。例如,如果设定上限为100,那么一个权重为150的个体,其权重会被改为100。
这听起来可能有些奇怪,因为我们在手动修改数据。确实,权重截断会引入偏差,因为我们不再进行“正确”的加权。然而,它同时能显著降低估计值的方差。如果不截断,估计量可能是无偏的,但方差可能非常大(尤其受极端权重影响)。
因此,权重截断是一个典型的偏差-方差权衡问题。通过接受一点偏差,来换取方差的大幅降低。判断这个权衡是否值得,通常参考均方误差,其公式为:
MSE = Bias² + Variance
一些模拟研究表明,适当地截断权重可以改善均方误差。关键在于截断点的选择。通常,目标是消除那些远大于其他权重的极端值。常见的做法是将权重截断在第98或99百分位数。如果只有极少数个体拥有极端权重,适度的截断很可能在均方误差意义下带来更好的估计效果。
总结 📝
本节课中,我们一起学习了处理逆概率加权中极端权重的方法。我们首先探讨了如何通过检查高权重个体的数据来识别问题根源,可能是数据错误或模型误设。接着,我们介绍了两种主要的修正策略:尾部修剪(通过移除倾向得分分布尾部的个体来确保可比性并改变目标人群)和权重截断(通过设定权重上限来在偏差和方差之间进行权衡)。在实际分析中,需要根据具体情况谨慎选择和应用这些方法。
36:双重稳健估计量 📊

在本节课中,我们将学习一种名为“双重稳健估计量”的因果推断方法,它也被称为“增广逆概率加权估计”。我们将重点理解这类估计量背后的直观逻辑,并简要讨论其特性。
概述
双重稳健估计量结合了两种不同的建模思路,使得估计结果在两种模型之一正确的情况下依然保持无偏。这为我们在实际分析中提供了更强的稳健性。
回顾:逆概率加权估计
在深入双重稳健估计之前,我们先回顾一下标准的逆概率加权估计方法。
上一节我们介绍了因果推断的基本框架,本节中我们来看看如何估计一个特定的潜在结果均值。假设我们只关注估计“如果所有人都接受治疗”时的潜在结果均值 E[Y(1)]。
标准的逆概率加权估计量公式如下:
Ê[Y(1)] = (1/N) * Σ [ (A_i * Y_i) / π(X_i) ]
其中:
A_i是治疗指示变量(A=1表示治疗,A=0表示对照)。Y_i是观测到的结果。π(X_i)是倾向性评分,即给定协变量X后接受治疗的概率P(A=1|X)。N是总样本量。
这个估计量通过权重 1/π(X) 对接受治疗的个体进行加权,从而在加权后的“伪总体”中模拟出一个无混杂的随机化试验场景。如果倾向性评分模型 π(X) 被正确设定,那么这个估计量就是 E[Y(1)] 的无偏估计。
另一种方法:结果回归模型
除了加权,我们还可以尝试用建模的方法来估计潜在结果均值。
以下是另一种估计 E[Y(1)] 的思路。我们首先在实际接受治疗的个体中,建立一个结果变量 Y 对协变量 X 的回归模型。我们把这个条件期望模型记为 m1(X) = E[Y | A=1, X]。
然后,我们可以用这个模型来估计 E[Y(1)],公式如下:
Ê[Y(1)] = (1/N) * Σ [ A_i * Y_i + (1 - A_i) * m1(X_i) ]
这个公式的直观解释是:
- 对于实际接受治疗的个体(
A=1),我们直接使用其观测结果Y(根据一致性假设,Y = Y(1))。 - 对于实际未接受治疗的个体(
A=0),我们使用从治疗组学到的模型m1(X)来预测其“如果接受治疗”时的结果Y(1)。 - 最后对所有个体的值(无论是观测值还是预测值)取平均。
如果结果回归模型 m1(X) 被正确设定,那么这个估计量也是 E[Y(1)] 的无偏估计。
双重稳健估计量:结合两种思路
现在,我们将看到如何将上述两种方法结合起来,得到一个更稳健的估计量。
双重稳健估计量巧妙地将逆概率加权和结果回归模型融合在一起。它的核心特性是:只要倾向性评分模型 π(X) 和结果回归模型 m1(X) 中有一个被正确设定,该估计量就是无偏的。我们不需要同时把两个模型都设定正确。
一个常见的双重稳健估计量(增广逆概率加权估计量,AIPTW)形式如下:
Ê_DR[Y(1)] = (1/N) * Σ [
(A_i * Y_i) / π(X_i)
- [ (A_i - π(X_i)) / π(X_i) ] * m1(X_i)
]
接下来,我们分两种情况来理解这个估计量为何具有双重稳健性。
情况一:倾向性评分正确,结果模型错误
假设我们正确设定了倾向性评分模型 π(X),但结果模型 m1(X) 是错误的。
在这种情况下,估计量中涉及 m1(X) 的部分(即方括号内的第二项)在期望意义上会趋近于零。这是因为 E[A | X] = π(X),所以 (A - π(X)) 的期望为零。当这一项消失后,整个估计量就退化成了标准的逆概率加权估计量,而我们已经知道在倾向性评分正确时,它是无偏的。
情况二:倾向性评分错误,结果模型正确
假设我们错误设定了倾向性评分模型 π(X),但正确设定了结果模型 m1(X)。
通过一些代数变换,我们可以将上述估计量重新排列。当结果模型正确时,E[Y | A=1, X] = m1(X)。经过推导,估计量中涉及错误倾向性评分的部分会被抵消,最终整个估计量在期望上等于 (1/N) Σ m1(X_i),这正是我们之前介绍的、在结果模型正确时无偏的结果回归估计量。
因此,无论哪种情况,只要有一个模型正确,估计量都能给出无偏的结果。
双重稳健估计量的优势

除了双重稳健性这一核心优势外,这类估计量通常比标准的逆概率加权估计量更高效,即估计量的方差更小。这意味着在相同样本量下,我们能得到更精确的估计。其理论源于半参数统计领域,可以推导出最有效的估计形式。
总结

本节课我们一起学习了双重稳健估计量。
- 我们首先回顾了逆概率加权估计和结果回归模型这两种估计潜在结果均值的方法。
- 接着,我们介绍了一种结合两者的双重稳健估计量(AIPTW),并详细解释了其工作原理:只要倾向性评分模型或结果回归模型中有一个正确,估计结果就是无偏的。
- 最后,我们了解到这类估计量通常还具有方差更小的优势。尽管实现上比单一方法更复杂,但它在实践中往往能提供更可靠、更精确的因果效应估计。
37:R语言数据实例 - 使用IPTW拟合边际结构模型 📊

在本节课中,我们将学习如何在R语言环境中进行数据分析,具体而言,我们将通过一个实例,演示如何使用逆概率处理加权方法来拟合边际结构模型。
我们将使用一个关于右心导管插入术的公开数据集。该数据来自五家医院的ICU患者。治疗变量是是否接受右心导管插入术,结局变量是患者是否死亡。数据中包含许多混杂变量,每组有数千名患者。
本次分析将使用几个R包:tableone用于创建基线特征表,IPW用于计算逆概率权重,sandwich用于稳健方差估计,以及survey包,它虽然设计用于调查数据,但也可用于获取加权估计量。
数据准备与预处理
首先,我们需要读取并查看数据,以理解各个变量的含义。在之前的视频中,我们详细讨论过这部分代码,这里仅作简要回顾。
这个特定数据集包含许多字符型变量,而某些R包对此类数据的处理不太友好。因此,一个常见的做法是将所有变量转换为数值型,以便于后续分析,同时也可以将变量重命名为更易理解的名称。
例如,原始数据中有一个名为sex的变量,我们将其更改为female,使其成为一个指示变量(取值为1代表女性)。类似地,我们将其他诊断变量(如COPD)也转换为指示变量(1代表有该诊断,0代表无)。
我们将治疗变量命名为treatment(1=接受RHC治疗,0=未接受),结局变量命名为died。此外,我们还会选取一系列混杂变量。为了演示清晰,我们仅使用部分变量创建一个名为my_data的新数据集。在实际分析中,你可能会使用更多的变量。
# 示例:创建子数据集
my_data <- data.frame(
treatment = ...,
died = ...,
age = ...,
female = ...,
copd = ...,
# ... 其他混杂变量
)
拟合倾向评分模型
进行逆概率处理加权的第一步,通常是拟合一个倾向评分模型。
这里,我们使用逻辑回归模型来拟合。需要注意的是,在倾向评分模型中,结局变量实际上是治疗分配情况(即treatment)。我们将一些混杂变量,如年龄、性别、血压和一些诊断指标,作为自变量纳入模型。
# 拟合逻辑回归模型(倾向评分模型)
ps_model <- glm(treatment ~ age + female + bp + copd + ...,
data = my_data,
family = binomial(link = "logit"))
# 获取倾向评分
ps <- predict(ps_model, type = "response")
运行上述代码后,ps对象中存储了每个个体的倾向评分(即接受治疗的概率估计值)。
我们可以查看模型的输出,了解哪些变量与接受治疗(即右心导管插入术)相关。例如,age的系数为负值,表明年龄较大的患者接受该治疗的可能性较低(尽管P值为0.08,证据强度一般)。你可以浏览整个系数表,检查结果是否符合常识或领域专家的预期。
我们还可以绘制倾向评分的分布图,以检查重叠情况。通常,我们希望治疗组和对照组在倾向评分分布上有足够的重叠。
# 绘制倾向评分分布(原始数据)
plot(density(ps[my_data$treatment == 1]), col="blue", main="Propensity Score Distribution")
lines(density(ps[my_data$treatment == 0]), col="red")
legend("topright", legend=c("Treated", "Control"), col=c("blue", "red"), lty=1)
计算逆概率处理权重
上一节我们介绍了如何获取倾向评分,本节我们将进入IPTW的核心步骤:计算权重。
根据IPTW的定义,对于治疗组个体,其权重为 1 / 倾向评分;对于对照组个体,其权重为 1 / (1 - 倾向评分)。
# 计算IPTW权重
weight <- ifelse(my_data$treatment == 1, 1/ps, 1/(1-ps))
计算权重后,有多种方法可以将其应用到数据分析中。首先,我们可以使用survey包中的svydesign函数来创建一个加权数据集。
# 应用权重,创建加权数据设计对象
weighted_data <- svydesign(ids = ~1, data = my_data, weights = weight)
现在,我们拥有了一个加权的数据集对象weighted_data,可以用它来生成加权的基线特征表。
评估加权后的平衡性
创建加权数据后,一个重要的步骤是评估加权是否有效地平衡了治疗组和对照组之间的混杂变量分布。我们可以使用tableone包来创建加权的“表一”。
# 创建加权的基线特征表,并计算标准化均数差
weighted_table <- svyCreateTableOne(vars = c("age", "female", "copd", ...),
strata = "treatment",
data = weighted_data,
test = FALSE)
print(weighted_table, smd = TRUE)
以下是输出结果的解读:
- 均值:这些是加权后的均值,代表了伪人群中的特征。这是我们关注的重点。
- 标准化均数差:我们希望所有变量的SMD绝对值都小于0.1,这表明组间达到了良好的平衡。在本例中,所有SMD都非常小(最大约为0.04),说明IPTW权重效果很好。
注意:对于加权数据,输出中显示的“样本量”和“标准差”是基于伪人群的,并非真实的样本量,因此可以忽略,主要关注加权均值和SMD。
你也可以通过更直接的方式手动计算加权均值,以验证结果。例如,计算治疗组的加权年龄均值:
# 手动计算治疗组的加权年龄均值 (公式: Σ(weight * age) / Σ(weight))
weighted_mean_age_treated <- sum(weight[my_data$treatment==1] * my_data$age[my_data$treatment==1]) / sum(weight[my_data$treatment==1])
print(weighted_mean_age_treated)
这个结果应该与通过survey包得到的加权表结果一致。
拟合边际结构模型
在确认加权数据平衡性良好后,我们就可以拟合边际结构模型了。假设我们感兴趣的是一个简单的MSM,其中结局仅与治疗变量线性相关。
我们考虑两种情况:
- 使用对数连接函数:如果我们感兴趣的是相对危险度。
- 使用恒等连接函数:如果我们感兴趣的是风险差。
方法一:使用glm函数配合稳健方差
首先,我们可以使用标准的glm函数进行加权拟合,但需要使用sandwich包来校正权重导致的方差膨胀,获取稳健标准误。
1. 拟合相对危险度模型(对数连接):
# 拟合加权GLM模型(对数连接,用于RR)
msm_log <- glm(died ~ treatment, data = my_data, weights = weight,
family = binomial(link = "log"))
# 获取系数
beta_iptw <- coef(msm_log)
# 使用sandwich包获取稳健协方差矩阵,并计算稳健标准误
library(sandwich)
vcov_robust <- vcovHC(msm_log, type = "HC0")
se_robust <- sqrt(diag(vcov_robust))
# 计算因果相对危险度(RR)及其95%置信区间
causal_rr <- exp(beta_iptw["treatment"])
ci_lower_rr <- exp(beta_iptw["treatment"] - 1.96 * se_robust["treatment"])
ci_upper_rr <- exp(beta_iptw["treatment"] + 1.96 * se_robust["treatment"])
c(causal_rr, ci_lower_rr, ci_upper_rr)
输出结果显示,因果相对危险度的点估计值约为1.08,95%置信区间为(1.04, 1.13)。RR大于1表明接受右心导管插入术的治疗组死亡风险更高。
2. 拟合风险差模型(恒等连接):
# 拟合加权GLM模型(恒等连接,用于RD)
msm_identity <- glm(died ~ treatment, data = my_data, weights = weight,
family = binomial(link = "identity"))
beta_iptw_rd <- coef(msm_identity)
se_robust_rd <- sqrt(diag(vcovHC(msm_identity, type = "HC0")))
# 计算因果风险差(RD)及其95%置信区间
causal_rd <- beta_iptw_rd["treatment"]
ci_lower_rd <- causal_rd - 1.96 * se_robust_rd["treatment"]
ci_upper_rd <- causal_rd + 1.96 * se_robust_rd["treatment"]
c(causal_rd, ci_lower_rd, ci_upper_rd)
输出结果显示,因果风险差的点估计值约为0.05,95%置信区间为(0.02, 0.07)。RD大于0同样表明治疗组的死亡风险更高。
方法二:使用IPW和survey包
另一种更便捷的方法是使用IPW包自动计算权重,并结合svyglm函数(来自survey包)进行模型拟合,它能自动处理稳健方差估计。
library(IPW)
library(survey)
# 使用IPW包直接估计权重(指定倾向评分模型)
weight_obj <- ipwpoint(exposure = treatment,
family = "binomial",
link = "logit",
denominator = ~ age + female + bp + copd + ...,
data = my_data)
# 获取权重并查看分布
weights_ipw <- weight_obj$ipw.weights
summary(weights_ipw)
ipwplot(weights_ipw, xlim=c(0, 22))
# 使用svyglm拟合边际结构模型(自动使用稳健方差)
design_ipw <- svydesign(ids = ~1, data = my_data, weights = weights_ipw)
msm_svy <- svyglm(died ~ treatment, design = design_ipw,
family = binomial(link = "identity"))
# 查看系数和置信区间
coef(msm_svy)
confint(msm_svy)
使用这种方法得到的结果(如风险差估计值0.052)应与方法一的结果一致。svyglm的优点是简化了步骤,自动提供了正确的方差估计。
权重的截断处理
有时,个别个体可能拥有极大的权重(例如,倾向评分接近0或1),这可能会过度影响估计结果,导致方差估计不稳定。虽然本例中最大权重约为21.6,问题不严重,但我们仍需了解如何进行权重截断。
方法一:手动截断
# 设定截断值(例如,10)
trunc_weight <- weight
trunc_weight[trunc_weight > 10] <- 10
# 使用截断后的权重重新拟合模型
msm_trunc_manual <- glm(died ~ treatment, data = my_data, weights = trunc_weight,
family = binomial(link = "identity"))
# ... 后续计算稳健标准误和置信区间的步骤同上
方法二:使用IPW包内置功能截断
IPW包可以按百分位数进行截断。例如,截断第1和第99百分位数以外的权重。
# 使用IPW包,并在计算权重时进行截断
weight_obj_trunc <- ipwpoint(exposure = treatment,
family = "binomial",
link = "logit",
denominator = ~ age + female + bp + copd + ...,
data = my_data,
trunc = 0.01) # 截断第1和第99百分位数
weights_trunc <- weight_obj_trunc$ipw.weights
summary(weights_trunc) # 查看截断后的权重范围
# 使用截断权重拟合模型
design_trunc <- svydesign(ids = ~1, data = my_data, weights = weights_trunc)
msm_svy_trunc <- svyglm(died ~ treatment, design = design_trunc,
family = binomial(link = "identity"))
confint(msm_svy_trunc)
在本例中,截断前后得到的风险差估计值及其置信区间变化很小(例如,置信区间上限从0.0797变为0.0816),这是因为原始数据中没有极端大的权重。这可以作为一种敏感性分析,如果截断前后结论一致,则结果更加稳健。
总结

本节课中,我们一起学习了在R语言中实施逆概率处理加权分析的全过程:
- 数据准备:读取数据,将变量转换为合适的格式(如数值型、指示变量)。
- 倾向评分建模:使用逻辑回归模型估计每个个体接受治疗的概率。
- 权重计算:根据倾向评分计算IPTW权重(治疗组:
1/PS,对照组:1/(1-PS))。 - 平衡性评估:创建加权的基线特征表,检查标准化均数差,确认加权后混杂变量分布平衡。
- 模型拟合:使用加权数据拟合边际结构模型,以估计治疗的因果效应。
- 我们演示了两种方法:使用
glm加稳健方差,以及使用IPW和svyglm组合。 - 我们展示了如何估计相对危险度(对数连接)和风险差(恒等连接)。
- 我们演示了两种方法:使用
- 权重处理:介绍了如何对极端权重进行截断,以作为稳定性检查或敏感性分析。

通过这个完整的实例,你应该能够掌握使用R语言和IPTW方法估计因果效应的基本流程。记住,在实际分析中,仔细检查倾向评分模型、权重分布和加权后的平衡性至关重要。
38:工具变量简介 🧩

在本节课中,我们将学习工具变量的基本概念。我们将首先讨论未测量的混杂因素及其对标准因果推断方法带来的问题,然后介绍工具变量及其性质,并解释为何它在存在未测量混杂的情况下可能有用。

未测量混杂的问题
上一节我们回顾了经典的混杂设置。在标准情况下,我们有处理变量 A 和结果变量 Y,以及一组可观测的混杂因素 X。只要 X 被观测到,我们就可以使用匹配、倾向得分匹配或逆概率加权等方法估计 A 对 Y 的因果效应。
然而,在许多实际研究中,我们可能面临未测量的混杂因素 U。这些变量同时影响处理分配和结果,但由于未被观测,我们无法通过常规方法对其进行控制。这会导致可忽略性假设被违反,即使我们控制了观测到的 X,处理组和对照组之间仍可能存在系统性差异,从而产生有偏的因果效应估计。
工具变量的引入
面对未测量混杂的挑战,我们需要不同的统计方法。只要能够识别出一个有效的工具变量,问题并非完全无解。
工具变量 Z 的核心思想是:它影响处理变量 A,但不直接影响结果变量 Y。你可以将 Z 视为一种“随机化的鼓励”——例如,较高的 Z 值可能鼓励个体接受处理,而较低的 Z 值则相反。关键在于,这种鼓励本身不会直接影响结果。
公式表示:工具变量 Z 需满足以下条件:
- 相关性:
Z与处理变量A相关。 - 排他性限制:
Z只能通过A影响结果Y,没有直接路径Z → Y。 - 独立性:
Z与未观测的混杂因素U独立(或在观测变量X的条件下独立)。
一个具体例子:孕期吸烟与婴儿体重
假设我们想研究孕期吸烟(处理 A)对婴儿出生体重(结果 Y)的影响。这里存在许多潜在的混杂因素(如母亲年龄、产次等),甚至可能存在未测量的混杂因素。显然,我们无法进行随机化试验要求孕妇吸烟或不吸烟。
此时,可以采用一种“鼓励设计”的随机试验:招募吸烟的孕妇,并将她们随机分为两组。
- 干预组 (Z=1):接受旨在鼓励戒烟的积极干预。
- 对照组 (Z=0):接受常规产前护理。
在这里,随机分配的鼓励 Z 就是一个工具变量。鼓励本身不应直接影响婴儿体重,其所有影响都应通过改变吸烟行为(A)来实现。
从“意向性治疗”效应到处理效应
在这种设计中,我们可以直接估计“意向性治疗”效应,即比较两组(鼓励 vs. 常规护理)的平均出生体重差异。这衡量的是鼓励本身对结果的影响。
然而,我们真正感兴趣的是吸烟本身(A)对出生体重(Y)的因果效应。工具变量方法的目标,正是利用工具 Z(这里的随机化鼓励)来估计这个我们无法直接观测的处理效应。
工具变量的来源
在鼓励设计的例子中,工具变量 Z 是由研究者通过随机化主动创造的。但在许多观察性研究中,工具变量可能以“自然实验”的形式存在。
以下是工具变量的一些常见来源:
- 孟德尔随机化:在遗传学研究中,使用基因型作为工具变量。
- 出生季度:已被用作影响教育年限的工具变量。
- 地理距离:到医疗机构的距离常被用作医疗干预的工具变量。
在后续课程中,我们将详细探讨这些例子。
总结
本节课我们一起学习了工具变量的基本概念。我们了解到,当存在未测量的混杂因素时,标准因果推断方法会失效。工具变量 Z 通过提供一个只通过处理变量 A 影响结果 Y 的“随机化”来源,为我们提供了估计因果效应的新途径。工具变量可以是研究者随机化分配的(如鼓励设计),也可以是自然界中存在的(如自然实验)。在接下来的课程中,我们将深入探讨如何利用工具变量进行因果效应估计。
39:存在不依从的随机试验 📊

在本节课中,我们将学习如何处理随机试验中的“不依从”问题。我们将区分“分配的治疗”与“实际接受的治疗”,并探讨如何利用随机分配作为工具变量,来估计实际治疗对结果的因果效应。
随机试验中的不依从问题
上一节我们介绍了随机试验的基本概念。本节中,我们来看看当参与者不完全遵循随机分配的治疗方案时会发生什么。
在随机试验中,我们分配的治疗(记为 Z)与实际接受的治疗(记为 A)可能并不一致。例如,Z 可以表示是否被随机分配到治疗组(Z=1)或对照组(Z=0)。而 A 则表示参与者是否实际接受了治疗(A=1)或未接受(A=0)。我们最终关心的结果是 Y。
在实践中,Z 和 A 并不总是相等。例如,一名参与者可能被分配到服药组(Z=1),但并未实际服药(A=0)。这种现象被称为“不依从”。当存在不依从时,实际接受的治疗 A 可能受到其他变量(如年龄、健康状况等)的影响,这些变量也可能影响结果 Y。这就引入了混杂偏倚的风险,使得对实际治疗 A 的效应估计变得复杂。
潜在治疗与分配效应
为了分析这个问题,我们引入了“潜在治疗”的概念。这与我们之前定义的“潜在结果”思路一致。
我们可以想象,在试验开始前,每个参与者都有两个潜在的治疗状态:
- A¹:如果该参与者被分配到治疗组(Z=1),他/她将实际接受的治疗。
- A⁰:如果该参与者被分配到对照组(Z=0),他/她将实际接受的治疗。
我们永远无法同时观测到同一个体的 A¹ 和 A⁰,但我们可以假设它们存在。
基于此,我们可以定义治疗分配对治疗接受的因果效应。其公式为:
E[A¹] - E[A⁰]
这个差值表示:如果整个人群都被分配到治疗组,接受治疗的比例,减去如果整个人群都被分配到对照组,接受治疗的比例。在完全依从的理想情况下,这个值应为 1。
由于 Z 是随机分配的,并且我们假设一致性(即观测到的 A 等于对应分配下的潜在治疗),我们可以从观测数据中估计这个效应。例如,E[A¹] 可以用 E[A | Z=1] 来估计,即所有被分配到治疗组的个体中,实际接受治疗的平均值。
同样,我们可以定义治疗分配对结果的因果效应,这被称为“意向性治疗效应”:
E[Y¹] - E[Y⁰]
其中 Y¹ 和 Y⁰ 是潜在结果。它对比的是所有人都被分配到治疗组与所有人都被分配到对照组时的平均结果差异。由于 Z 是随机的,这个效应也可以直接从观测数据中识别和估计。
工具变量方法简介
上一节我们讨论了如何估计分配效应。本节中,我们来看看如何估计我们真正感兴趣的目标:实际接受的治疗(A)对结果(Y)的因果效应。
在这里,随机分配 Z 可以被视为一个工具变量。我们认为:
- Z 会影响 A(相关性)。
- Z 除了通过影响 A 之外,不会直接影响 Y(排他性约束)。随机化过程本身通常被认为不会直接影响健康结果。
因此,Z 作为对接受治疗的“强烈鼓励”。工具变量方法的核心目标,就是利用这个随机化的工具 Z,来估计实际治疗 A 对结果 Y 的因果效应。这将是我们下一节课要深入探讨的主题。
总结
本节课中,我们一起学习了:
- 区分了随机试验中的治疗分配(Z)和实际治疗接受(A)。
- 理解了“不依从”如何引入混杂,使估计实际治疗效应变得复杂。
- 引入了“潜在治疗”的概念,并定义了治疗分配对治疗接受的因果效应。
- 定义了“意向性治疗效应”,即治疗分配对结果的因果效应,并指出其在随机化下可直接估计。
- 介绍了将随机分配 Z 作为工具变量的基本思想,用于估计实际治疗 A 的效应,为后续学习工具变量方法打下基础。
40:依从类别 🧩

在本节课中,我们将学习如何根据个体的潜在治疗接受情况,将其分类到不同的“依从类别”中。我们将理解“依从者”的含义,并区分总体因果效应与局部因果效应。
潜在治疗值与依从类别
上一节我们介绍了因果推断的基本概念,本节中我们来看看如何根据潜在治疗值对个体进行分类。
我们使用潜在治疗值 A0 和 A1 来描述个体。其中:
A0表示如果个体被随机分配到对照组(即工具变量Z=0)时,其将接受的治疗。A1表示如果个体被随机分配到处理组(即工具变量Z=1)时,其将接受的治疗。
我们可以根据个体这对潜在值 (A0, A1) 的组合,将他们分为四类:
以下是四种主要的依从类别:
- 从不接受者:
(A0=0, A1=0)。无论被分配到哪一组,他们都不会接受治疗。 - 依从者:
(A0=0, A1=1)。他们完全遵从分配:分配到对照组就不接受治疗,分配到处理组就接受治疗。 - 违抗者:
(A0=1, A1=0)。他们总是做与分配相反的事:分配到对照组反而接受治疗,分配到处理组反而不接受治疗。 - 总是接受者:
(A0=1, A1=1)。无论被分配到哪一组,他们都会接受治疗。
这种分类框架是鲁宾因果模型的一部分,也被称为“主分层”方法。
各类别群体的特点
理解了分类后,我们来逐一分析这些子群体的特点。
从不接受者:对于这个群体,鼓励(工具变量 Z)无效。由于他们从不接受治疗,我们无法观察到他们接受治疗时的结果,因此在没有额外强假设的情况下,我们无法从数据中了解治疗对这个群体的因果效应。
依从者:这是工具变量方法最关注的群体。他们完全遵从随机分配,因此在这个群体内,实际接受的治疗 A 完全由随机分配 Z 决定。这为我们在这个子群体内估计治疗的因果效应提供了希望。
违抗者:这个群体的行为与鼓励相反。理论上,我们也可以在这个群体内估计因果效应。但在许多随机试验场景中(例如对照组无法获得治疗),我们通常假设这个群体不存在或规模极小。
总是接受者:与从不接受者类似,这个群体接受的治疗没有变化(总是接受),因此我们同样无法从数据中直接了解治疗对他们的因果效应。
局部平均处理效应
前面我们分析了不同群体,现在重点来看工具变量方法的核心目标——局部平均处理效应。
工具变量方法通常用于存在未测量混杂的情况。当存在未测量混杂时,我们很难估计整个总体的平均因果效应,因为无法对所有混杂因素进行调整。
因此,工具变量方法的目标不是估计总体效应,而是估计一个局部平均处理效应。其定义如下:
LATE = E[Y(1) - Y(0) | A0=0, A1=1]

这是一个有效的因果效应,因为它比较的是同一子群体(依从者)在不同治疗状态下的潜在结果均值。注意到我们条件于 A0=0 且 A1=1,这正是依从者的定义。
对于依从者,工具变量 Z 的赋值与实际治疗 A 完全一致(Z=0 时 A=0,Z=1 时 A=1)。因此,在依从者子群体内,我们可以将上述效应等价地写为:
LATE = E[Y(A=1) - Y(A=0) | A0=0, A1=1]
这被称为依从者平均因果效应。它是治疗 A 对依从者这个子群体的因果效应。
从观测数据识别依从类别
我们已经定义了目标参数,但如何从实际观测数据中识别出依从者呢?这是估计的关键挑战。
我们观测到的数据是工具变量 Z(分配的治疗)和实际接受的治疗 A。它们的组合有四种情况。
以下是根据观测数据 (Z, A) 推断潜在依从类别的情况:
- 若观测到
(Z=0, A=0):该个体可能是从不接受者或依从者。 - 若观测到
(Z=0, A=1):该个体可能是总是接受者或违抗者。 - 若观测到
(Z=1, A=0):该个体可能是从不接受者或违抗者。 - 若观测到
(Z=1, A=1):该个体可能是总是接受者或依从者。
可以看到,根据观测数据,我们只能将每个人的依从类别范围缩小到两种可能性,而无法唯一确定。这些依从类别是潜在的,无法直接观测。
总结

本节课中我们一起学习了依从类别的概念。我们了解到,可以根据个体的潜在治疗接受行为 (A0, A1) 将其分为从不接受者、依从者、违抗者和总是接受者四类。工具变量方法的核心目标是估计依从者平均因果效应,即治疗对依从者这个子群体的局部因果效应。然而,从观测数据中我们无法直接确定个体属于哪个依从类别,这为后续的估计带来了挑战,我们将在接下来的课程中探讨如何解决这个问题。
41:工具变量假设详解 🎯

在本节课中,我们将学习工具变量分析中的核心假设。我们将首先探讨定义一个有效工具变量所需的条件,然后介绍单调性假设,并解释其重要性。
概述
工具变量分析是因果推断中的一种重要方法,用于处理存在未测量混杂因素的情况。为了确保分析的有效性,我们必须满足一系列关键假设。本节将详细讲解这些假设,特别是关联性、排他性约束和单调性。
工具变量的定义与核心假设
一个有效的工具变量必须满足两个核心条件。
以下是具体说明:
-
与处理变量(Treatment)相关联:工具变量 Z 必须能够影响处理变量 A。在因果图中,这体现为一条从 Z 指向 A 的箭头。在随机对照试验中,随机分配通常就是一个强有力的工具变量,因为它直接影响患者接受的治疗。
-
排他性约束:工具变量 Z 只能通过影响处理变量 A 来间接影响结果变量 Y,而不能对 Y 产生任何直接或通过其他未测量混杂因素 U 的间接影响。这意味着因果图中不能存在从 Z 直接指向 Y 的箭头,也不能存在从 Z 指向 U 的箭头。
排他性约束是工具变量分析中最关键也最具争议的假设。它无法仅凭数据直接验证,必须依靠研究设计和领域知识进行论证。例如,在一个非盲法的随机试验中,患者知晓自己的治疗分配可能会通过影响其行为(安慰剂效应或霍桑效应)而直接作用于结果,从而可能违反排他性约束。
单调性假设及其作用
上一节我们介绍了工具变量的基本假设,但在仅满足这些条件时,我们仍无法精确识别我们感兴趣的因果效应——即“依从者”群体的处理效应。本节中我们来看看单调性假设如何帮助我们解决这个难题。

单调性假设的核心内容是:不存在“违抗者”。所谓“违抗者”,是指那些总是做出与工具变量指示相反行为的人(例如,被鼓励服药时不服药,不被鼓励时反而服药)。该假设认为,工具变量的“鼓励”作用方向是一致的,增加鼓励强度不应降低接受治疗的概率。
在许多实际场景中,例如药物随机试验,患者通常无法轻易获得非分配组的药物,因此假设没有“违抗者”是合理的。
引入单调性假设后,我们对个体所属类别的识别能力大大增强。
以下是具体变化:
- 如果观察到某人 Z = 0(未分配治疗)但 A = 1(接受了治疗),那么在单调性假设下,他只能是“总是接受者”,而不可能是“违抗者”。
- 同理,如果观察到某人 Z = 1(分配治疗)但 A = 0(未接受治疗),那么他只能是“从不接受者”。
通过排除“违抗者”这一类别,我们获得了足够的信息来识别并最终估计“依从者”群体的局部平均处理效应。
总结
本节课中我们一起学习了工具变量分析的三项核心假设:
- 关联性:工具变量必须与处理变量相关。
- 排他性约束:工具变量只能通过处理变量影响结果。
- 单调性:不存在“违抗者”。
其中,排他性约束依赖于逻辑论证,而单调性假设则通过简化问题结构,使得识别“依从者”的因果效应成为可能。理解并审慎评估这些假设,是正确应用工具变量方法进行可靠因果推断的基础。
42:因果效应识别与估计 🎯

在本节课中,我们将讨论如何从工具变量分析中识别和估计因果效应。我们将理解如何从观测数据中估计“依从者平均因果效应”,并探讨该效应与“意向治疗效应”之间的关系。
核心假设回顾 🔍
在开始之前,我们先回顾一下所依赖的核心假设。
首先,我们假设 Z 是一个有效的工具变量。这意味着:
- Z 会影响治疗分配。
- 我们同时做出排他性限制假设,即 Z 不会直接影响结果。
其次,我们做出单调性假设。在这个假设下,不存在“违抗者”。我们想象一个存在不依从情况的随机试验,并假设没有人会做出与他们被鼓励的行为相反的事情。
我们的目标是估计依从者群体中接受治疗的平均因果效应,即那些会按照分配接受治疗的人群子集。
为了识别这个感兴趣的因果效应,我们首先从一个已知可以识别的量开始:意向治疗效应。
意向治疗效应的分解 📊
上一节我们回顾了核心假设,本节我们来看看如何分解意向治疗效应。
意向治疗效应是基于治疗分配来对比潜在结果。它等于被分配到治疗组的人群结果期望值,减去被分配到对照组的人群结果期望值。由于随机化,这个对比可以直接从观测数据中获得:E[Y|Z=1] - E[Y|Z=0]。
然而,我们也可以根据依从性类型(总是接受者、从不接受者、依从者)来分解这个条件期望。以下是分解 E[Y|Z=1] 的步骤:
- 总体期望分解:
E[Y|Z=1]可以分解为在三种依从类型子群体中条件期望的加权平均。 - 简化条件:对于“总是接受者”和“从不接受者”,由于 Z 不影响他们的治疗选择,我们可以去掉条件
Z=1。例如,E[Y|Z=1, Always Taker]简化为E[Y|Always Taker]。 - 概率不变性:给定 Z 的条件下,成为某种依从类型的概率与 Z 无关,因为依从类型是先于随机分配存在的固有特征。
同理,我们可以对 E[Y|Z=0] 进行类似的分解和简化。
识别依从者平均因果效应 🧩
当我们计算意向治疗效应(即 E[Y|Z=1] - E[Y|Z=0])时,分解式中的“总是接受者”和“从不接受者”部分会相互抵消。最终,我们得到以下等式:
ITT = E[Y|Z=1] - E[Y|Z=0] = (E[Y|Z=1, Complier] - E[Y|Z=0, Complier]) * P(Complier)
这个等式表明,意向治疗效应等于依从者群体内部因 Z 不同而导致的结果期望差异,再乘以依从者在总人口中的比例。
由此,我们可以推导出依从者平均因果效应。将上述等式两边同时除以依从者的比例 P(Complier),得到:
(E[Y|Z=1, Complier] - E[Y|Z=0, Complier]) = ITT / P(Complier)
由于在依从者群体中,Z 的随机化直接导致了治疗 A 的随机化,因此左边的差值正是我们想估计的依从者平均因果效应。
效应的估计与解释 📈
上一节我们推导了识别公式,本节中我们来看看如何估计并解释它。
最终,依从者平均因果效应可以表示为以下可估计的比率:
CACE = (E[Y|Z=1] - E[Y|Z=0]) / (E[A|Z=1] - E[A|Z=0])
其中:
- 分子是意向治疗效应,即 Z 对 Y 的因果效应。
- 分母是工具变量对治疗接受的因果效应,它恰好等于依从者的比例
P(Complier)。因为E[A|Z=1]是总是接受者与依从者比例之和,E[A|Z=0]是总是接受者的比例,两者相减后总是接受者抵消,剩下依从者的比例。
这个公式中的所有成分都可以从观测数据 (Y, A, Z) 中估计得到。

关于这个比率,有两点重要的解释:
- 完美依从情况:如果所有人都依从,则分母等于 1,依从者平均因果效应就等于意向治疗效应。
- 一般情况:由于分母是介于 0 和 1 之间的比例,意向治疗效应会被“放大”。这意味着意向治疗效应通常低估了治疗在依从者中的真实效果。原因在于,ITT 分析中包含了未实际接受治疗的个体,从而稀释了治疗效应。
总结与要点 🏁
本节课中,我们一起学习了如何从工具变量框架中识别和估计因果效应。
- 核心前提:工具变量分析需要两个关键假设:工具变量有效性(包含排他性限制)和单调性假设。
- 识别目标:在单调性假设下,我们可以识别依从者平均因果效应,也称为局部平均处理效应。
- 估计公式:该效应可以通过一个简单的比率来估计:意向治疗效应估计值除以工具变量对治疗接受的影响(即依从者比例)。
- 关系:意向治疗效应通常是依从者平均因果效应的一个保守估计(向下偏倚)。
通过这个框架,即使我们无法在个体层面确定谁是依从者,仍然可以估计出治疗对依从者子群体的平均因果效应。
43:观察性研究中的工具变量 🧪

在本节课中,我们将学习如何在观察性研究中使用工具变量。我们将探讨工具变量的核心假设,并通过几个实际研究中的例子,来理解如何寻找和评估一个潜在的工具变量。
概述
在之前的课程中,我们讨论了随机化试验中因不依从性而使用的工具变量。本节我们将重点转向观察性研究。在观察性研究中,我们没有主动随机分配干预,但可以寻找一个类似“自然实验”的变量作为工具变量。我们将沿用之前的符号:Z 表示工具变量(鼓励接受治疗),A 表示实际接受的治疗,Y 表示结局,X 表示收集的协变量。
工具变量的核心假设
要使用一个变量作为有效的工具变量,必须满足几个关键假设。以下是这些假设的简要说明。
-
关联性:工具变量
Z必须与治疗分配A相关。这个假设可以通过数据来检验。
公式:Z与A相关。 -
排他性约束:工具变量
Z只能通过影响治疗A来影响结局Y,而不能存在其他直接影响Y的路径。这个假设通常无法直接检验,必须依赖专业领域的知识进行论证,也是争议最多的地方。
公式:Z → A → Y,且不存在Z → Y的直接路径。
在观察性研究中寻找工具变量时,最大的挑战往往在于论证“排他性约束”的合理性。
实际研究中的工具变量示例
以下是在医学和社会科学文献中提出的一些工具变量例子。每个例子都体现了研究者的巧妙构思,同时也伴随着对其有效性的广泛讨论。
日历时间
在一些研究中,尤其是比较药物效果时,治疗偏好可能在短时间内发生变化。例如,假设有两种治疗相同疾病的药物A和B。在早期,药物B更常用;但随着时间的推移,药物A变得流行,药物B使用减少。
- 工具变量:将患者确诊或接受治疗的“早期”与“晚期”时间点作为工具变量
Z。 - 论证:处于不同时间点的患者,接受哪种药物在某种程度上像是被“随机”分配的,因为时间本身可能主要只通过影响医生的处方偏好(治疗
A)来起作用。 - 挑战:必须论证在两个时间点之间,没有其他因素(如疾病管理指南、患者健康行为)发生系统性变化,从而直接影响结局
Y(如BMI)。如果两个时期相隔很近,论证会更有力。
距离与差旅时间
在研究专科医疗中心与普通医院的效果差异时,患者到不同医疗机构的距离可能影响其选择。
- 工具变量:患者住所到最近的高级专科中心与到最近普通医院的差旅时间作为工具变量
Z。 - 论证:差旅时间直接影响患者去哪类机构就诊(治疗
A),而差旅时间本身不太可能直接影响健康结局Y(如新生儿死亡率)。 - 挑战:需要论证居住在专科中心附近的人群,在其他健康相关特征上与居住较远的人群没有系统性差异。使用“差值”而非绝对距离,可以部分控制“偏远地区”这个混杂因素。
孟德尔随机化
这是一种利用遗传变异作为工具变量的方法。
- 工具变量:与某个行为(如饮酒)相关的特定基因变异作为
Z。 - 论证:根据孟德尔随机化原理,基因型在受孕时随机分配,且通常只通过影响表型(如饮酒量,即治疗
A)来影响疾病结局Y。 - 挑战:需要排除基因多效性,即该基因变异是否通过其他生物学途径直接影响结局
Y。
医生处方偏好
在比较两种药物时,医生个人的处方习惯可能影响患者最终接受哪种药。
- 工具变量:医生对前一位类似患者的处方选择作为工具变量
Z。 - 论证:医生之前的处方反映了其偏好,会影响对当前患者的处方(治疗
A),但医生之前对别人的治疗决定不应直接影响当前患者的结局Y。 - 挑战:医生的处方偏好可能与其医术水平、患者群体特征等其他因素相关,这些因素也可能影响患者结局,从而违反排他性约束。
出生季度
在研究教育年限对收入的影响时,出生季度曾被用作工具变量。
- 工具变量:个人的出生季度作为
Z。 - 论证:出生季度近乎随机,但通过影响入学年龄和法定离校时间,与个人最终的教育年限(治疗
A)相关。 - 挑战:出生季度是否与家庭背景、季节性疾病等影响未来收入
Y的因素完全无关?这存在很大争议。
观察性研究中的“依从者”
在随机试验中,我们关注“依从者”的因果效应。在观察性研究中,“依从”的概念需要调整。
- 定义:这里的“依从者”指的是那些当受到工具变量
Z的鼓励时就接受治疗,不鼓励时就不接受治疗的个体。 - 示例:在以“医生前一位患者的处方”为工具变量的研究中,如果你的医生前一位患者用了药A(鼓励用药A),而你也用了药A,那么你在这个分析框架下就被视为“依从者”。
- 核心:工具变量分析估计的仍然是依从者平均因果效应,只不过这里的“鼓励”和“依从”是基于所选的工具变量
Z来定义的。
总结

本节课我们一起学习了在观察性研究中应用工具变量的方法。我们回顾了工具变量必须满足的关联性和排他性约束两大核心假设。重点是通过多个实际例子(如日历时间、距离、遗传变异、医生偏好、出生季度),理解了研究者如何寻找和论证一个潜在的工具变量,以及每个例子面临的主要挑战。最后,我们明确了在观察性研究背景下,“依从者”的定义是如何对应于所选工具变量的。工具变量为处理观察性数据中的未测量混杂提供了一种强有力的思路,但其有效性高度依赖于对排他性约束的合理论证。
44:两阶段最小二乘法 🧮

在本节课中,我们将学习一种名为“两阶段最小二乘法”的统计方法。当研究中存在未测量的混杂因素,但我们可以找到一个有效的工具变量时,这种方法可以帮助我们估计因果效应。
概述 📋
两阶段最小二乘法是一种在工具变量设定下,用于估计因果效应的方法。当普通最小二乘法因存在混杂(特别是未测量的混杂)而失效时,它提供了一种解决方案。接下来,我们将详细探讨其原理和操作步骤。
普通最小二乘法的局限
在介绍新方法之前,我们先回顾一下普通最小二乘法,并思考当存在混杂时它为何会失效。
假设我们有一个处理变量 A 和一个结果变量 y。我们建立一个简单的线性模型:
y = β₀ + A * β₁ + ε
其中,ε 是随机误差项。应用普通最小二乘法的通常假设是,误差项 ε 与协变量 A 是独立的。这个假设在因果推断中至关重要。
如果 A 和 ε 相关,就意味着存在混杂。例如,接受处理的人可能本身就有更高的误差项期望值。在这种情况下,即使我们用最小二乘法估计出 β₁,它也不能代表因果效应,因为模型受到了混杂的干扰。即使我们在模型中加入了可测量的混杂因素,如果存在未测量的混杂,问题依然存在。
上一节我们指出了普通最小二乘法在存在混杂时的局限,本节中我们来看看如何利用工具变量和两阶段最小二乘法来解决这个问题。
两阶段最小二乘法介绍
两阶段最小二乘法,顾名思义,包含两个阶段。它用于在拥有一个有效的工具变量 Z 时,估计因果效应。我们首先假设 Z 是一个有效的工具变量:它影响处理 A,并且满足排他性约束(即 Z 只通过 A 影响 y)。
第一阶段
在第一阶段,我们将接受的处理 A 对工具变量 Z 进行回归。
A = α₀ + Z * α₁ + υ
我们假设误差项 υ 均值为零,具有恒定方差。由于我们假设(或通过设计使得)Z 是随机分配的,因此 Z 与误差项 υ 独立。这是一个标准的线性模型。
我们可以用最小二乘法估计参数 α₀ 和 α₁,得到估计值 α̂₀ 和 α̂₁。然后,我们可以为每个人计算一个处理 A 的预测值 Â:
Âᵢ = α̂₀ + Zᵢ * α̂₁
这里的 Âᵢ 是基于第 i 个人的工具变量值 Zᵢ,预测出的他们可能接受的处理。它并不等同于实际接受的处理 A,而是仅由工具变量 Z 决定的一个预测值。
第一阶段非常标准,你可以使用任何回归软件来完成并得到预测值。
第二阶段
在第二阶段,我们将结果变量 y 对第一阶段得到的拟合值 Â 进行回归。
y = β₀ + Â * β₁ + ε‘
请注意,这个模型看起来像标准回归,但这里的解释变量是 Â,而不是原始的处理变量 A。我们同样假设误差项 ε‘ 均值为零,具有恒定方差。
由于排他性约束,Z 只通过 A 影响 y。而 Â 是 A 在由 Z 张成的空间上的投影,它在功能上很像 Z,因此 Â 与 y 之间的关系应该是无混杂的。原始的处理 A 和 y 之间可能存在混杂,但 Â 仅由随机的 Z 决定,所以情况不同。
可以证明,从这个第二阶段模型中用最小二乘法估计出的 β₁ 就代表了一个因果效应。在实践中,你只需执行这两个阶段:第一阶段用 A 对 Z 回归得到 Â,第二阶段用 y 对  回归, 的系数就是因果效应的估计值。这被称为两阶段最小二乘估计量。
我们已经了解了TSLS的基本步骤,接下来我们通过一个简单案例来深入理解其背后的逻辑。
方法原理:一个简单案例
为了更好地理解为什么两阶段最小二乘法能得到因果效应,我们考虑一个简单情况:工具变量 Z 和处理 A 都是二元的(例如,Z=1表示鼓励治疗,Z=0表示不鼓励;A=1表示接受治疗,A=0表示未接受)。
在第一阶段, 是给定 Z 时 A 的期望值的估计。对于个人 i,Âᵢ 可以理解为给定其 Z 值时接受治疗的概率。
在第二阶段,我们有以下模型:y = β₀ + Â * β₁ + ε‘。那么 β₁ 如何解释?
在回归中,斜率系数 β₁ 表示预测变量 Â 每变化一个单位,结果 y 的期望值变化多少。如果我们设 Â = 1,y 的期望值是 β₀ + β₁;设 Â = 0,期望值是 β₀。两者之差就是 β₁。所以 β₁ 是 E[y|Â=1] 与 E[y|Â=0] 的对比。
但关键是要理解  的含义。当 Z 是二元时, 只有两个可能的值:
- 若 Z=0,则 Â = α̂₀
- 若 Z=1,则 Â = α̂₀ + α̂₁
因此, 的变化完全由 α̂₁ 这个量体现。Z 从 0 变为 1,会导致  变化 α̂₁ 个单位。
β₁ 衡量的是 Â 变化 1个完整单位 时 y 的变化。而我们的“意向治疗效应”(即 Z 对 y 的效应)对应的是 Â 变化 α̂₁ 个单位时 y 的变化。
因此,为了得到处理 A 变化一个单位(即从0到1)对 y 的效应,我们需要将“意向治疗效应”放大。具体来说,需要除以 α̂₁。这正是我们之前学过的“依从者平均因果效应”的公式:
CACE = ITT效应 / 依从率
而在这里,第一阶段回归的斜率 α̂₁ 恰好估计了工具变量 Z 对实际处理 A 的因果效应(即依从率)。所以,从两阶段最小二乘法第二阶段得到的 β₁,正好等于依从者平均因果效应。
通过简单案例我们看到了TSLS如何估计CACE,实际上,该方法的应用范围要广泛得多。
方法的推广与注意事项

我们刚才看的是处理变量和工具变量都是二元且没有协变量的情况。两阶段最小二乘法的优势在于其更广泛的适用性。
包含协变量
如果你想控制一些协变量 X,方法可以轻松扩展:
- 第一阶段:将处理 A 对工具变量 Z 和 协变量 X 进行回归,得到预测值 Â。
- 第二阶段:将结果 y 对第一阶段得到的 Â 和 协变量 X 进行回归。
此时, 的系数仍然代表一个局部因果效应,即依从者中的因果效应。
连续型工具变量
即使工具变量 Z 是连续型的,你也可以使用两阶段最小二乘法。步骤完全相同。
敏感性分析
当然,应用此方法时,人们会非常关心你的假设是否成立,尤其是排他性约束和单调性假设。
为了进行严谨的分析,通常需要进行敏感性分析,即探究如果核心假设被轻微或严重违反,你的结论是否会改变。
- 对于排他性约束:可以分析如果 Z 对 y 有直接效应(设大小为 ρ),结论在 ρ 为多大时会改变。
- 对于单调性:可以分析如果人群中存在一定比例(设为 π)的“违抗者”,结论在 π 为多大时会改变。
已有一些成熟的统计方法和软件可以进行这类敏感性分析,这有助于评估研究结果的稳健性。
总结 🎯
本节课我们一起学习了两阶段最小二乘法。
- 我们首先回顾了普通最小二乘法在存在未测混杂时的局限。
- 接着,我们介绍了两阶段最小二乘法的两个阶段:第一阶段用工具变量 Z 预测处理 A 得到 Â;第二阶段用  预测结果 y, 的系数即为因果效应估计值。
- 我们通过一个二元变量的例子,推导出该方法估计的正是依从者平均因果效应。
- 最后,我们讨论了该方法的推广形式(如加入协变量、处理连续工具变量)以及进行敏感性分析的重要性。
这种方法为在观察性研究或存在非依从性的随机试验中估计因果效应提供了一个强大的工具。
45:弱工具变量 📉

概述
在本节课中,我们将要学习弱工具变量的概念。我们将了解如何衡量工具变量的强度,以及为什么弱工具变量会给因果效应估计带来问题。
工具变量的强度
上一节我们介绍了工具变量的基本概念,本节中我们来看看如何衡量一个工具变量的“强度”。
工具变量的强度,本质上是指它预测实际接受治疗情况的能力。我们可以将工具变量视为一种“鼓励”,鼓励个体接受治疗。一个强工具变量意味着这种鼓励非常有效,大多数被鼓励的个体最终都会接受治疗。反之,一个弱工具变量对治疗接受情况的预测能力很弱,鼓励只能轻微地提高接受治疗的概率。
我们可以通过估计依从者比例来量化工具变量的强度。这个比例可以从观测数据中识别出来。

以下是计算依从者比例的公式:
依从者比例 = P(A=1 | Z=1) - P(A=1 | Z=0)
其中:
P(A=1 | Z=1)表示在受到鼓励(Z=1)的条件下,接受治疗(A=1)的概率。P(A=1 | Z=0)表示在没有受到鼓励(Z=0)的条件下,接受治疗(A=1)的概率。
这个差值就是依从者(即那些是否接受治疗完全取决于是否被鼓励的人)在总体中的比例。在实践中,我们可以简单地用样本中 Z=1 组的治疗比例减去 Z=0 组的治疗比例来估计它。
如果这个比例接近1,说明工具变量很强;如果接近0,则说明工具变量很弱。
弱工具变量的问题
理解了如何衡量强度后,我们来看看为什么弱工具变量会带来麻烦。
工具变量分析的目标是估计局部平均因果效应,即依从者群体的因果效应。如果依从者在总体中的比例非常小(例如1%),那么实际上为因果效应估计提供信息的有效样本量也会变得非常小。
假设原始样本量为 N,那么有效样本量大约只有 0.01 * N。这会导致以下几个问题:
- 估计不稳定(高方差):基于小样本的估计会非常不稳定,因果效应估计值的方差会很大。
- 置信区间过宽:由此计算出的置信区间会非常宽,使得我们难以得出确切的结论。
- 潜在的偏倚:在某些情况下,弱工具变量还可能引入估计偏倚,尽管不稳定性通常是更主要的问题。
应对弱工具变量的策略
既然弱工具变量有这些问题,当我们遇到弱工具变量时该怎么办呢?
以下是几种可能的应对策略:
- 考虑其他分析方法:如果工具变量太弱,进行工具变量分析可能不是最佳选择。很多时候,研究者在提出一个潜在的工具变量后,第一步就是检验它是否真的能强有力地预测治疗。如果不能,可能需要寻找其他工具变量或采用不同的因果推断方法。
- 尝试强化工具变量:这是一个活跃的研究领域。例如,近-远匹配 方法就是一种策略。其思想是,在匹配时确保个体在协变量(可能的混杂因素)上相似,但同时使他们在工具变量上的取值差异尽可能大。这类似于随机试验中,各组协变量分布平衡但干预分配不同。此外,还有其他新的统计方法致力于强化工具变量。
总结
本节课中我们一起学习了弱工具变量的核心内容。我们了解到,工具变量的强度由其预测治疗的能力决定,可以通过估计依从者比例来量化。弱工具变量(依从者比例低)会导致因果效应估计不稳定、置信区间过宽,可能使分析结果不可靠。面对弱工具变量,我们可以选择寻找更强的工具变量、采用其他分析方法,或使用如近-远匹配等新技术来尝试强化它。
46:R语言工具变量分析 🛠️

在本节课中,我们将学习如何在R语言中执行工具变量分析。我们将通过一个真实的数据集,一步步演示如何利用工具变量来估计教育年限对收入的因果效应。
概述
我们将使用一个公开的数据集,研究居住地距离四年制大学的远近(作为工具变量)如何影响个人的教育年限,并最终影响其收入。核心目标是估计“多接受一年教育”对收入的因果效应,同时处理可能存在的未观测混杂因素。
数据介绍与准备
首先,我们需要了解数据和核心变量。我们将使用R包 IVPack 中的 card 数据集。
- 工具变量 (Z):
nearc4,表示个人是否在四年制大学附近长大。 - 处理变量 (A):
educ,表示接受教育的年限。 - 结果变量 (Y):
lwage,表示工资的对数值(常用于处理收入的偏态分布)。
以下是加载数据和初步查看的步骤:
# 加载必要的包和数据
library(IVPack)
data(card)
# 查看工具变量的分布(接受“鼓励”的比例)
mean(card$nearc4)
# 绘制结果变量和处理变量的直方图,以了解数据分布
hist(card$lwage, main="Log Wages Distribution")
hist(card$educ, main="Education Years Distribution")
初步分析显示,约68%的样本居住在大学附近。工资对数分布相对对称,教育年限分布则在12年(高中毕业)处有一个明显的峰值。
估计依从者比例
上一节我们查看了数据分布,本节中我们来看看工具变量的强度。一个重要的指标是依从者比例,它反映了工具变量影响处理变量的能力。
为了简化并与随机试验类比,我们将教育年限二值化为是否大于12年。
# 创建二值化处理变量:教育年限是否大于12年
card$educ12 <- as.numeric(card$educ > 12)
# 估计依从者比例 = E[A|Z=1] - E[A|Z=0]
comp_prop <- mean(card$educ12[card$nearc4==1]) - mean(card$educ12[card$nearc4==0])
comp_prop
计算得到的依从者比例约为0.12(12%)。这意味着,居住在大学附近能使一个人获得超过12年教育的概率平均增加12%。这个强度尚可,并非特别弱。
估计意向治疗效应与依从者平均因果效应
在得到依从者比例后,我们可以进一步估计两种效应。
首先,我们估计意向治疗效应,即工具变量(鼓励)对结果的因果效应。
# 估计意向治疗效应 (ITT) = E[Y|Z=1] - E[Y|Z=0]
ITT <- mean(card$lwage[card$nearc4==1]) - mean(card$lwage[card$nearc4==0])
ITT
ITT的估计值约为0.16,意味着居住在大学附近的人,其对数工资平均高出0.16个单位。
接着,我们可以利用ITT和依从者比例来估计依从者平均因果效应。这是我们在工具变量假设下真正关心的处理效应。
# 估计依从者平均因果效应 (CACE) = ITT / 依从者比例
CACE <- ITT / comp_prop
CACE
CACE的估计值约为1.28。其解释为:对于依从者(即那些如果住在大学附近就会获得超过12年教育,否则就不会的人),获得超过12年教育使其对数工资平均增加约1.28个单位。这个值大于ITT,这与我们的预期一致。
注意:此估计依赖于“无违抗者”的假设。在本例中,即假设不存在“住在大学附近反而减少教育,不住附近反而增加教育”的人。
使用两阶段最小二乘法
除了上述公式法,更通用的方法是两阶段最小二乘法。上一节我们使用了简单的公式计算,本节中我们来看看如何在R中手动实现两阶段最小二乘。
以下是分步实现:
# 第一阶段:用工具变量(Z)预测处理变量(A)
stage1 <- lm(educ12 ~ nearc4, data=card)
card$pred_educ <- predict(stage1) # 获取预测值
# 第二阶段:用第一阶段的预测值代替实际处理变量,对结果变量(Y)进行回归
stage2 <- lm(lwage ~ pred_educ, data=card)
summary(stage2)
第二阶段回归中 pred_educ 的系数即为CACE的估计,结果同样约为1.28。这验证了公式法与两阶段最小二乘法在简单情况下的等价性。
使用IVPack包进行工具变量回归
手动进行两阶段回归较为繁琐,且不易计算稳健标准误。更便捷的方法是直接使用 IVPack 包中的 ivreg 函数。
以下是具体操作:
# 使用ivreg函数进行工具变量回归
# 公式格式:Y ~ A | Z, 表示用Z作为A的工具变量
iv_model <- ivreg(lwage ~ educ | nearc4, data=card)
summary(iv_model, diagnostics=TRUE)
运行此代码,在输出中查看 educ 的系数,它同样是约1.28。ivreg 的优势在于能直接提供系数估计、标准误、p值以及一些诊断检验,使分析更加完整和稳健。
控制协变量
在实际分析中,工具变量的外生性假设(即工具变量与误差项不相关)可能只在控制了某些协变量后才成立。例如,居住地可能与家庭收入、父母教育水平等相关。
ivreg 函数可以方便地加入协变量:
# 在模型中加入需要控制的协变量
# 格式:Y ~ A + X1 + X2 | Z + X1 + X2
# 其中X为协变量,需要在处理方程和工具方程中都加入
iv_model_cov <- ivreg(lwage ~ educ + exper + black + south + smsa + reg661 + reg662 + reg663 + reg664 + reg665 + reg666 + reg667 + reg668 + smsa66 |
nearc4 + exper + black + south + smsa + reg661 + reg662 + reg663 + reg664 + reg665 + reg666 + reg667 + reg668 + smsa66,
data=card)
summary(iv_model_cov)
加入一系列人口统计学和地区变量作为协变量后,教育年限 (educ) 的系数估计值仍然显著为正(约为1.2)。这表明在控制了这些变量后,教育对收入的正面因果效应依然存在。
总结

本节课中我们一起学习了在R语言中执行工具变量分析的完整流程:
- 准备数据与变量:识别工具变量(Z)、处理变量(A)和结果变量(Y)。
- 评估工具变量强度:通过估计依从者比例来完成。
- 计算因果效应:可以通过公式 CACE = ITT / 依从者比例 计算,也可以通过两阶段最小二乘法估计。
- 使用专业包:利用
IVPack包的ivreg函数可以简洁、高效地完成工具变量回归,并得到标准误等统计量。 - 控制协变量:通过在
ivreg模型中加入协变量,可以使工具变量的假设更可能被满足,从而得到更可靠的因果估计。
通过本教程的示例,你应能掌握使用R语言进行基本工具变量分析的方法,并将其应用于自己的研究之中。

浙公网安备 33010602011771号