2021-08-19WGCNA确定目标模块后如何找模块内的hubgene

WGCNA 分析确定重要模块之后,如何找模块内的hubgene?

想找hubgene,必须先理解其概念:网络中处于核心位置的点(基因)。
在WGCNA中,由于进行了无尺度化处理,具体表现为少数基因(图中红点)与众多基因建立联系,其余大多数基因则没有联系,数值化即 hubgene 为同一网络中具有更高的 connectivity或 degree。
然而抛开网络本身,假如已有先验信息例如知道某个基因具有重要功能,这种也应该作为hubgene在网络中重点关注,即使它并没有太高的connectivity或degree。


随即网络与无尺度网络
power=6
moduleColors = labels2colors(net_power$colors) #net_power为一步法构建出的对象

1. 基于连通度connectivity,等同于常规网络中的degree。

由于加权共表达网络用数值度量了点点相关性,所以网络中某点的连通度,相当于与其余所有点相关性的加和。
WGCNA中又将网络划分成了不同modules,所以连通度又可以分为整个网络的 kTotal ,和某个模块的 kWithin 。
kTotal:某基因与网络中其余所有有边相连基因的 degree 之和。
kWithin:某基因与同一模块中其余所有有边相连基因的 degree 之和。对于已知模块,kWithin越大,越可能为 hubgene 。
kOut=kTotal-kWithin, 此基因假设在黄色模块中,则 kOut为 与黄色模块之外所有模块的连通度之和。
kDiff=kIn-kOut=2*kIN-kTotal,评估此基因在某模块中连通性的强弱,不太常用。

计算上有两个策略
参考:https://www.rdocumentation.org/packages/WGCNA/versions/1.70-3/topics/intramodularConnectivity

#第一种: 先计算邻接矩阵,再计算连通度,推荐此种,邻接矩阵(Adjacency matrix)指基因和基因之间的加权相关性值取power次方即无尺度化之后构成的矩阵。
adjacency = abs(cor(datExpr,use="p"))^power #datExpr为表达矩阵,power请与一步法中的软阈值保持一致
kIM <- intramodularConnectivity(adjacency, moduleColors)

#第二种:直接输入表达矩阵计算
kIM <- intramodularConnectivity.fromExpr(datExpr, colors, power = power)

#查看
 head(kIM)
# kTotal kWithin kOut kDiff
# Gene1 90 80 10 70
# Gene2 9 8 1 7

2. WGCNA自带一个函数,可以提取每个模块中连通度最高的基因

参考:https://www.rdocumentation.org/packages/WGCNA/versions/1.70-3/topics/chooseTopHubInEachModule

hub = chooseTopHubInEachModule(datExpr,moduleColors, omitColors = "grey", power = power)

3. 有的文献中认为,hubgene 应该在某一模块中,与核心性状关联且与此模块也同样关联,比如:|GS|>.2&|MM|>.8 。

GS 为 gene significance 缩写,反映某基因表达量与对应表型数值的相关性,调用 cor 函数计算相关性,绝对值越大,相关性越大,越趋近0,越不相关。
MM 为 module membership 缩写,反映某基因表达量与模块特征值(module eigengenes)的相关。同样调用 cor 函数计算相关性,绝对值越大,相关性越大,越趋近0,越不相关。
ps: 模块特征值 (module eigengenes) 是指基因和样本矩阵进行PCA分析后,每个模块的第一主成分即PC1,是此模块特性的高度代表,可以理解为一个模块就是一个超级代表基因。

#3.1.首先计算模块特征值(module eigengenes)
MEs = moduleEigengenes(datExpr, moduleColors)$eigengenes

#3.2.计算module membership即MM
datKME =signedKME(datExpr, MEs, outputColumnName="MM.")

#3.3.gene significance即GS
GS = as.data.frame(cor(datExpr, datTraits, use = "p")) #datTraits为目标性状的矩阵文件

#3.4.循环提取每个模块的hubgene
MMname = colnames(datKME)
for (mm in MMname){
FilterGenes =abs(GS)> .2 & abs(datKME$mm)>.8
hubgenes = dimnames(data.frame(datExpr))[[2]][FilterGenes]  
}

需要注意的是这里并没有添加显著检验,正确的做法应该是同时针对pvalue进行控制,比如:|GS|>.2 & |MM|>.8 & pvalue<0.05

4. 同时,WGCNA官方建议结合 GS 与 kWithin 进行筛选

Finding genes with high gene significance and high intramodular connectivity in interesting modules,比如: kWithin > 30 & |GS| >0.5

5. 实际操作中,由于导出到 cytoscape 等可视化工具时边的数量格外多,就需要额外进行一个过滤步骤。此时常用的是针对 TOM 值做一个阈值的筛选,例如只保留 TOM>0.8 的基因关系对,此时计算模块内基因的 degree ,值越高,则越可能为hubgene 。

需要注意的时,此时的网络中,由于设定了阈值0.8,则默认剩余基因只要存在边的相连即为存在相关性,则这里的点与点之间数值价值就不大了(不是没有价值),此时degree也可计算为某基因,与之相连边的数目总和,同样也是相连点的数目总和。

ps: TOM (Topological overlap matrix):把邻接矩阵转换为拓扑重叠矩阵,是另一种距离矩阵。TOM值不止考虑两个基因的关系,还考虑依赖于这一对基因对存在的其它基因的影响,并将之量化,充分考虑了基因表达调控网络的复杂性,也更能代表两个基因之间的实际关系。

#5.1. 载入TOM值
# 如果采用分步计算,或设置的blocksize>=总基因数,直接load计算好的TOM结果
# 否则需要再计算一遍,比较耗费时间
TOM = TOMsimilarityFromExpr(datExpr, power = power)

#假如之前一步法中设定一个block计算,则可以直接载入节省时间
# load(net_power$TOMFiles[1], verbose=T)
# TOM <- as.matrix(TOM)

#5.2. 设定阈值并输出文件
geneid_allnet <- names(datExpr)
MEs = moduleEigengenes(datExpr, moduleColors)$eigengenes
modNames <- substring(names(MEs),3) 
TOMcutoff <- 0.8 #实际操作中我建议设定一个小的值,到cytoscape中再进行个性化调整

#循环输出所有模块
for (mod in 1:nrow(table(moduleColors)))
{
  modules = names(table(moduleColors))[mod]
  # Select module probes
  probes = names(datExpr)
  inModule = (moduleColors == modules)
  modProbes = probes[inModule]
  modGenes = modProbes
  # Select the corresponding Topological Overlap
  modTOM = TOM[inModule, inModule]
  
  dimnames(modTOM) = list(modProbes, modProbes)
  # Export the network into edge and node list files Cytoscape can read
  cyt = exportNetworkToCytoscape(modTOM,
                                 edgeFile = paste("CytoscapeInput-edges-", modules , ".txt", sep=""),
                                 nodeFile = paste("CytoscapeInput-nodes-", modules, ".txt", sep=""),
                                 weighted = TRUE,
                                 threshold = TOMcutoff,
                                 nodeNames = modProbes,
                                 altNodeNames = modGenes,
                                 nodeAttr = moduleColors[inModule])
}

#5.3,接下来针对CytoscapeInput-edges-*txt文件,进行统计,看哪个基因degree(边的数目总和)高,则此基因为hubgene

6. 除开以上连通度,度的衡量和过滤,hubgene的筛选还要采取灵活的方法,结合自己的研究目的及更多的数据进行。

例如加入转录因子信息,由于转录因子的特性,往往成为hubgene。
或者某合成通路中的限速酶,也可能会成为模块内的hubgene。
假如这个限速酶连通度并不高,那么跟它有关系的点里有没有连通度高的呢?如果这个点又是一个转录因子,那可就太好了。

以上,即是总结的我已知和常用的 hubgene 筛选策略,欢迎交流。同时,转载请与我联系,非常感谢。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容