WGCNA将共表达基因与表型数据相关联

网友投稿 1446 2022-11-25

WGCNA将共表达基因与表型数据相关联

WGCNA将共表达基因与表型数据相关联

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

单纯的共表达基因集合的结果并不能与我们的实验设计相关联,对于识别到的几十个共表达基因集合,一一进行富集分析去挖掘其功能,看上去如此的盲目,没有目的性,所以我们需要对共表达基因集进一步挖掘,常规的做法就是分析其中与性状相关的共表达基因,然后针对这些基因通过富集分析来研究其功能。

在WGCNA中,通过相关性分析将表型数据和共表达基因关联起来。这种方法要求提供每个样本对应的表型数据的值,利用这个值与module的第一主成分值进行相关性分析,根据相关性分析的结果。识别与表型相关联的modules。

表型数据示例如下

sample

weight_g

length_cm

ab_fat

F2_290

36.9

9.9

2.53

F2_291

48.5

10.7

2.9

F2_292

45.7

10.4

1.04

F2_293

50.3

10.9

0.91

第一列为样本,其他列代表不同的表型,尽量不要有空值,早进行相关性分析时,空值会被剔除,所以太多的空值会影响相关性分析的结果。

在识别modules的过程中,会根据module的第一主成分,即ME值合并modules, 合并之后的modules需要重新计算对应的ME值,然后用ME值与对应的表型数据的值进行相关性分析,代码如下

# 重新计算ME值MEs0 <- moduleEigengenes(datExpr, moduleColors)$eigengenesMEs <- orderMEs(MEs0)# 计算ME与表型之间的相关系数和p值moduleTraitCor <- cor(MEs, datTraits, use = "p");moduleTraitPvalue <- corPvalueStudent(moduleTraitCor, nSamples);# 用热图展示相关性的结果# 每个单元格标记相关系数和p值textMatrix <- paste( signif(moduleTraitCor, 2), "\n(",signif(moduleTraitPvalue, 1), ")",sep = "")dim(textMatrix) <- dim(moduleTraitCor)labeledHeatmap( Matrix = moduleTraitCor, xLabels = names(datTraits), yLabels = names(MEs), ySymbols = names(MEs), colorLabels = FALSE, colors = greenWhiteRed(50), textMatrix = textMatrix, setStdMargins = FALSE, cex.text = 0.5, zlim = c(-1,1), main = paste("Module-trait relationships"))

可视化的结果如下

在该图中,每一行代表一个module, 每一列代表一种表型,每个单元格的颜色由对应的相关系数进行映射,数值从从-1到1,颜色由绿色过渡到白色,然后过渡到红色。这里在运行时,会有一个有趣的小提示,因为红绿色盲的原因,不推荐采用绿色到红色的颜色渐变,建议采用蓝色到红色的渐变,只需要把​​greenWhiteRed​​​替换为​​blueWhiteRed​​即可,效果图如下

上述只是基本用法,适用于样本属于同一组的情况。设想一下,在组间差异非常大的情况下, 不同分组条件下modules与表型数据的相关性结果肯定也会不同,所以对于样本具有不同分组的数据,需要不同分组分开分析,WGCNA当然也支持这样的分析,不同分组的表达量保存在不同文件中,然后构建一个list对象,长度和分组个数相同,每个元素对应一个分组条件下的表达量数据

# 样本分为male和female两组,分开读取femData = read.csv("LiverFemale3600.csv")maleData = read.csv("LiverMale3600.csv")# 分组个数nSets = 2;setLabels = c("Female liver", "Male liver")shortLabels = c("Female", "Male")# 构建总的表达量,长度为nSets的listmultiExpr = vector(mode = "list", length = nSets)# 每个元素对应一个分组下的表达量数据multiExpr[[1]] = list(data = as.data.frame(t(femData[-c(1:8)])));names(multiExpr[[1]]$data) = femData$substanceBXH;rownames(multiExpr[[1]]$data) = names(femData)[-c(1:8)];multiExpr[[2]] = list(data = as.data.frame(t(maleData[-c(1:8)])));names(multiExpr[[2]]$data) = maleData$substanceBXH;rownames(multiExpr[[2]]$data) = names(maleData)[-c(1:8)];

通过上述方式合并不同分组对应的表达量数据,然后一起识别modules, 不考虑分组,所有样本一起识别到的module称为consensus modules, 在后续与表型数据进行相关性分析时,通过循环,对每一组单独进行分析,代码如下

moduleTraitCor = list()moduleTraitPvalue = list()for (set in 1:nSets){ moduleTraitCor[[set]] = cor( consMEs[[set]]$data, Traits[[set]]$data, use = "p")}

for循环中的代码和一开始提到的基本用法一致,所以对于每个group, 都可以产生上述的相关性结果的热图,除此之外,还可以分析在不同分组中,共表达的趋势是否一致,如果表达趋势不同,一个为正相关,一个为父相关,则用​​NA​​表示, 可以得到如下所示的热图

在该图中,只有在两组中共表达趋势相同的modules才会有颜色填充。

所谓的与表型数据关联,其实就是一个相关性分析,最后可以根据相关性的分析结果,筛选与某种表型显著相关的modules。更多细节请参考官方文档。

·end·

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解GO的层级关系在富集分析中的应用
下一篇:最新!微信小程序部分类目有调整
相关文章

 发表评论

暂时没有评论,来抢沙发吧~