专栏首页生信修炼手册WGCNA如何挖掘潜在的共表达基因

WGCNA如何挖掘潜在的共表达基因

欢迎关注”生信修炼手册”!

共表达基因指的是表达量具有协同变化趋势的基因集合,通常认为这些基因参与相同的生物学过程,比如参与同一个代谢通路,正是由于功能上的协同作用,导致表达量呈现出高度相关性。

在WGCNA中,对传统的相关系数进行乘方运算,用最终得到的值来表征基因间的相关性。在计算出这样的相关性统计量值之后,如何确定哪些基因是共表达的呢?

WGCNA的做法是聚类分析,聚类分析属于一种非监督的机器学习算法,通过聚类树,可以观察到哪些基因在聚类树中属于同一分支,属于同一分支的基因可以归为一类。实际操作中,考虑到基因数目较多等情况,肯定需要算法来自动化的进行分类,WGCNA采用的是dynamicTreeCut这个R包。

对于聚类算法而言,需要输入基因间的距离矩阵,首先就需要将基因间的邻接矩阵转换为距离矩阵,对相关系数进行乘方运算,可以计算出邻接矩阵,但是这个值本质上反映的是基因间的相似度,并不是距离。在计算距离矩阵时,WGCNA采用了TOM这种统计量,该统计量可以表征网络中节点的相似性,计算公式如下

对于两个基因ij而言,a表示两个基因邻接矩阵中对应的值,就是相关系数的乘方,K代表的每个基因的连接度, 公式如下

对于加权网络而言,就是该节点的边对应数值的总和,比如在网络中基因A与3个基因相连,基因A的连接度就是对应3条边的数值之和。两个基因间的l值代表的是两个基因所有边的权重乘积的总和,公式如下

公式只是帮助我们理解计算的过程,其实只需要理解TOM是表征节点的相似度就行,我们要的是距离,所以直接用1减去相似度即可,公式如下

借助TOM值,将基因间的相关系数转换为了距离,然后就可以用该距离矩阵进行聚类。上述的计算方法在WGCNA中都有对应的公式,代码如下

# 确定乘方运算中power的最佳取值
powers <- c(c(1:10), seq(from = 12, to=20, by=2))sft <- pickSoftThreshold(
datExpr,
powerVector = powers,
verbose = 5)softPower <- sft$powerEstimate#  计算邻接矩阵
adjacency <- adjacency(datExpr, power = softPower)# 计算TOM相似度矩阵
TOM <- TOMsimilarity(adjacency)# 计算距离矩阵
dissTOM <- 1-TOM# 聚类
geneTree <- hclust(as.dist(dissTOM), method = "average")

根据聚类结果和距离矩阵,就可以调用dynamicTreeCut的算法来识别modules, 代码如下

# 指定每个module中基因数目的最小值
minModuleSize <- 30# 识别modules
dynamicMods <- cutreeDynamic(
dendro = geneTree,
distM = dissTOM,
deepSplit = 2,
pamRespectsDendro = FALSE,
minClusterSize = minModuleSize)

通过table函数可以查看modules的结果,用法如下

> table(dynamicMods)
dynamicMods
 0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19
88 614 316 311 257 235 225 212 158 153 121 106 102 100  94  91  78  76  65  58
20  21  22
58  48  34

可以看到,识别出22个modules, 0代表那些没有归入任何modules的基因。通过plotDendroAndColors函数可视化聚类树对应的modules, 代码如下

dynamicColors = labels2colors(dynamicMods)
plotDendroAndColors(
geneTree,
dynamicColors,
"Dynamic Tree Cut",
dendroLabels = FALSE, hang = 0.03,
addGuide = TRUE,
guideHang = 0.05,
main = "Gene dendrogram and module colors")

生成的图片如下

整个图片分为两个部分,上方为基因的聚类树,下方为识别到的modules, 不同的modules对应不同的颜色,其中灰色对应那些没有归入任何modules的基因。

通过dynamicTreeCut识别到modules之后,还会结合每个modules的基因表达量数据,来识别相关性很高的modules, 从而进行合并,其原理是对modules进行聚类,每个module下的基因表达量是一个二维矩阵,做相关性分析我们只需要一个一维向量就可以了,可以利用PCA分析提取第一主成分来表征原始的矩阵,在WGCNA中,把每个module的表达谱数据对应的一维向量称之为Module eigengene E。获取一维向量之后,就可以计算相关性,直接用1减去相关性作为距离,进行聚类,代码如下

MEList <- moduleEigengenes(
 datExpr,
  colors = dynamicColors)
MEs <- MEList$eigengenes
MEDiss <- 1-cor(MEs)
METree <- hclust(as.dist(MEDiss), method = "average")
plot(METree,
main = "Clustering of module eigengenes",
xlab = "", sub = "")

modules的聚类树示意如下

每个modules的名字用对应的颜色表示,在该聚类数中,分支长度为1减去两个module间的相关系数,在合并modules时,将高相关性的合并为一类,可以指定一个阈值,比如将相关系数大于0.8的合并为一类,在该聚类树中,对应的就是height小于0.2的modules, 对应下图红色的线

可以看到有8个modules都满足条件,在合并时,会将原本属于同一分支的modules直接合并为一个,从图上可以看出,合并后会减少4个modules。合并的代码如下

MEDissThres <- 0.2
merge <- mergeCloseModules(
 datExpr,
 dynamicColors,
 cutHeight = MEDissThres,
 verbose = 3)
mergedColors <- merge$colors
mergedMEs <- merge$newMEs
plotDendroAndColors(
geneTree,
cbind(dynamicColors, mergedColors),
c("Dynamic Tree Cut", "Merged dynamic"),
dendroLabels = FALSE,
hang = 0.03,
addGuide = TRUE,
guideHang = 0.05)

合并之后的modules 对应的图片如下

最后总结一下,WGCNA在挖掘共表达基因时,首先通过TOM统计量将邻接矩阵转换为距离矩阵,然后聚类,利用dynamicTreeCut的算法识别modules, 最后根据modules之间的相关性,合并modules。

·end·

—如果喜欢,快分享给你的朋友们吧—

本文分享自微信公众号 - 生信修炼手册(shengxinxiulian),作者:lzyg

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 你听说过Epistasis吗?

    和单基因孟德尔遗传疾病的研究相比,复杂疾病的研究虽然取得了一定成效,但还远远谈不上成功,因为影响复杂疾病的因素实在是太多了,比如疾病性状相关的基因座数量很多,等...

    生信修炼手册
  • mirDIP:最全面的人类miRNA靶基因数据库

    miRNA靶基因预测是研究miRNA功能机制必经的一个环节,现有的相关软件和数据库非常多,然而不同软件的算法各有优劣,在不同数据库之间的交叉检索费时费力,所以需...

    生信修炼手册
  • 使用FusionMap检测融合基因

    融合基因是指两个或者多个基因联合起来,共同转录形成一个转录本,融合基因可以作为某些疾病的特异分子标记,常见的有以下几种

    生信修炼手册
  • 数据分析师必须掌握5种常用聚类算法

    给定一组数据点,我们可以使用聚类算法将每个数据点分类到一个特定的簇中。理论上,属于同一类的数据点应具有相似的属性或特征,而不同类中的数据点应具有差异很大的属性或...

    1480
  • 数据科学家必须要掌握的5种聚类算法

    编译 | AI科技大本营 参与 | 刘 畅 编辑 | 明 明 【AI科技大本营导读】聚类是一种将数据点按一定规则分群的机器学习技术。给定一组数据点,我们可...

    AI科技大本营
  • 每个机器学习工程师都应该知道的基本算法

    机器学习作为一门多领域交叉学科,已经存在很长时间了,但近些年才开始火热起来。本文中列出了你需要知道的机器学习领域的算法,了解这些你就可以解决在机器学习中所遇到的...

    AiTechYun
  • 【机器学习】--层次聚类从初识到应用

    聚类就是对大量未知标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小. 数据聚类算法可以分为结构性或者分...

    LhWorld哥陪你聊算法
  • LinkedList - 21. Merge Two Sorted Lists

    Merge two sorted linked lists and return it as a new list. The new list should b...

    用户5705150
  • 机器学习(7)——聚类算法聚类算法

    聚类算法 前面介绍的集中算法都是属于有监督机器学习方法,这章和前面不同,介绍无监督学习算法,也就是聚类算法。在无监督学习中,目标属性是不存在的,也就是所说的不存...

    DC童生
  • 机器学习常用聚类算法大盘点,包括:原理、使用细节、注意事项

    无监督学习是没有标记信息的学习方式,能够挖掘数据之间的内在规律,聚类算法的目的就是找到这些数据之间的内在性质和规律。

    double

扫码关注云+社区

领取腾讯云代金券