MIT因果迷你课笔记 —— 发现因果关系3(多变量)

Luna
Written by Luna on

系列首篇:MIT因果迷你课笔记 —— 相关和因果

上篇:MIT因果迷你课笔记 —— 发现因果关系2(restricted structural causal model)

这节继续讲 restricted structural causal model,会从两个变量的因果归纳,延伸到多个变量。

    多个变量的问题通常可以转换成两个变量的问题来解决,怎么转换?

    假设你现在有三个变量,它们三个的关系可能会是下面两种:

    一种是左边这种,x是y和z的因,z是y的因。另一种,x是y和z的因,y是z的因。那怎么转换成两个变量的因果判断呢,固定x的值即可,赋予x一个固定值,那么x到y和z的因果关系就被切断了。接下来的问题就变成了判断z是y的因还是y是z。

        

    我们可以通过联合分布推出有向无环因果图吗?答案是不能。但如果噪声呈联合独立高斯分布,且函数都是非线性的话,那么就可以从左边的分布式推出右边的因果图。至于这其中的道理,概括着讲就是,如果满足非线性且高斯分布的条件,那么因和噪音会相互独立的,但果和噪音不相互独立,可以根据这一点来判断因果。具体请看上一篇MIT因果迷你课笔记 —— 发现因果关系2(restricted structural causal model)

    分类概括,有下面的公式可以参考,第一种structural causal model,不能从分布函数推导出因果图,但是additive noise model和causal additive model可以,linear Gaussian model又不行。PAi指结点i的父节点。

    现有additive noise model,一种是X->Y的分布,分布函数所有的可能性用下图中红色的区域表达,一种是Y->X的分布,所有的可能性用绿色的区域表达。如果函数是线性的,那么因果关系既可以是X->Y,也可以是Y->X,交线表达的是线性情况。但如果函数非线性,则不会有相交的部分。

    假如说X和Y的真实分布是P,而我们实验得到的分布是P’,如何根据P’来判断是X->Y,还是Y->X,可以分别计算P’到两个分布函数空间的距离,离哪个空间近,就认为属于哪个空间。

    计算两个分布之间的距离可以用KL散度,即相对熵,具体的定义和解释可以见Cross Entropy Loss而这里要做的是找到最近的分布函数,即最小化相对熵或者KL散度(最小化交叉熵(或KL散度[相对熵])和极大似然估计是等价的,关于这个,这里不做详细说明,具体原理见参考[2])。上图表达的是两个变量的分布域,而现实中,可能会有多个变量,多个变量可以有多种可能的因果,每一种因果都会有一个分布域。因此可用下面的方法找到最有可能的因果关系:

    上式中residuals是残差,即观察值与估计值(拟合值)之间的差。用一句话说明就是:遍历每一种可能的因果关系,基于每种因果关系,拟合出分布函数,再计算拟合出的分布与真实分布之间的距离,最后选择那个与真实分布距离最小的分布函数基于的因果关系。

    用空间感强一点的方式解释是,每个因果关系都有一个分布域,将真实分布投射到每个分布域上,再计算真实分布与投射点的距离,选出最小距离的投射,对应的因果关系就是这个方法的结果。

    下面有一段R语言代码,演示了如果判断两个变量间的因果关系,仅供参考:

library(dHSIC)
library(mgcv)


set.seed(1)
# 模拟出数据,x是因,y是果
# 现实中数据是实验观察所得,而观察者可能并不知道真实的因果关系
x<-rnorm(200)
y<-x^3+rnorm(200)
# 假设x->y,拟合出分布函数,广义加性模型gam在R语言中用于拟合非线性关系。
modelforw <- gam(y ~ s(x))
# 假设y->x,拟合出分布函数
modelbackw <- gam(x ~ s(y))
# 独立性测试,modelforw的残差与输入值的独立性更大
# p-value为假设检验,p值越小,拒绝原假设的理由越充分
dhsic.test(modelforw$residuals, x)$p.value
# 0.771228771228771
dhsic.test(modelbackw$residuals, y)$p.value
# 0.00699300699300699
# 似然估计,很明显modelforw离真实分布距离更近
-log(var(x)) - log(var(modelforw$residuals))
# 0.142006280126033
-log(var(y)) - log(var(modelbackw$residuals))
# -1.01401349632063 

    根据上面的代码,会发现归纳两个变量之间的因果关系似乎还挺简单的,那么这个方法有什么问题呢?

    1. 当变量增多,如果只有一个变量,没有因果关系会存在,如果有两个变量,那么有两种可能的因果关系,如果有三个变量呢?有25种可能的因果关系(有向无环图)。如果有20个呢?答案是无数个,看下图:

    关于这个问题,有些研究提出了一些算法解决,这里就不细说了:

  1. 边越多,拟合出来的效果会越好,似然估计值会越大,但是有些边是无用的。需要一些其他方法来剔除掉多余的边。这里也不展开了。

    另外一个点,就是你需要多少数据来归纳因果关系。这时候,可能就需要计算正确的分布和错误的分布之间的距离,如果它们距离很近,那么很明显,因果关系就比较难归纳。

    怎么计算呢?不同情况,方式不一样,下面举例了一种情况,从下面公式可以看出,当噪音强的时候,两种分布就会离的比较近,我们就可能需要更多样本来归纳因果关系:

系列首篇:MIT因果迷你课笔记 —— 相关和因果

上篇:MIT因果迷你课笔记 —— 发现因果关系2(restricted structural causal model)

声明:所有图片均来自参考,没有原创图片,公式和定理。

参考:

[1] Jonas Peters, University of Copenhagen, Mini-course on Causality, Laboratory for Information & Decision Systems (LIDS) and Models, Inference & Algorithms of the Broad Institute, MIT, 2017

[2]轻墨,极大似然估计与最小化交叉熵损失或者KL散度为什么等价?https://zhuanlan.zhihu.com/p/84764177

Comments

comments powered by Disqus