r语言 上三角矩阵 r语言生成下三角矩阵_机器学习



这个文献网络分析神器。一圈下来结果发现我知识结构存在了不少漏洞,不用假装自己是个新手。

我第一次听说蛋白质共进化是在2017年2月,圣地亚哥的Winter Rosettacon,Sergey Ovchinnikov的报告。当时的我还在科研门槛徘徊,知识体系还停留在ab initio 预测结构的认知中,觉得蛋白质结构预测的路还有很长的一段路要走。当我听到蛋白质共进化可以如此准确的预测蛋白质结构的时候,我整个人是震惊的。如图所示,灰色部分是利用蛋白质晶体结构表示的接触图谱,蓝色部分为利用蛋白质共进化信息预测的接触图谱。


r语言 上三角矩阵 r语言生成下三角矩阵_迭代_02


Sergey 的这个工作,于同年一月份发表在Science上,标题为《Protein structure determination using metagenome sequence data》,那么我们就以本文出发,并且结合文献神器connectedpapers,来了解一下这个领域的前世今生吧。至于为什么这么做,史论理论方法论,这是我个人熟悉领域的一个习惯。

背景知识

还是应该介绍一下什么是共进化。大家都知道蛋白质是由20种氨基酸组成的一维线性分子。在氨基酸的相互作用下,蛋白质会自发形成三维结构进而发挥其特有的生物功能。在三维结构中,氨基酸的相互作用维系了蛋白质的三维结构。如果在进化过程中,该蛋白质的其中一个氨基酸发生了突变,且破坏了残基间的相互作用,则该蛋白会变得不稳定,拥有该突变的物种即不容易存活下来。但是当与其有相互作用的氨基酸同时也发生了突变,且这两个突变又能够很好的相互作用在一起,使得蛋白质结构继续稳定下来。我们将这种情况称之为蛋白质共进化。
目前我们认为,在几亿年的物种进化过程中,同一个家族的蛋白质已经经历了非常多次的突变,在蛋白质同源家族序列中,我们可以通过观察氨基酸对的多次共同突变的信号来推断残基在空间中是相互接近的(见下图),进而推断出蛋白质残基的接触图谱。预测残基间的长程相互作用对蛋白质结构建模有着重要的推动作用,甚至可以在共进化信号和结构的基础上,可以进一步了解蛋白质的功能!


r语言 上三角矩阵 r语言生成下三角矩阵_迭代_03

图片来源Sergey的博士论文

分析

大家将这篇文章的标题输入进网站,并且根据这篇文章的引用关系生成一张引用关系图。这张图包含了一些重要的前后引,并且权重用圈的大小来表示,阅读起来还是非常直观的。


r语言 上三角矩阵 r语言生成下三角矩阵_r语言相关矩阵如何输出下三角矩阵_04


那么我们又可以从图中读取出什么信息呢,首先,我们看到我们的文章<Ovchinnikov 2017> 处在最下面,其实并不是一个很核心的文章。更像是基于大量工作基础上走到的一个应用巅峰。如果你仔细读一下这篇文章的话,这篇文章没有任何方法学的创新,而是利用了宏基因组的数据库将这个方法推到了一定的高度。而真正的方法学核心,其实就在图中有着大量连接的地方。

如何读图方法学的根
如果想深入这个领域的话,遍历这些文章是不可避免的。处在边缘位置,但是没有特别多边的文章,更像是多方法学的应用,想学习类似应用,有更多广度的话应该多读这类文章。那么处于边缘位置,而又拥有大量边的节点,就更像这个领域方法学的奠基了,如果想在这个领域做方法学的工作的话,这些文章是必读不可的。
我的还有一个小建议就是在读文章的过程中,梳理清楚人物脉络和师承关系,这样对你掌握这个领域是有非常大的帮助的。
那我们就从下往上顺时针的去熟悉每一篇文章都在做什么吧。图片最下方<Dunn,2008>是一篇神奇的文章,称之为APC。这个技术移除了共进化信号中熵和phylogeny覆盖的一层噪音,让接触矩阵变得更加稀疏。目前位置在这个技术不管在无监督学习共进化,还是机器学习中仍然起着一定的作用。


r语言 上三角矩阵 r语言生成下三角矩阵_迭代_05


第二篇文章是我比较不熟悉的一篇<Burger,2010>。之前一直困扰着共进化方法的东西是,如果单独看两点间的相关性,那么,不相关的两点也会因为其中一个共同相关的点产生间接关联,我们称之为间接耦合。那么本文采取的是贝叶斯的方法来消除这种间接相互作用。因为我后来接触到的主流方法放弃了贝叶斯的这种慢速的推理方法。所以让对我这个知识体系产生了一定的偏差,在以后,我们说不定可以重新探索一下这个方法,来同时推理共进化信号和phylogeny信号。

继续往上是<Weigt,2009>,这篇文章的第一作者Martin Weigt目前在法国的索邦大学任教,此人在后来的共进化领域里面做了不少贡献。而本篇文章,从节点的大小来看,应该也起码是排名前三的。如果你对本文感兴趣,点击这个节点,右侧会出现文章的摘要和链接,读起来非常方便。我来讲讲这篇文章主要做了什么,本文的公式也是后来所有各种无监督共进化方法的雏形。


r语言 上三角矩阵 r语言生成下三角矩阵_r语言 上三角矩阵_06


根据最大熵原理,需要搞清两体相互作用对应的参数,单体的参数,和配分函数,就可以构建出一套共进化的模型。而配分函数部分,就是对所有序列的总和O(21^(N-2)*N^2)是计算力无法解决的问题,要么就是通过非常消耗资源的MCMC来试图估计配分函数,而本文采取的是一种半启发式的消息传递的方式来估计O(21^2*N^4)。(编者注,这种计算量在目前还是无法接受的,因此在后续的方法中对配分函数的求解有了不少变体)

继续往上走,就是我主要熟悉的一篇文章了<Balakrishnan,2011>,本文的算法叫GREMLIN。其中的一个共同第一作者Hetunandan Kamisetty在CMU做完这个工作之后,加入了华盛顿大学david baker实验室做了博后,目前在facebook就职,这也是bakerlab开始研究共进化的渊源之一吧。另一个作者是CMU语言技术研究所的Sivaraman Balakrishnan,将一套研究语言的马尔科夫随机场的方式用到了蛋白质的序列当中。与上篇文章不同的是,本文的配分函数是用的伪似然估计,不需要复杂的迭代,针对每条序列,把它所有的饱和突变序列加起来作为配分函数。从理性的角度来看,这么做迅速减少了相空间的大小O(21*N),使得算法速度迅速提高,而在预测准确度的角度看,这套算法的准确度也保持的非常好。(编者注,伪似然估计的方法可能踩到了大自然的某种假设,比如所有的突变其实是独立的)。

方法学的衍变

看完了几篇根的文章,后图中文献连接密集的地方就是各种方法学的改进和应用了。比如你读到<Morcos,2011>你就会发现(本文的算法叫mfDCA),这篇文章用了平均场,对共进化的参数可以使用频率对矩阵的逆协相关矩阵进行估计,这套方法其实不需要任何的迭代,是一种近似解,也是一种解析解。也是因为这种算法的快速迭代,在后来David Baker团队设计的trRosetta中,为了配合增强数据的可变性(subsampling),他们采用了逆协相性矩阵的方法来快速估计共进化信号作为机器学习的输入。同时值得注意的是,早期做蛋白质共进化相关算法的Chris sander以及他的博士后Debora Marks也加入进了这篇文章。其中还有一个应该挺牛但是我不是很熟悉的Jose Onuchic也出现在了这篇文章中。

同年,<Marks,2011>,里面除了Chris Sander和Debora Marks之外,还有两个人的名字值得记住,一个是Lucy Colwell,她后来加入了剑桥,继续研究phylogeny对蛋白质共进化中的影响,另外一个是Thomas Hopf,后期我们仍然能看到他的文章。这篇文章的算法叫EVfold,而本质其实和GREMLIN没有区别,(编者注,其实代码上也没有区别)。这篇文章从某个角度讲,是将这个算法再一个更大的数据集上进行了蛋白质折叠预测。(之前的GREMLIN和mfDCA都是在个位数的蛋白上进行了预测)

与此同时呢,<Jones,2012> 来自UCL的David Jones也开发了一款新的算法,称之为PSICOV,本质上其实和mfDCA一样,是稀疏逆协相关矩阵的求解,但是这个方法在对相关矩阵的处理上是优于mfDCA的,因为相关矩阵不可逆,所以必然需要做一定的修正。mfDCA对整个相关矩阵加了一个小的数,而PSICOV在对角线上加了一个数作为正则项,而PSICOV的这种操作方式没有改变本征向量,其实是更合理一点的。
编者注:因为地理位置离deepmind比较接近,所以lucy的学生和David Jones都参与进了alphafold的开发和指导。


r语言 上三角矩阵 r语言生成下三角矩阵_r语言 上三角矩阵_07

图中为英国deepmind和UCL的所在地

方法学的应用
<Hopf,2012>,Hopf和Marks这帮人在Cell上发表了对膜蛋白的预测。<Marks,2012>在nature biotechnology上完善了从共进化信号到结构的方法,做了结构预。<Hopf,2014>进行了蛋白质复合物的预测,同时还邀请了蛋白质对接领域的大佬,HADDOCK的作者Alexandre Bovin一起参与了这项工作。(编者注,是不是就是共进化信号做约束,然后加一个docking完事)。总之这帮人这几篇快速的下游应用迅速的占领了这个领域,再后期还有更多的应用,和本文的结构预测关系不大,不在此罗列。
<2013,Morcos>这篇文章阐述了一个可能性,共进化信号还能用来捕捉中间态的结构,蛋白质的多个构象,是一个进一步的应用。而这个想法的可行性,David Baker的Ivan等人在<Anishchenko,2017>中做了重新讨论,大家有兴趣的可以自行搜索。
在另一条时间线上呢,加入david baker的Hetu和该组的Sergey Ovchinnikov 往GREMLIN里面加入了结构的Prior,试图对该方法进行一定的改进(现该策略已近放弃,具体原因按下不表)。2014年,<Ovchinnikov,2014>, Sergey等人也结合Rosetta对蛋白质复合物建模做了一定的探索。两拨人可谓你追我赶。<Ovchinnikov,2015>利用共进化信息解析了原来大量未解析的结构。(编者注,这是一个预测方法,作者在标题中用了一个词叫做determination,这是一种态度)。方法学的延伸
从图中看,目前阐述的方法都是形成紧密的相互联系,剩下的一部分也是紧密连接。让我们看一下图的另外一半主要讲述了什么样的故事。简略的讲,下半部分主要都是基于之前的无监督共进化结果,做了很多工程上的机器学习方法。比如芝加哥TTIC的jinbo Xu组的<Ma,2015>和 Jianlin cheng组的<Adhikari,2015>的机器学习方法文章问世。<Wang,2016>使用了CNN和ResNet,以共进化的特征作为输入做了接触图谱的监督学习。17年他们将该方法用在了膜蛋白上。以及还有<Jones,2018>等,不在赘述展开。还有一个比较有意思的是<Wuyun,2018>,jianyi yang对接触图谱预测做了一定的评估,后来加入了David baker实验室,一起开发了trRosetta。