大规模系统内变量关系的研究以及可视化-1因果分析

引言——变量关系分析的广泛意义

在统计分析中,有这样一类具有普遍意义的问题:在测得了(取样)一个变量系统的数据以后,如何从数据中发现并且验证这些变量之间的关系?了解变量之间的关系,无论是对于知识发掘(knowledge discovery),还是拟合精度的提高,都是很有意义的.比如任何一类回归分析,便是要分析预测变量和响应变量之间的关系.如果我们能用一些方法做回归前的预分析(pre-analysis before regression),比如,使用方差分析去分析各个预测因素之间的关系,是非常有必要的.为什么呢?一个很简单的原因是出于对复线性的考虑.众所周知,复线性是回归分析的大敌.如果大家还记得回归分析系数的协方差矩阵的话,想必也能记得如果预测因素之间的相关系数太大会导致回归方程系数非常不稳定(请参阅 method of multivariate data analysis by rencher).又如结构方程模型,是要分析测量变量(measurement)和结构变量(construct)之间的关系.还有最近十分热门的图模型,便是赤裸裸的声称图模型是所有统计模型的一个大综合.

变量关系的终极表示-因果关系

图模型里面大名鼎鼎的,来自人工智能的贝叶斯网络--相信很多人都有所耳闻.如下是名为alarm network的一个贝叶斯网络的经典之作,被公认为是贝叶斯网络的实用性的一个证明:

该网络是一个辅助医疗诊断系统.共涉及37个变量,46条边. 贝叶斯网络的一个显著特征是它所使用的箭头在很多情况下可以解读为"因果关系"--当然,能否从面板数据中推演因果关系尚存在争议.但是目前我们仍然假设这种可能性.贝叶斯网络的理解很简单,并且已经有了从统计数据中训练一个贝叶斯网络的多种方法,因为流行程度达到了新一轮的高潮.但是,与它的流行伴随而来的是一个让人困扰的问题:贝叶斯网络的训练方法是在太慢(就我的经验,训练如上一个37个变量的网络大概需要3小时,6G 内存、4M 缓存条件下).而且,算法本身经常陷入局部最优,而这些局部最优往往离真实模型相差甚远.特别是数据量不够的话,局部最优的点会很多,给算法本身的实用性提供了相当大的挑战.另外,对于一个贝叶斯网络的训练,需要大量的数据去支持.经典的多元统计理论认为,一般的多元模型参数与数据量的比值应当>20.但是通常大家认为,这个比率对于被噎死网络可能还太保守.

之所以在这里谈到贝叶斯网络,是为接下来的较为简单的模型或者数据分析树立一个远大的理想.现在我们的目标已经明确,那就是,在人类所能理解的范畴内,我们最好是能将系统内各个变量的关系用贝叶斯网络所表示出来,其中的箭头代表因果关系,或者至少也要代表一个先后关系,这是我们作数据分析,总结结论的一个终极目标.但是,所谓理想常常是与现实有所出入,在统计学界亦是如此--从哲学角度来定义因果的话,那么有一条是因果关系所必须满足的,那就是原因是不可能出现在结果之后的.那么,如果我们想知道两者的因果关系,就需要我们知道一个重要的信息--时序.而很可惜,这个信息并不是总能得到.而且,因果分析还需要一个更为严格的条件是:如果你需要推演一个系统内变量的因果关系的话,你必须保证这个系统内所有的变量都已经被测量(请参阅computation, cauality, and discovery).这个还仅仅是一个必要条件.这就是为什么Fisher他老人家终生都反对吸烟导致肺癌的的原因了.下图是关于肺癌的研究的一个很经典的贝叶斯网络:

smoker_bn

社会上传言:Fisher老人家是喜好抽烟的.他看到这个统计结果以后,立马就提出了一个另外的解释:根据当时收集的样本,人们并不能排除是否存在一种基因,是这种基因导致了意中人既喜欢抽烟,又容易得肺癌.统计上来看这个问题的话,就是在抽烟和肺癌之间还存在一个隐藏变量-Fisher所说的基因,导致了这两者之间是有关系的.而因为我们没有观测到这个变量,所以我们的最终模型里出现了一个从抽烟到肺癌的箭头.

Fisher所说并非狡辩.这也是他一直所声称的,观察研究(observational study)并不能获得因果关系的信息,而倘若研究目的是因果关系的话,那只有实验设计可能还有点戏.本文支持这一观点.但是本文也需要指出,从观察研究里推演因果关系是有可能的--感兴趣的可以点击Pear的主页,Pearl乃是因果推断的一代宗师.具体的指导思想是--我们可以从观测数据中推导各个变量之间的相关关系,再假设这些相关关系都是正确的,根据图论的一些理论,并且结合奥柯姆原理(occam’s principle,简单模型优先)我们就可以推导出部分因果关系.

贝叶斯网络的训练

如上一段所说,贝叶斯网络是符合人类逻辑思维的一种图模型,也是人类思维里表征知识的一种形式,因此广为人民群众所喜闻乐见.接下来的一个问题便是,如何能从数据中得到一个贝叶斯网络?

用人工智能里面的话来说,一个完整的贝叶斯网络包含两个元素,1)结构,也就是那些带有箭头的边;2)系数,也就是每条边的系数.如果所有的变量都是连续型,那我们可以假设它是一个多元高斯分布,于是每个系数就相当于解释变量和被解释变量之间的回归系数.从这里我们可以粗略的得到结论,那就是:倘若知道了结构,得到系数不难.所以贝耶斯网络的训练分两步走,先训练结构,在训练系数.但是问题是如何得到结构?有兴趣的朋友可以google如下关键词”PC Algorithm”, “IC Algorithm”,”K2 Algorithm” 以及 “learning of gaussian network by heckmen”.

另外,从实用角度出发,推荐两个工具箱.前者是贝叶斯网络以及隐马尔科夫模型的一个经典的MATLAB工具箱:Bayes Net Toolbox for Matlab.

另外还发现一个R的包:bnlearn,但我目前还没有用过.

结论

此文仅仅作为科普之用,欢迎拍砖.如果你感到无法满足,你可以点击这里,作者Kevin Murphy是图模型方面的一个牛人.如果你仍然不能满足,那么我推荐你google一下 “micheal jordan”(Kevin的老板),可以发现更多与他一样牛的他的师兄弟师姐妹,有做马尔科夫网络, 隐马尔科夫模型, 动态贝叶斯网络, 独立成分分析(independent component analysis), 状态空间模型等等,这些都属于图模型,并且都很有意思.

另外,正如文中所说,"之所以在这里谈到贝叶斯网络,是为接下来的较为简单的模型或者数据分析树立一个远大的理想".可能在接下来的后续文章我会与大家讨论如下这种更加实际的情况:如果我们无法做因果分析,那该怎么办?我们仍然需要知道变量之间的关系,无论是为了知识发掘,还是寻求一个好的预测模型.这是一个更加广泛的话题,而且某种程度上可以作为贝叶斯网络的一种替代品.当然,有人可能会跳出来反驳说,并不是所有的统计分析的最终目标是是为了画一个贝叶斯网络. 总而言之,接下来的话题将与此不同.

大规模系统内变量关系的研究以及可视化-1因果分析》有22个想法

  1. 最近要做一个生物网络的东西,很可能要用到贝叶斯网络,学习学习:)

    1. 啥数据?基因?
      基因数据维数高,样本量少,贝叶斯网络训练太慢,可能不好用。。
      一般都用markov network,训练速度很快,而且和贝叶斯网络有一定关系

      1. 我现在还不大清楚,似乎是消化数据,数据都是医学上人体内的,量不小。我们是零起点,现在还没有正式开始,到时还得好好请教。

      1. 前些日子张翔推荐我去读 sna 的东西,加上以前也看过机器学习领域的马尔可夫、贝叶斯。这篇文章启发很大啊 :)

    1. 恩,可惜因果分析这个伟大理想常常不能如愿:) 但是只要有机会能用因果分析,还是值得一试

  2. “从observational study里推演因果关系”,这个做法能否介绍一下大致思路?谢谢!我们现在几乎所有的教科书都讲,“观察数据”不能推导因果关系。

    1. 貌似你理解为我支持这一说法:首先我也要澄清,我并不是100%支持这个说法。我仅从理论上支持这个说法。而且这个说法的确切意思还有点独特的地方,就是:部分因果关系是可以从观测数据中得到的,如果如下三个条件满足:

      1。系统内所有变量都能被测量到;这样就避免了文中所引用的例子中存在一种基因这个隐藏变量的理论上缺陷。

      2。数据确实是从一个因果模型中产生的。

      3。我们相信最简单的,并且能妥善解释数据的因果模型是一个好模型。

      其中第三个条件其实是一个简化建模过程的问题。但是目前所有的因果推断的办法都是从这三个假设出发。比如我提到的,PC算法,IC算法。或者K2算法。前两者的基本思路是先用假设检验的办法,把系统中所有的conditional independent and dependent的关系找出来,再根据因果模型与conditional independent and dependent的关系(这是一个涉及图论方面的逻辑推理问题),从而得到所有可能的因果模型,再根据第三个假设,杀掉一些复杂而不能被domain knowledge解释的模型,往往最终能得到一个既简单,又能被人类理解的模型.(虽然这个也未必是全对,但是其中某些因果关系还是对的)-从模拟的结果来看,目前PC和IC,以及K2都做得很好,准确度还可以.具体可以参见文中所引用的那本书.

      我确实见过很多教科书–尤其是回归分析的教科书一再强调–回归方程不是因果模型,回归系数不是因果关系的体现。所以这个事情还是需要谨慎对待.因为第一个条件实在是难以验证.另外,往往当一个系统实在太大的时候,PC,IC算法都会失效.

      1. 希望有机会交流,我目前正在做一篇贝叶斯网络的实证论文,已经有了初步的结论,但还是有些算法不太理解,在运用的时候有些疑问。

  3. 很受启发,因果关系的推定是个终极目标吧,尤其是医学上。观察性研究中的某一部分还是可以作因果推断,比如,流行病学中的队列研究,这个讲究时序性,因在前,通过对因的跟踪观察,看是否有果。当然,要达到“如果你需要推演一个系统内变量的因果关系的话,你必须保证这个系统内所有的变量都已经被测量(see computation, cauality, and discovery).”,这个在医学研究的实践中恐怕不能实现,是遥不可及。 自然界的事物一因一果的情况到底有多少呢? 事物是普遍联系永恒发展,因即是果,果也是因。 谢谢分享!

  4. 最近刚刚读到了一篇用network analysis对数据进行分析,发现一些很有意思特性的文章,很有启发。关注一下相关发展

  5. 请教各位贤达:
    为了考察人的胖瘦程度,设计指标时首先绝不可回避的是体重,又因为大个子有胖也有瘦,小个子也有胖有瘦,于是引入身高,自然地想到用身高/体重 这个指标去考察。
    我的第一个困惑:我们几乎一眼就看出一个人是胖还是瘦,我们看出来的实际上是通过目测人的几何参数比如长宽比,那就是说我们目测胖瘦得到的结论实际跟体重无关?
    我的第二个困惑:目前流行的胖瘦指标是 体重/身高平方,为什么这个指标 比体重/身高 更为合理呢 ? 判别一个指标设计的合理性有什么法则可遵循?

    谢谢指点
    QQ:3103060

  6. 很奇怪为啥回复在这个帖子下…
    对于第二个问题, 这其实是一个选取哪个估计量(体重/身高 OR 体重/身高平方)的问题吧. 要回答这个问题, 得去找找文献里面它的最优标准是啥. 可能后者比前者更ROBUST,也可能后者风险小, 或者后者是无偏的… 答案可以很多, 要自己去找咯.呵呵

  7. all of these words, your fantastic work, let me think of “the big bang theory”,

  8. 黄师兄,我现在在做关于隐马尔科夫模型用于疾病暴发预测方面,也就是根据发病数来预测相关疾病的暴发与否,想请教一下有没有可推荐的用于该类型数据的软件,关键是程序
    之前看到matlab,但不会用,还有贝叶斯隐马尔科夫,更不会,能否指教一下呢,万分感激

  9. 这已经是方法论、认识论方面的分歧了,不过科学研究就是如此。

    貌似现在sna关注的人越来越多了啊,前些年,国内就那么一两个人在做。

  10. 我看到前辈们对因果分析 都有各自的研究和结论 我现在正在研究can总线的因果分析 想将因果分析方法应用于can网络中 但是 我还是处于初步阶段 也不知道因果分析理论能不能从数据的角度来解决我的问题

发表评论

邮箱地址不会被公开。 必填项已用*标注