WGCNA算法研究笔记

转自:http://www.gogoqq.com/ASPX/8390905/JournalContent/1303140588.aspx

研究了近半年的算法,记录下来给自己一个交代,也应该是考G前地最后一篇日志了。

Weighted Gene Co-Expression Network Analysis中文名有翻译成加权关联网络分析的,感觉不是很恰当,英文来得比较直接。本来是佟昊从老汪那拿的一个课题,因为看起来比较有意思就把文章找来慢慢啃,到现在算是捣鼓出点名堂了。方法是UCLA的一个教授提出来的,在文章中他将其归类到系统生物学的研究方法中,不过个人认为由于其分析水平还是只停留在DNA芯片上,并未到达系统的程度,但是方法本身还是能够预见一些incisive idea的。我打算先介绍方法的基本思想,然后把联系网上公布的sample data将该算法完整实现一遍,并解释一些自己在看的时候遇到的关键问题。

Weighted Gene Co-Expression Network Analysis(以下简称WGCNA),是一种从芯片数据中挖掘模块(module)信息的算法。在该方法中module被定义为一组具有类似表达谱的基因,如果某些基因在一个生理过程或不同组织中总是具有相类似的表达变化,那么我们有理由认为这些基因在功能上是相关的,可以把他们定义为一个模块(module)。这似乎有点类似于进行聚类分析所得到结果,但不同的是,WGCNA的聚类准则具有生物学意义,而非常规的聚类方法(如利用数据间的几何距离),因此该方法所得出的结果具有更高的可信度。当基因module被定义出来后,我们可以利用这些结果做很多进一步的工作,如关联性状(随后会以这方面的应用为Example),代谢通路建模,建立基因互作网络,甚至进行eQTL(这个确实很方便,不过前提是实验题有钱去杂那么多芯片)。不过我个人从中获益最多的是能加深人们对于生物体所选择的这种Scale-Free Topology网络调控的思考(下文会提到)。

WGCNA所分析的数据是芯片数据(当然需要杂很多芯片,比如若要研究细胞凋亡,那么使用改方法需要实验者提供细胞凋亡各个时期的芯片数据,以了解这一生理过程中细胞内所有基因的表达变化)。

在co-expression network中,每一个基因在一个特定时间或空间的表达情况被视做一个点(node),可以简单的理解成一张芯片上的一个基因的表达状况就是网络中的一个node。如果我们做了80张芯片,每张芯片上有8000个基因,那么我们可以用一个80*8000的矩阵来表示实验结果。为了得到基因间的关联情况,我们需要计算任何两个基因间的相关系数(文章中采用Person Coefficient),在经过该步运算以后,我们可以得到一个8000*8000的实对称阵S,sij表示第i个基因和第j个基因的Person Coefficient,即两个基因的表达谱相似性。

下一步的分析是该方法的第一个靓点。为了知道两个基因的表达谱是否具有相似性,需要人为规定一个阈值,只有当基因间的Person Coefficient达到这一阈值后(如0.8)我们才认为这两个基因是相似的,否则则不相似。为此人们定义了一个Adjacency Matrix,很显然在通过以上步骤处理S矩阵后,得到的Adjacency Matrix将是一个0/1矩阵(该矩阵主对角线上元素被规定为0,这一点很重要)。但是这种分析方法存在一个很明显的局限,即我们没有理由认为Person Coefficient为0.8的两个基因与Coefficient为0.79的两个基因是有显著差别的,但是以上算法却无法避免这一处境。而WGCNA采用了一种基于软阈值的判定方法很好地避免了这一问题。软阈值的思想是通过权函数将Adjacency Matrix中的元素连续化(所以方法才称之为Weighted Network),常用的权函数包括sigmoid函数和power函数。

那么aij同样是可分解的,这一点很好证明。拥有这一性质的优势在于可以简化计算量,当实对称阵是可以分解的时候,我们只需要利用其分解后的一个向量就可以表示该矩阵,因此在实际应用中能够简化计算机的运算内存使用。     如果直接拿Adjacency Matrix中的基因相关性指标进行module识别则未免有些过于简单了,为了保证芯片信息的充分利用,文章的作者提出了计算另一矩阵——topological overlap matrix(TOM)来衡量两个基因的相关性。建立这一矩阵的思想在于,任何两个基因的相关性不仅仅由他们的表达相似性直接决定,它还将A基因通过B基因与C基因的作用相关性纳入AC基因的TOM矩阵值中,以更精确地描述基因表达谱的类似性。

利用这种方式定义TOM矩阵中各元素的值是非常巧妙的,它很好地满足了我们所希望达到的目的。分子中对于lij

的定义,表示基因i通过任何基因与j关联的adjacency值,并将它们相加,而aij

则表示基因i与基因j间的直接关联性。分母的定义保证了wij

始终在0,1之间,我们可以考虑极端情况。当Adjacency Matrix中除主对角线元素外所有元均为1时,

上式直接看不容易看懂,把加和表达式展开之后则容易理解。

值得注意的是,WGCNA方法只考虑了一阶基因关联,更高级的关联可以用类似的方式去表示,但是并无此必要。首先芯片数据本身存在噪音,过度地提取信息未必会得到更好地结果,而且计算高阶关联会使算法的复杂度显著增大,即使高配置的服务器也未必能满足计算要求。

为方便后面的module identification,还需定义一个dissimilarity matrix。根据前人的研究,方式如下:

其中dij

表示dissimilarity matrix中的元,这一方程只是用1减去wij

得到dissimilarity matrix,在dij

上加指数的原因是empirical研究的结果,当使用指数形式的dissimilarity进行聚类分析会得到更distinct gene module。     得到了dissimilarity matrix后,我们所需要进行的工作就是聚类了,文章中使用的是hierarchical clustering方法,各种聚类方法的优劣不在本文的讨论范围中。使用聚类分析之后,各个module的identification也就完成了。

了解了整个分析流程,我们有必要再进一步了解一下分析细节。

首先是权函数的参数选择,由于power function有一参数

这一参数的选择势必影响着module identification的结果。

为了选择一个合适的参数值,我们有必要重新审视基因互作网络的构造。     网络的数学名称是图,在图论中对于每一个节点有一个重要概念,即:度。一个点的度是指图中该点所关联的边数。如下图,如果不加以思考,人们很容易认为生活中常见的网络会是一种random network,即每一个节点的度相对平均。然而第二种图,即scale-free network才是一种更稳定的选择。Scale-free network具有这样的特点,即存在少数节点具有明显高于一般点的度,这些点被称为hub。由少数hub与其它节点关联,最终构成整个网络。这样的网络的节点度数与具有该度数的节点个数间服从power distribution。这为我们寻找最佳参数提供了理论依据。     这里做一点扩展,我认为时非常有必要的。只要我们愿意抽象,Scale-free network大量存在于的生活中。人们的社交网络、生物基因蛋白质的相互作用、计算机网络甚至sexually transmitted diseases均有这层关系。生物体选择scale-free network而不是random network是有它进化上的原因的,显然对于scale-free network,少数关键基因执行着主要功能,这种网络具有非常好的鲁棒性,即只要保证hub的完整性,整个生命体系的基本活动在一定刺激影响下将不会受到太大影响,而random network若受到外界刺激,其受到的伤害程度将直接与刺激强度成正比。


    Random network (a) and scale-free network (b). In the scale-free network, the larger hubs are highlighted.     图片来源:http://en.wikipedia.org/wiki/File:Scale-free_network_sample.png有了这一理论基础,我们可以尝试一系列权函数的参数值,如

然后找出得到的网络最符合scale-free network的frequency distribution的这样一个

作为后续分析使用。但在实际寻参过程中,存在一个trade-off,即在最大化topology free network的回归系数R2

与保证节点的关联数目上为此消彼长的关系,这其实可以建立一个优化模型,但是文章的作者没有继续深入研究得到客观的寻参标准。尽管作者已经建立了一个scale-free topology criterion,但分析过程依旧有很大的主观成分。     Post-module analysis     当建立完module后,为了方便处理module与其它数据的相关性,如性状信息,有必要在每一个模块中定义一个特征基因,这一基因能在可接受的信息损失程度下代表这一module的特征,这样做的一个很大好处是能简化计算,即使在数据量极为庞大的时候也能快速地得到结果。     在后续的分析中,作者还比较了hard/soft-threshold方法建立网络的clustering coefficient的相关性质,以及它们对网络connectivity的影响,作者这样分析是为了说明soft-threshold方法相比hard-threshold的优势,由于涉及到较深的图论方面的知识,并且与module的建立无关,因此不在此处进一步讨论。     参考文献:     Bin Zhang, Steve Horvath, A General Framework for Weighted Gene Co-Expression Network Analysis, Statistical Applications in Genetics and Molecular Biology, Departments of Human Genetics and Biostatistics, University of California at Los Angeles, 2005, Volume 4, issue 1, Article 17.

时间: 2024-10-09 14:23:27

WGCNA算法研究笔记的相关文章

经典排序算法 - 冒泡排序Bubble sort

 原文出自于 http://www.cnblogs.com/kkun/archive/2011/11/23/bubble_sort.html 经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第

转载:DenseNet算法详解

原文连接:http://blog.csdn.net/u014380165/article/details/75142664 参考连接:http://blog.csdn.net/u012938704/article/details/53468483 本文这里仅当学习笔记使用,具体细节建议前往原文细度. 论文:Densely Connected Convolutional Networks 论文链接:https://arxiv.org/pdf/1608.06993.pdf 代码的github链接:h

基于位置信息的聚类算法介绍及模型选择

百度百科 聚类:将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异."物以类聚,人以群分",在自然科学和社会科学中,存在着大量的分类问题.聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法.聚类分析起源于分类学,但是聚类不等于分类.聚类与分类的不同在于,聚类所要求划分的类是未知的. 分类和聚类算法一直以来都是数据挖掘,机器学习领域的热门课题,因此产生了众多的

密码算法详解——AES

0 AES简介 美国国家标准技术研究所在2001年发布了高级加密标准(AES).AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准. 根据使用的密码长度,AES最常见的有3种方案,用以适应不同的场景要求,分别是AES-128.AES-192和AES-256.本文主要对AES-128进行介绍,另外两种的思路基本一样,只是轮数会适当增加. 1 算法流程 AES加解密的流程图如下: AES加密过程涉及到4种操作:字节替代(SubBytes).行移位(ShiftRows).列混淆(MixCo

矩阵乘法的Strassen算法详解

题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义.如A是m×n矩阵和B是n×p矩阵,它们的乘积AB是一个m×p矩阵,它的一个元素其中 1 ≤ i ≤ m, 1 ≤ j ≤ p. 值得一提的是,矩阵乘法满足结合律和分配率,但并不满足交换律,如下图所示的这个例子,两个矩阵交换相乘后,结果变了: 下面咱们来具体解决这个矩阵相乘的问题. 解法一.暴力解法 其实,通过前面的分析

关于SVM数学细节逻辑的个人理解(三) :SMO算法理解

第三部分:SMO算法的个人理解 接下来的这部分我觉得是最难理解的?而且计算也是最难得,就是SMO算法. SMO算法就是帮助我们求解: s.t.   这个优化问题的. 虽然这个优化问题只剩下了α这一个变量,但是别忘了α是一个向量,有m个αi等着我们去优化,所以还是很麻烦,所以大神提出了SMO算法来解决这个优化问题. 关于SMO最好的资料还是论文<Sequential Minimal Optimization A Fast Algorithm for Training Support Vector

基于Spark MLlib平台的协同过滤算法---电影推荐系统

基于Spark MLlib平台的协同过滤算法---电影推荐系统 又好一阵子没有写文章了,阿弥陀佛...最近项目中要做理财推荐,所以,回过头来回顾一下协同过滤算法在推荐系统中的应用. 说到推荐系统,大家可能立马会想到协同过滤算法.本文基于Spark MLlib平台实现一个向用户推荐电影的简单应用.其中,主要包括三部分内容: 协同过滤算法概述 基于模型的协同过滤应用---电影推荐 实时推荐架构分析     一.协同过滤算法概述 本人对算法的研究,目前还不是很深入,这里简单的介绍下其工作原理. 通常,

算法 希尔排序

希尔排序 Shell Sort 介绍: 希尔排序(Shell Sort)也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本. 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序.因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率比直接插入排序有较大提高. 执行流程: 首先

算法 排序NB二人组 堆排序 归并排序

参考博客:基于python的七种经典排序算法     常用排序算法总结(一) 序前传 - 树与二叉树 树是一种很常见的非线性的数据结构,称为树形结构,简称树.所谓数据结构就是一组数据的集合连同它们的储存关系和对它们的操作方法.树形结构就像自然界的一颗树的构造一样,有一个根和若干个树枝和树叶.根或主干是第一层的,从主干长出的分枝是第二层的,一层一层直到最后,末端的没有分支的结点叫做叶子,所以树形结构是一个层次结构.在<数据结构>中,则用人类的血统关系来命名,一个结点的分枝叫做该结点的"