标签归档:Enrichment

整合多组学数据的通路富集分析-ActivePathways

我是在这篇文章(Integrative pathway enrichment analysis of multivariate omics data
)中遇到的合并多个p-value的操作。这篇文章是今年发表在NC上。所有的组学或者大规模的数据分析,都需要探索数据背后相关的生物学功能,所以通路富集分析非常普遍。通常的做法是基于单一组学、单一数据集的数据进行分析,随着生物学数据的爆发,大规模多组学数据变得普遍,这篇文章介绍了基于整合的多组学或多数据集的数据进行通路分析的工具ActivePathways。

/wp/f4w/2020/2020-09-12-ActivePathways-1.png

方法

ActivePathways的方法,如下图:
(a) 需要的输入文件
(1) 基于多组学数据集的基因P-value,传统的富集分析是单组学,只有一列,现在是多组学,对应多列P-value
(2) 基因集,这个和其他的通路富集分析一样,用来表示生物学过程和通路

(b)
(1), 用Brown method合并基因的P-values,并且排序,用一个宽松的阈值来过滤检阳性的基因。
(2), 对每个通路,用排序的基因(从第一个开始从少到多作为sub-list)进行超几何检验,并找到最优的sub-list长度。
(3), 基因单一组学的数据进行富集分析,找到支持每个通路的证据。

(c) ActivePathways 提供整合之后的富集分析结果,相关的Brown P-value,支持通路的证据。还可以在Cytoscape中画Enrichmentmap的图,来分析更广泛的生物学主题。点为通路,边表示有共有基因。

/wp/f4w/2020/2020-09-12-ActivePathways-2.png

例子

自然发到了NC这种水平的期刊上,出了豪华的团队外,ActivePathways一定有很厉害的功能才行。这篇文章提了好几个case study,我挑了一个,稍微讲一下,如下图。

昨天分析了乳腺癌中与预后相关的通路和过程,其中整合了三种数据集,TC(Tumor cell mRNA),TAC(Tumor adjacent cell mRNA)和CNA(拷贝数变异),这里也挺有意思,把TAC也纳入到P-values的矩阵中,并不是三个组学。

(a) Enrichment map,其中蓝色的表示仅由整合数据发现的通路,比如凋亡等,显示出其强大的功能。
(b) 乳腺癌Basel和HER2亚型中,与预后相关的免疫基因的Hazard Ratio(HR),显示出两种亚型间不同的免疫pattern。
(c) HER2亚型中,与预后相关的基因(凋亡过程负调控)在每个数据集上的P-value和整合后的Brown P-value。其中DUSP1在三个数据集中都非常显著,如果作者聚焦到了这个基因。
(d) 这个基因在肿瘤细胞mRNA,癌旁细胞mRNA和拷贝数变异三种数据集中,分成high和low两组,做生存分析,可以发现DUSP1低表达,预后显著好于高表达,以此证明ActivePathway的强大。

/wp/f4w/2020/2020-09-12-ActivePathways-3.png

ActivePaths的下载地址:https://github.com/reimandlab/ActivePathways。为一个R包,整理好P-values的数据框之后,一步命令即可分析,此外结果还可以在Cytoscape上用Enrichment map展示。

# scores是P-values的数据框,GMT是基因集
ActivePathways(scores, fname_GMT) 

参考

https://www.nature.com/articles/s41467-019-13983-9

#####################################################################
#版权所有 转载请告知 版权归作者所有 如有侵权 一经发现 必将追究其法律责任
#Author: Jason
#####################################################################

topGO包进行-GO富集分析-做有向无环图

GOdata = new(“topGOdata”, ontology = “MF”, allGenes = geneList,annot = annFUN.gene2GO, gene2GO = geneID2GO)

利用topGO进行分析,最重要的是构建topGO对象,构建topGO需要两个参数:

1,topGO需要基因和GO号的对应关系

2,基因列表,用来标记背景基因(所有基因)及差异基因

一,获取ensembl和GO号的对应关系: geneID2GO

如果你有现成的gene id和go id的对应关系,文件格式为

gene_ID制表符GO_ID1, GO_ID2, GO_ID3, ...

每行,则可以利用readMappings读取该文件(topGO包里面的函数)。

而我有一个cuffdiff的结果文件gene_exp.diff,用的是ensembl的注释GFF文件。首先需要获得ensembl和GO的对应关系,这里利用biomaRt包(前面的文章中有讲,这里不详细介绍)。

library(biomaRt)
genes = useEnsembl(biomart="ensembl",dataset="hsapiens_gene_ensembl")
# 得到go信息和gene
gene2goInfo <- getBM(attributes=c('ensembl_gene_id','go_id','entrezgene','name_1006','go_linkage_type','namespace_1003'), mart = genes)
# 过滤
gene2goInfo=gene2goInfo[gene2goInfo$go_id != "", ]
# 上述是一个gene对应一个go id,需要合并为一个gene对应多个go id,利用by函数(神器)
geneID2GO = by(gene2goInfo$go_id, gene2goInfo$ensembl_gene_id, function(x) as.character(x))

geneID2GO是符合topGO要求的,gene2goInfo和geneID2GO的格式如下

> head(gene2goInfo)
  ensembl_gene_id      go_id entrezgene                         name_1006
3 ENSG00000281614 GO:0005886       3635                   plasma membrane
4 ENSG00000281614 GO:0005829       3635                           cytosol
5 ENSG00000281614 GO:0005515       3635                   protein binding
6 ENSG00000281614 GO:0007165       3635               signal transduction
7 ENSG00000281614 GO:0005856       3635                      cytoskeleton
8 ENSG00000281614 GO:0050852       3635 T cell receptor signaling pathway
  go_linkage_type     namespace_1003
3             IEA cellular_component
4             TAS cellular_component
5             IPI molecular_function
6             TAS biological_process
7             IEA cellular_component
8             TAS biological_process

> head(geneID2GO)
$ENSG00000000003
[1] "GO:0004871" "GO:0005515" "GO:0005887" "GO:0070062" "GO:0007166"
[6] "GO:0043123" "GO:0039532" "GO:1901223"

$ENSG00000000005
[1] "GO:0016021" "GO:0005737" "GO:0005515" "GO:0005635" "GO:0016525"
[6] "GO:0001886" "GO:0001937" "GO:0071773" "GO:0035990"

二,构建基因列表:geneList

diff=read.table("./gene_exp.diff",sep="t",header=TRUE)
# 差异表达基因
interesting_genes=factor(diff[diff$significant=="yes",]$gene_id)
# 所有基因
all_genes <- diff$gene_id
# 构建基因列表
geneList <- factor(as.integer (all_genes %in% interesting_genes))
names(geneList)=all_genes

三,构建topGO对象

source("https://bioconductor.org/biocLite.R")
chooseBioCmirror()
biocLite("topGO")
biocLite("org.Hs.eg.db")
biocLite("GO.db")
biocLite("Rgraphviz")
library(topGO)

GOdata <- new("topGOdata", ontology = "MF", allGenes = geneList,annot = annFUN.gene2GO, gene2GO = geneID2GO)

Building most specific GOs …..
( 3893 GO terms found. )

Build GO DAG topology ……….
( 4356 GO terms and 5490 relations. )

Annotating nodes ……………
( 16722 genes annotated to the GO terms. )

四,基因富集分析

Fisher检验,通过2*2的列联表的进行计算。当然还有其他检验,比如KS,KS.elim。

—————-非差异表达基因—差异表达基因
注释到A通路——– 20 ———– 50
没有注释到A通路—- 1870 ——— 80

resultFisher <- runTest(GOdata, algorithm = "classic", statistic = "fisher")
allRes <- GenTable(GOdata,classicFisher = resultFisher, orderBy = "classicFisher", topNodes = 10)

根据orderBy的参数对象进行排序,得到结果如下

GO.ID Term Annotated Significant
1 GO:0032794 GTPase activating protein binding 14 2
2 GO:0015278 calcium-release channel activity 16 2
3 GO:0099604 ligand-gated calcium channel activity 16 2
4 GO:0005527 macrolide binding 19 2
5 GO:0005528 FK506 binding 19 2
6 GO:0001225 RNA polymerase II transcription coactiva… 1 1

Expected classicFisher
1 0.05 0.0012
2 0.06 0.0016
3 0.06 0.0016
4 0.07 0.0023
5 0.07 0.0023
6 0.00 0.0038

五,生成有向无环图(directed acycline praph,DAG)

svg("go.dag.svg")
showSigOfNodes(GOdata, score(resultFisher), firstSigNodes = 5, useInfo = 'all')
dev.off()

继续阅读