什么是富集分析?
当我们获得了一批生物数据时,例如转录组的数据,蛋白质组的数据,其中必然要做不同样本之间的差异基因分析这一步,例如空白对照组与实验组的差异基因或蛋白分析。在得到差异的基因或蛋白列表后,这个时候可能还会遇到一个问题,差异基因可能有很多,有几十个到上百个不等,如何对它们进行比较呢?这几十甚至上百差异基因或蛋白如何去呈现,这是一个问题,如果直接列张表,把所有的差异基因都放进去这样不合适,因为不直观,不方便分析。
此时我们就需要把这些差异基因进行注释,把这些基因或蛋白分成几大类(一个类别就相当于一个GO term),此时看这几大类的区别,肯定比看几十甚至上百个基因或蛋白的差异要更加直观,分析的难度也会降低,这个过程就是富集分析,富集分析属于差异基因的下游分析,常用的富集分析方法有GO分析,KEGG分析,GSEA分析等。
富集分析涉及到两个概念,前景基因和背景基因(不同的教程使用的术语不一样,总之看具体的含义)。前景基因就是你关注的要重点研究的基因集,背景基因就是所有的基因集。比如做两个样本对照组和处理组的转录组测序,前景基因就是对照组vs处理组的差异基因,背景基因就是这两组样本的所有表达基因。
富集分析的例子
再打个比方,我想知道与整个广东省相比,深圳市的大学生是不是显著更多(“大学生”就相当于深圳市民的其中一个GO term)。那么前景就是深圳市的人口,背景就是广东省的人口,每个个体都会有一个标签(如大学生、中学生、小学生等)。 富集的意思就是,某个GO term在所关注的前景基因集中占的比例要显著高于在所有背景基因集中所占的比例。比如上面的例子,深圳市大学生显著富集,意思就是深圳市本科毕业的人口所占深圳市总人口的比例显著高于广东省本科毕业人口在广东省总人口中所占的比例,例如我们要计算的就是10%与2%相比是否有显著性,如下所示:
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">mark</figcaption>
这个显著性是如何计算的呢,就是利用超几何分布来计算出来的。
什么是GO,什么又是GO分析
GO的全称是Gene Ontology,中文意思是基因本体论
。GO的出现主要是源于生物研究的复杂性以及生物研究规模的日益扩大,为了对基因的产物进行统一的描述,就需要使用当前储备的知识,以计算机为工具对这些生物研究进行描述,这就是GO项同出现的背景,GO提供了对基因功能与基因产物最为全面的描述。GO知识库主要由两个内容构成:
GO terms,它提供生物过程的逻辑结构与相关关系,不同GO terms之间的关系可以通过一个有向无环图来表示。这是由基因本体联合会(Gene Ontology Consortium,GOC) 负责的,GO是一个国际标准化的基因功能分类体系,提供了一套动态并可控的词汇表(controlled vocabulary)来全面描述生物体中基因和基因产物的属性,它由一组预先定义好的GO术语(GO term)组成,这组术语对基因产物的功能进行限定和描述。此处需要注意的是,GO terms是对基因的产物,而不是基因本身进行描述,因为基因本身的产物有时候不止一种。GO数据库中的GO分类相关信息会得到不断地更新与增加,这个特点要记住,因为不同的GO分析工具使用的数据库版本有可能不一样,造成GO分析结果出现不同,例如以前Y叔就写过这样的文章《SCIENCE文章用了DAVID被吐槽》。
GO注释(GO annotations)库,它主要是为GO terms提供注释,也就是描述这个GO terms有什么功能(例如某些基因的产物是什么,是蛋白质,还是非编码RNA,还是大分子等)。
总之,通过ontology和注释能够对生物系统提供一个广泛的描述。目前,GO知识库(GO knowledgebase)包含源于14万篇论文中的实验验证,它代表了60万个有实验支持的GO注释。这些核心知识库中还含有另外600万个推断而来的GO注释。除了核心知识库外,GOC还提供了能够编辑并推断ontology之间逻辑关系的软件,分析工具等,GO中的注释来源,通用不同的代码进行了区分,如下所示。
GO中的基因注释证据代码
一个GO注释由一个与GO term相关的特定参考和基因产物构成,GO注释的来源各异,下表就说明了GO注释的各种来源代码,其中*
部分表示证据来源可靠性比较高
缩写 | 证据代码 | 例子 |
---|---|---|
IC,Inferred by curator | 由专家推测得到 | 推测它定位在细胞核中一个蛋白质如果有“转录因子”的功能注释,专家就可以 |
*IDA,Inferred from direct assay | 有直接实验证据 | 如酶活化实验(针对“分子功能”),免疫荧光显微镜(针对“细胞组分”) |
IEA,Inferred from electronic annotation | 有电子注释 | 基于像BLAST这些搜索软件搜索结果的电子注释(与ISS比较,IEA没有被专家证实) |
*IEP,Inferred from expression pattern | 有表达模式方面的证据 | 转录水平(如Nothern Bloting或微阵列实验结果)或蛋白质表达水平(Western blots实验结果) |
*IGI,Inferred from genetic interaction | 有遗传相互作用方面的证据 | 抑制基因;遗传致死基因;互补试验;还有其他一些可以提供某一基因功能信息的实验 |
*IMP,Inferred from mutant phenotype | 由突变表型推测得到 | 基因突变;基因敲出;过量表达;反义RNA实验 |
*IPI,Inferred from physical interaction | 由物理相互作用推测得到 | 酵母双杂交实验;共纯化实验;免疫共沉淀实验;结合实验 |
ISS,Inferred from sequence or structural similarity | 由序列或结构的相似性得到 | 序列的相似性;结构域;被专家确认的BLAST软件的搜索结果 |
NAS,Non-traceable author statement | 有报道,但报道信息来源不可知 | 数据库(如SwissPort数据库)登录条目的记录中没有引用已发表的文献 |
ND,No biological data | 没有相关的生物数据 | 对应于“unknown”的分子功能、细胞过程或细胞组分 |
TAS,Traceable author statement | 有报道,且可知报道信息来源 | 有一些综述文章或字典中可以找到相关信息 |
为什么要做GO分析
GO主要用于解决一些组学实验(omics)中大量分子变化的研究问题。一个典型的组学实验会检测数以千计的分子,因此对于这些变化的分子进行解释非常困难(例如一个肿瘤细胞与一个正常细胞之间的差异)。而GO富集分析(GO Enrichment Analysis)就能把这些数以千计的分子(例如蛋白质或一些非编码RNA)根据其功能的相似性放到不同的类别中,然后对它们进行分析,这样就在很大的程度上降低了分析的难度。GO分析比较的就是两组差异基因,例如实验组与对照组的差异基因,存在在某个通路中的比例是否有差异,其统计学基因就是超几何分布。
GO分析的统计学基础
GO分析的统计学基础就是超几何分布,超几何的相关知识在笔记的最后,就是对每个GO term计算一个P值,公式如下所示:
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">mark</figcaption>
N表示总基因数;
n表示N中差异表达基因的总数;
M表示N中属于某个GO term的基因个数;
k表示n中属于某个GO term的基因个数。
这个公式表示的意思是,从总的N个基因中挑出n个基因,作为分母(这是背景基因),分子则是M个基因(我们的差异基因,这是前景基因),有k个落在了某通路里,有n-k个不落在了某通路里,然后使用超几何分布来对它们进行计算,即前景基因落在某通路的比例是否高于背景基因在这一通路的比例,实际计算时,是算的odds ratio的差异。
现在举个例子,在GO分析的结果表格中,会出现以下信息:
Background Frequency,背景基因频数,指的是在整个背景基因集中,注释到一个GO term中的基因数目。
Sample Frequency,样本基因频数(有的也叫前景基因频数,总之,就是你要研究的一批基因)指的是,在你研究的基因列表中,注释到这个GO term(与Background Frequency的GO term相同的这个GO term)的基因数目。例如,我们在研究酿酒酵母(S. cerevisiae)的生物过程(biological process)时,这个物种的背景基因是6442个基因,例如我们要研究的目的基因有10个,其中有5个基因被注释到了一个这样的GO term上,这个GO term是:DNA修复(DNA repair),然后样本中的DNA修复的基因频率就是5/10,如果在酿酒酵母(S. cerevisiae)的整个基因组中,只有100个基因注释到了DNA修复的这个GO term上,那么背景基因的频率就是100/6442。GO分析就是利用超几何分布(或Fisher精确检验)来比较一下5/10和100/6442有没有统计学差异,GO分析结果的表格中会列出这个计算结果的P值。
P-value,
GO term的查询
浏览GO term经常有使用到两个工具,分别是AmiGO(GO Central )和QuickGO(EBI-GOA )。
AmiGO的GO注释文件(GAF,GO Annotation File)与基因是1对1的关系。QuickGO中的GO注释文件是GOA(Gene Ontology Annotation),它主要用于注释蛋白质,而一个基因有时候会产生有几个蛋白质(因为有异构体的情况,isoform)。
GO对基因的描述
一个GO term的编号是由两部分构成,第一个部分相同,都是GO
,第二部分是一个唯一的数字标记,它是以0开头的7位数字,例如GO:0005125
,其中数字部分并没有任何任何生物学方面的意义,它仅起到一个标记的作用。除了这个名称外,GO term还有一些文本,来作用GO term的名称,比如 "cell"
, "fibroblast growth factor receptor binding"
,或者"signal transduction"
,如下所示(由AmiGO 2查询而来):
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">mark</figcaption>
GO term按照分类,一共三个ontology(本体),分别描述基因的分子功能(molecular function,MF)、细胞组分(cellular component,CC)、参与的生物过程(biological process,BP)。G这三个本体的含义如下所示:
细胞组成(cellular component,CC):一般用来描述基因产物的发挥作用的位置,比如一个蛋白可能定位在细胞核中,也可能定位在核糖体中;
生物过程(biological process,BP):描述的是指基因产物所联系的一个大的生物功能,或者说是它们要完成的一个大的生物目标,例如有丝分裂或嘌呤代谢;
分子功能(Molecular Function,MF):主要是指基因产物分子所执行的任务,例如一个蛋白质可能一个转录因子或是一个载体蛋白。
蛋白质或者基因可以通过ID对应
或者序列注释
的方法找到与之对应的GO号,而GO号可应用到到相应的GO Term,即功能类别或者细胞定位,ID对应
我的理解就是根据基因的EntrezID或SYMBOL等,将这个基因与相应的GO term对应起来,序列注释
则是通过将某段序列与数据库中的序列进行比对,然后将这段序列与GO term对应起来,这个过程也就是将基因的产物与相应的GO term对应起来,也就是注释过程。
在一个GO注释中,例如,一个基因的产物是细胞色素c(cytochrome c),那么这个基因的产物就会被一个分子功能术语(Molecular Function)描述为氧化还原酶活性(oxidoreductase activity ),被生物过程(Biological Process)描述为氧化磷酸化(oxidative phosphorylation ),被细胞成分(Cellular Component )描述为线性体基质(mitochondrial matrix )和线粒体内膜(mitochondrial inner membrane )。
再举个例子,对于一个基因或蛋白来说,最终一个基因的产物会被多个GO术语进行注释(反之亦然,一个GO术语中也可以注释多个基因的产物),形成的GO分析描述就是这个样子的:HOTAIR出没于胞核(CC),参与了组蛋白甲基化调控引发癌基因沉默(BP),具体是结合PRC2复合物以及LSD1(MF)。这样GO分析就从某个基因或蛋白在细胞中的定位,功能,参与的生物途径等方面对这个基因或蛋白进行了标准化的描述,即对基因产物进行了简单的注释,通过GO富集分析可以了解差异基因富集在哪些生物学功能、途径或细胞定位。
GO term的结构
所有的GO terms之间都存在着相互关系,它们的关系可以用有向无环图(DAG,Directed Acyclic Graph)来说明,DAG图就能够明确地表示出不同GO term之间的关系,它们之间的关系有很多种,例如is_a
,part_of
,regulates
,has part
, negatively regulates
和positively regulates
。除了根节点(例如CC,BP,MF这些节点)外,其余的GO terms都与其它的GO terms都有一定的亚类关系,例如GO:0015758
(葡萄糖运输,glucose transport)is a GO:0015749
单糖转运(monosaccharide transport)的一个亚类。其他的关系还有GO:0031966
: mitochondrial membrane part of
GO:0005740
: mitochondrial envelope, GO:0006916
: anti-apoptosis regulates
GO:0012501
: programmed cell death。
一个典型的GO term内容如下所示(通过QuickGO查询):
AccessionGO:0005515Nameprotein bindingOntologymolecular_functionSynonymsprotein amino acid binding, glycoprotein bindingAlternate IDsGO:0045308, GO:0001948DefinitionInteracting selectively and non-covalently with any protein or protein complex (a complex of two or more proteins that may include other nonprotein molecules). Source: GOC:go_curatorsCommentNoneHistorySee term history for GO:0005515 at QuickGOSubsetgoslim_metagenomicsgoslim_aspergillusgoslim_chemblgoslim_plantgosubset_prokgoslim_candidagoslim_pir
这些就是一个GO term的内容,GO就是为了对基因以及基因的产物进行统一注释说明而形成的一套标准,这些注释说明来自称为ontology的一套词汇。此外,GO terms中还存在着一些次要IDs(secondary IDs),这些次要IDs也叫替代ID,即Alternate ID,它指的是一个GO term,当有两个或更多的GO terms是同样的含义时,就需要使用到二级IDs,此时可以把它们合并为一个GO term。
有向无环图说明
GO terms的结构是一个有向无环图,每个GO term是一个节点,它们之间的关系用这些节点之间的箭头来表示。GO分析是一个松散的层次结构,其子GO term比父GO term更具体,不过与严格的层次结构不同,一个GO term也许有不止一个父GO term,比如biological process term "hexose biosynthesis" 有两个parents,它们分别是 "hexose metabolism"和"monosaccharide biosynthesis",这是因为生物合成是代谢的一种,而己糖又是单糖的一种。
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">mark</figcaption>
上图是色素沉着的一系列GO term,在这张图形里,不同GO terms之间的关系用标了颜色的箭头来表示,每个箭头中间的字母就是关系类型。箭头指向的方向,是分类更加精细的方向,图表项部的节点就是细胞成分(CC),生物学过程(BP)与分子功能(MF),这三个节点没有共同的父节点,每个都是一个根节点,因此GO是三本原系统,不过在一些GO分析工具中会做出一个虚拟的根节点,把这三个节点都指向这个虚拟根节点。这三个节点之间不存在is_a
关系,但是,这三个本体之间可能存在着其它的关系,例如part_of
和regulates
,例如,分子功能(MF)的GO term“细胞周期蛋白依赖性蛋白激酶活性”(cyclin-dependent protein kinase activity)与生物学过程(BP)term的“细胞周期(cell cycle)”之间的关系是part_of
。
不同的term之间的关系
不同的GO term之间的关系有很多种,例如is
,part of
等,并且不同的关系还能组合,衍生出不同GO terms之间的关系,这里只列举几个说明一下。
is关系
不同GO terms之间的关系使用箭头来表示,实心箭头表示了它们的直接关系,虚线表示了对于它们的关系的推测,如下所示:
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">mark</figcaption>
A,B,C是上述关系,那么我们就能推测出A是C的一部分。
在GO的关系图中,一个节点有可能有不止一个子节点(child node),也有可能不止有一个父节点(parent node),例如一个节点A与节点B的关系是a part of
的关系,它与节点C的关系就有可能是is a
的关系,如下所示:
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">mark</figcaption>
在上面的这张图中我们可以发现,线粒体(mitochondrion)有两个父节点,分别为细胞质(cytoplasm)和细胞器(organelle),它是细胞质的一部分(关系为part of
),它是一个细胞器(关系为is
)。而细胞器(organelle)这个节点有2个子节点(children nodes),分别为线粒体(mitochondrion)和细胞器膜(organelle membrane),与它们的关系分别为is
和part of
。
GO关系的基础是is
关系,如果我们说Ais
a B,那么我们所表示的含义就是A节点是B节点的一个亚类(subtype)。例如,有丝细胞分裂周期(mitotic cell cycle)is
a 细胞周期(cell cycle)或者裂解酶活性(lyase activity)is
a 催化活性(catalytic activity),它所表示的意思是就是有丝分裂周期
是细胞周期
的一个亚类,裂解酶活性
是催化活性
的一个亚类。
这里的is
不是指一个“实例(instance)”,从本体论的角度来看,一个“实例”专门指的是某个抽象分类的一个具体事物,例如,猫是一种动物,这里猫与动物的关系,就是GO中的is
关系,而加菲猫(这里专门指的动画片中的那只猫)是猫的一个具体事物,不是猫的一个亚类,这里加菲猫与猫的关系就不等于GO中的is
这个关系。GO中并不使用具体的实例,GO terms指的是一类现象或一类事物,是一种抽象的概念,例如我们知道了猫是(is
)一类动物,那么我们就可以说猫的每个实例都是动物。
is关系的推理
is这种关系是可以传递(transitive),如果我们说Ais
a B,Bis
a C,那么我们就能推断出Ais
a C,如下所示:
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">mark</figcaption>
举个例子,如下所示:
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">mark</figcaption>
在这张图中,线粒体(mitochondrion)is
a 细胞内细胞器( intracellular organelle ),细胞内细胞器( intracellular organelle )is
a细胞器(organelle 0,因此我们可以推断出,线粒体是一个细胞器,用逻辑符号表示就是*is a∘ *is a* → is a
。
用is
可以对注释进行分组,例如。如果一个基因的产物是X,那它被注释为有酪氨酸激酶活性,这个GO就可以记录它为酪氨酸激酶活性is
a(type of)激酶活性,然后我们就可以下结论,认为基因产物X有激酶活性。
part of关系
part of
在GO中用于表示整体与部分的关系,如果B是A的必要组成部分,那么B存在的地方,A必定存在。但是,如果A存在,我们不能说B也存在。它们的关系如下所示:
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">mark</figcaption>
上图:整个B是A的组成部分,而A的一部分则含有B。
下图:复制叉(Replication fork)是染色体的必要组成(necessarily part of),所有(all)的复制叉是一些染色体的部分(part of),但是(some)染色体只有一有部分(have part)含有复制叉。
part of
的推断:part of∘ part of → part of
与is
这种关系一样,part of
这种关系也能传递,如果Apart of
Bpart C
,那么A part C
,如下所示:
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">mark</figcaption>
举个例子,如下所示:
<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">mark</figcaption>
线粒体(mitochondrion)是细胞质(cytoplasm )的part of
,而细胞质(cytoplasm )是细胞(cell)的part of
,那么我们就可以说,线粒体是细胞的part of
。GO中还有很多关系,由于篇幅问题,就略去了,具体的可以查看官网(http://geneontology.org/page/ontology-relations)。
GO分析的思路
现在了解了GO分析的一些原理之后,我们自己就大概就明白了需要做哪些事情。
第一件事情就是我们要把差异基因与相应的GO terms对应起来;
第二件事情就是需要找到前景基因(也就是差异基因)与背景基因;
第三件事情就是,将对应起来的GO terms进行比较,也就是利用超几何检验,这些差异基因在某个通路中的比例是否要高于背景基因;
第四件事情就是绘图,也就是文献中经常出现的GO条形图。