第1行: |
第1行: |
| == 定义 == | | == 定义 == |
| 因果发现引擎是一种从观测数据中发现出可能的因果模型的机器,它接受两种输入——假设和数据,产生的输出为一个或一簇因果模型。下图展示了“因果引擎”的概貌。 | | 因果发现引擎是一种从观测数据中发现出可能的因果模型的机器,它接受两种输入——假设和数据,产生的输出为一个或一簇因果模型。下图展示了“因果引擎”的概貌。 |
− | [[文件:因果引擎.png|无|有框|因果推断引擎]] | + | |
| + | == 来源 == |
| + | 科学研究是如何开展的?在大多数情况下,科研人员会花费大量时间学习前置知识和目标研究领域知识体系,这可能会耗费从小学开始到本科毕业的15年以上的时间;之后,科研人员会根据研究目标,调研相关方向的经典文献和前沿文献,寻找其中的可创新点;在提出猜想与假设后,根据现有知识和能力设计实验;通过实验收集到相关数据后,进行数据分析,以确定当前数据会支持还是驳回原有猜想;最后通过深入的论证,详述研究对本领域产生了什么样的贡献,给出了什么样的新知识。 |
| + | |
| + | 如果未来让“因果科学”的相关技术辅助科研人员的研究工作,甚至是指导科研工作方向或者改变科研的范式,会是什么样的呢?朱迪亚·珀尔教授在《为什么》一书中给出了一个“因果推断引擎”的蓝图,在这里我又补充上了“因果发现引擎”在体系中应处的位置,构成了一个完整的“因果引擎”(图见下文)。本文[[文件:因果引擎.png|无|有框|因果推断引擎]] |
| | | |
| == 流程介绍 == | | == 流程介绍 == |
第13行: |
第17行: |
| 假设乔在服用药物 A 一个月后死亡,那么我们关注的问题就是这种药物A是否导致它的死亡。为了回答这个问题,我们需要想象这样一种情况:加入乔在即将服药时改变了主义,他现在会活着吗? | | 假设乔在服用药物 A 一个月后死亡,那么我们关注的问题就是这种药物A是否导致它的死亡。为了回答这个问题,我们需要想象这样一种情况:加入乔在即将服药时改变了主义,他现在会活着吗? |
| | | |
− | # '''知识''':知识指的是推理主体过去的经验。知识周围的虚线框表示它仍然隐藏在推理主体的思想中,尚未在模型中正式表达。 | + | # '''知识''':知识指的是推理主体过去的经验。知识周围的虚线框表示它仍然隐藏在推理主体的思想中,尚未在模型中正式表达。例如,我们如何去判断和界定一个病人的存活期、药物对于病人生理机能的可能的影响、其他的何种因素极有可能影响到药物疗效等等信息,都属于这个部分。 |
− | # '''假设''':假设是研究者在现有的知识的基础上认为有必要明确表达出来的陈述。 | + | # '''假设''':假设是研究者在现有的知识的基础上认为有必要明确表达出来的陈述。例如,我们可以根据已有知识判断出药物的作用机制与病人的性别是无关的,与病人的年龄是有关的,与病人的视力水平是无关的,与病人的身高是无关的,但与病人的体重是有关的等等。 |
− | # '''因果模型''':表示可以反应变量因果关系的形式载体,有多种表现形式,包括因果图、结构方程、逻辑等。 | + | # '''因果模型''':表示可以反应变量因果关系的形式载体,有多种表现形式,包括因果图、结构方程、逻辑等。例如,如果我们怀疑一位病人的存活期L“听从于”该病人是否服用了药物D,那么我们便可以称D为L的因,并在因果图里绘制一个从D到L的箭头。当然,关于D和L之间的关系问题的答案很可能还取决于其他变量,因而我们也必须将这些变量及其因果关系在因果图中表示出来。在这里,我们统一用Z来表示其他变量。 |
− | # '''可验证的蕴涵''':以因果模型的路径来表示的变量之间的听从模式通常会导向数据某种显而易见的模式或者相关关系。这些模式可被用于测试模型,因此被称为“可验证的蕴含(testable implications)”。即 服用药物A和 乔死亡事件DEATH之间没有连接路径翻译成统计学语言,为A和 DEATH之间相互独立。若实际数据与之相互抵触,则修改模型。 | + | # '''可验证的蕴涵''':以因果模型的路径来表示的变量之间的听从模式通常会导向数据某种显而易见的模式或者相关关系。这些模式可被用于测试模型,因此被称为“可验证的蕴含(testable implications)”。即 服用药物A和 乔死亡事件DEATH之间没有连接路径翻译成统计学语言,为A和 DEATH之间相互独立。若实际数据与之相互抵触,则修改模型。例如,将“D和L之间没有连接路径”翻译成统计学语言,就是“D和L相互独立”,也就是说,发现D的存在不会改变L发生的可能性。而如果实际数据与这一推断相抵触,那么我们就需要修改模型。 对于因果发现引擎输出的模型,绝大多数情况下并不会发生这种抵触;但对于直接从假设构建的模型,这种抵触是可能发生的,这就需要另一个图中没有画出模块,输入可验证的蕴涵和数据后,计算数据与模型假设的匹配程度。 |
− | # '''问题''':向因果引擎提交的问题即希望获得解决的科学问题。 | + | # '''问题''':向因果引擎提交的问题即希望获得解决的科学问题。例如,我们现在感兴趣的问题是“药物D对病人生存期L的影响是什么”,可以表述为“P(L|do(D))是什么”。 |
| # '''被估量''':被估量(estimand)是从数据中估算出来的统计量。具有概率公式的表现形式,实际上可以让我们根据所掌握的数据类型回答因果问题。 | | # '''被估量''':被估量(estimand)是从数据中估算出来的统计量。具有概率公式的表现形式,实际上可以让我们根据所掌握的数据类型回答因果问题。 |
| #* 若 A 和 DEATH 依赖第三变量 U 且无法收集 U 的值,则问题就无法得到解答。 | | #* 若 A 和 DEATH 依赖第三变量 U 且无法收集 U 的值,则问题就无法得到解答。 |
| #* 需要完善模型,可以通过输入新的知识或者简化假设(可能存在失败的风险) | | #* 需要完善模型,可以通过输入新的知识或者简化假设(可能存在失败的风险) |
− | # '''数据''':数据是填充被估量的原料,而其本身不具备表述因果关系的能力。被估量可以将这些统计量转化成表达式。
| + | 重要的是要认识到,与传统的统计学所提供的估计方法不同,在当前的因果模型下,无论我们收集到多少数据,有 |
− | # '''统计估计''':得到的估计值只是近似值。可以通过诸如机器学习领域提供的先进技术来应对近似结果的不确定性。
| + | |
− | # '''估计值''':最后,如果模型正确且数据充分,则获得待解决的因果问题的答案。
| + | 些问题可能仍然无法得到解答。这个被称作“可识别性”问题。例如,如果我们的模型显示D和L都依赖于第三变 |
| + | |
| + | 量Z(比如疾病的发展阶段),并且,如果我们没有任何方法可以测量Z的值,那么问题P(L|do(D))就无法得到解 |
| + | |
| + | 答。在这种情况下,收集数据完全就是浪费时间。相反,我们需要做的是回过头完善模型,具体方式则是输入新的 |
| + | |
| + | 科学知识,使我们可以估计Z的值,或者简化假设(注意,此处存在犯错的风险),例如假设Z对D的影响是可以忽 |
| + | |
| + | 略不计的。 |
| + | |
| + | 7. '''数据''':数据是填充被估量的原料,而其本身不具备表述因果关系的能力。被估量可以将这些统计量转化成表达式。 |
| + | |
| + | 在传统的统计方法中,被估量就等同于有待解决的问题。例如,如果我们对存活期为L的人群中服用过药物D的病人 |
| + | |
| + | 的比例感兴趣,那么我们可以将这个问题简记为P(D|L)。该表达式的值也就是我们的被估量。这一表达式已经确 |
| + | |
| + | 切地说明了数据中的哪个概率有待被估计,而并不涉及任何因果知识。 |
| + | |
| + | 8. '''统计估计''':得到的估计值只是近似值。可以通过诸如机器学习领域提供的先进技术来应对近似结果的不确定性。此 |
| + | |
| + | 外统计学科为我们提供了很多方法来应对这种不确定性,这些方法包括最大似然估计、倾向评分、置信区间、显 |
| + | |
| + | 著性检验等,使我们从已有数据可以得到更为“精准”的估计值。 |
| + | |
| + | 9. '''估计值''':最后,如果模型正确且数据充分,则获得待解决的因果问题的答案。比如“药物D使糖尿病患者Z的生存期 |
| + | |
| + | L增加了30%,误差±20%"。这一答案可以被添加到我们的【知识】中。而如果这一答案与我们的预期不符,则很 |
| + | |
| + | 可能说明我们需要对因果模型做一些改进。 |