前两天,我们对富集分析进行了简单的介绍以及介绍了一个进行基因功能富集分析的网站。这一次我们也通过另外一种方式来对基因之间的功能进行探讨
网络分析
基于ORA和GSEA的分析。主要还是基于基因的功能来进行富集的一种分析方式。网络分析虽然也算是一种富集分析。但是这个分析的思想还是主要观察基因与基因之间的相互作用关系来寻找更重要的基因。我们都知道,一个基因要形式功能。肯定不是独立的来形式功能的。而是通过和其他基因相互作用来发挥作用的。我们通过基因与基因的相互作用关系就可以得到一个类似于基因网络的结果。(其实网络分析不限于基因,对于人际关系等等只要是可以形成相互作用的数据都可以通过网络来进行可视化)

网络分析的基本组成
通过观察上图,我们可以发现。这个网络图当中其实包括主要包括两个成分。我们在描述一个网络的时候,基本上都要对这两个这两个成分进行描述
- 顶点/节点(vertex/node):在上图网络图当中,我们可以看到,有很多橙色的圆球。这些圆球我们称之为节点。这个就代表人际关系网络当中的每一个人或者基因相互作用关系当中的每个基因。节点数的多少代表我们纳入的个体的多少

- 连接线(edge)。在网络图当中的,两个不同节点之间是否有相互作用关系我们是通过连接线来表示的。如果两个节点之间是有相互偶用关系的,那我们就会画上一条线。

网络分析的方向性
对于基因网络而言,一般我们预测到的都是没有方向性的。但是一般的网络是分成有方向和没有方向的。对于有方向的网络,我们有基于网络的方向性来进行统计,而对于没有方向性的就直接统计其连接关系就行。例如下图其实就是一个有方向的网络图。

核心节点确认:
我们做网络分析的目的除了展示各个节点之间的相互作用关系之外。另外的一个还是要从网络当中寻找比较核心的基因。网络分析当中提供了很多参数来反应网络当中节点和连接线的属性,这里我们就介绍常见的几个。
degree
所谓的degree,代表着一个节点和多少个其他节点的有连接。我们认为在一个网络当中,如果一个节点和很多节点都有联系的话,那么这个节点的变化就可以影响很多节点跟着变化。那这种自身变化可以影响很多节点的变化的。我们就可以当中核心节点了。
按照下图来说的话,node1和4个节点存在相互作用关系,所以node1的degree是4;node3只有一个相互作用关系所以它的degree就是1。相比较而言node1肯定是更加重要的节点了。

另外呢,上面所要求的degree是基于没有方向的而言的。如果有方向的话。就有评估in-degree和out-degree了。计算方法其实也就是基于方向区分开就行。

对于R当中,我们可以在igraph::degree以及tidygraph::centrality_degree里面来计算网络当着的degree。两个参数都是可以通过mode
参数来控制计算degree的方向。如果没有方向就是all
。如果有方向基于自己想要计算的方向选择in
/out
即可。
igraph而言可以设置想要查看的nodes。如果不设置就是全部都查看

tidygraph对于degree的统计是基于nodes来的。我们需要提前提取nodes;然后在计算。计算的时候,结果也会附加到网络里面。而不是和igraph一样直接提取出来

betweenness
betweenness是基于网络的流通途径而言来说话。对于一个网络传播而言,有很多的途径。如果经过一个节点(A)经过一个节点(B)到达另外一个节点(C)的路径最短,那就B的betweenness就计一分。在所有网络最短路径当中经过的这个节点就是这个节点的betweenness得分。例如下面这个网络:

就A-E而言。一共有A-F-E; A-D-E; A-B-D-E三条。其中A-F-E和A-D-E是同样最短的。这条路径上,F和D都计0.5分。由于D还是B-D-E的最短路径。所以D会再加1分。所以到最后,D的betweenness是1.5;F的beweenness是0.5。
在R当中igraph可以使用betweenness
函数来计算网络的betweenness。对于这个网络而言。同时我们可以使用normalized
参数对于网络进行标准化

另外在tidygraph里面,则是通过centrality_betweenness
函数来进行计算的。同样的计算的时候也是需要先激活,然后使用mutate
来进行计算

betweenness 和 degree
需要注意的是,degree在有些时候和betweenness结果并不一致。有的时候,一个节点degree并不高,但是它的betweenness却很高。例如下面这个网络。

如果按照degree的话,A和Gdegree最大。但是如果是betweenness的话。则F最大。

对于节点特征的描述的算法还有很多,常用的基本上也就这两个。如果想要了解更多的算法,可以看看tidygraph包当中关于centrality有关的函数。里面总结了很多现有的算法。
网友评论