前面的分析已经确定了几个与临床特征(体重)高度相关的模块(标记为brown、red 和 salmon)。为了便于生物学解释,我们想知道模块中基因的GO信息,探究这些基因是否某些功能类别中显著丰富等。
首先,导入准备好的样本表达数据datExpr
、临床信息datTraits
以及构建的网络和模块networkConstruction-auto.RData
:
# 设定工作目录
setwd("/home/cxt/data/R/")
# 导入包
library(WGCNA)
# 设置将strings不要转成factors
options(stringsAsFactors=F)
# 允许使用最大线程
allowWGCNAThreads()
# 或者直接指定线程数
# enableWGCNAThreads(nThreads=16)
# 导入表达与临床数据
lnames = load(file = "dataInput.RData");
lnames
# 导入共表达网络及模块
lnames = load(file = "networkConstruction-auto.RData");
lnames
为了探究模块中基因的功能,其中一种方法就是将模块中的基因信息导出,例如基因标识符列表。然后,利用一些流行的基因本体和功能丰富分析套件(如David或AmiGO)分析这些基因的功能。
在这里,我们以棕色模块中的基因为例,首先导出模块中的LocusLinkID (entrez):
# 导入注释信息
annot = read.csv(file = "GeneAnnotation.csv");
# 将表达数据中的探针ID与注释文件的中信息进行匹配
probes = names(datExpr)
probes2annot = match(probes, annot$substanceBXH)
# 获得每一个探针ID对应的基因ID(Locuis Link IDs)
allLLIDs = annot$LocusLinkID[probes2annot];
# 获得我们关注的模块,这里是棕色模块
intModules = c("brown", "red", "salmon")
# 输出模块中的基因
for (module in intModules)
{
# 获得模块的探针ID
modGenes = (moduleColors==module)
# 获得探针ID对应的Entrez ID
modLLIDs = allLLIDs[modGenes];
# 将这些基因信息保存为一个文件
fileName = paste("LocusLinkIDs-", module, ".txt", sep="");
write.table(as.data.frame(modLLIDs), file = fileName,
row.names = FALSE, col.names = FALSE)
}
# 我们将在分析中使用所有探针,以作为富集分析的背景。
fileName = paste("LocusLinkIDs-all.txt", sep="");
write.table(as.data.frame(allLLIDs), file = fileName,
row.names = FALSE, col.names = FALSE)
在获得了模块中的基因后,大家就可以按照各自习惯的分析流程去分析这些基因的功能
WGCNA包现在包含一个函数,可以很简单的完成GO富集分析。要使用该函数,我们需要提前安装该函数依赖的Biconductor包:GO.db、AnnotationDBI 和 appropriate organism-specific annotation package(s) 。
注意,在这个教程中,我们研究的是小鼠样本的基因表达。
我们可以调用GOenrichmentAnalysis
函数来进行GO分析:
# 决定要分析的模块moduleColors以及基因信息allLLIDs
GOenr = GOenrichmentAnalysis(moduleColors, allLLIDs, organism = "mouse", nBestP = 10);
# 我们可以看一下每个模块中10个最佳GO Term
tab = GOenr$bestPTerms[[4]]$enrichment
names(tab)
# 由于数据很多,我们将结果保存为文件,方便浏览
write.table(tab, file = "GOEnrichmentTable.csv", sep = ",", quote = TRUE, row.names = FALSE)
# 当然,如果你想直接在R中看相关,也可以直接显示
keepCols = c(1, 2, 5, 6, 7, 12, 13);
screenTab = tab[, keepCols];
# 数字列表的内容四舍五入到小数点后两位
numCols = c(3, 4);
screenTab[, numCols] = signif(apply(screenTab[, numCols], 2, as.numeric), 2)
# 将GO Term截短到最多40个字符
screenTab[, 7] = substring(screenTab[, 7], 1, 40)
# 缩短列名
colnames(screenTab) = c("module", "size", "p-val", "Bonf", "nInTerm", "ont", "term name");
rownames(screenTab) = NULL;
# 设置R的输出宽度。读者应该利用这个数字来获得满意的输出。
options(width=95)
# 最后,显示富集信息列表
screenTab
在这里的分析主要是为了研究模块中基因的生物学意义,用到的就是GO分析。除了GO分析,其他依赖基因的生物学分析都可以进行,比如通路富集分析等。
而在进行分析的时候,我们大部分选择将模块中的基因信息导出,然后进行个性化分析,不管你是使用第三方工具还是R。
本文由 石九流 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
原文链接:https://blog.computsystmed.com/archives/translation-wgcna-interfacing-network-analysis-with-other-data-such-as-functional-annotation-and-gene-ontology
最后更新:2019-05-26 21:39:33
Update your browser to view this website correctly. Update my browser now