探索一下go数据库的层次分级情况

学术   2024-10-22 18:00   广东  

老学员在以前的交流群里面提问说go数据库的注释结果希望可以分层次展示,如下所示:

分层次展示

关于Gene Ontology (GO) 数据库

Gene Ontology (GO) 数据库是一个广泛使用的生物信息学资源,它提供了一个标准化的词汇表来描述基因和蛋白质的属性。GO 数据库主要分为三个主要的本体(ontology):

  1. 分子功能(Molecular Function, MF):描述单个基因产物(如蛋白质和RNA)或其复合物在分子水平上的活动,例如“催化活性”或“转运活性”。

  2. 细胞组分(Cellular Component, CC):描述基因产物在细胞内的位置,如线粒体、核糖体等。

  3. 生物过程(Biological Process, BP):涉及多个分子活动的生物学过程,如DNA修复或信号转导。

每个GO本体都是一个有向无环图(DAG),其中术语(terms)作为节点,术语之间的关系(如“is a”、“part of”、“regulates”等)作为边。这些关系定义了术语之间的层次结构和连接。

在GO数据库中,每个术语都有一个唯一的标识符(GO ID),并且可以有多个层次的分类。例如,一个基因产物可能在分子功能中被归类为“氧化还原酶活性”,在细胞组分中被归类为“线粒体基质”,在生物过程中被归类为“氧化磷酸化”。

GO数据库的层级结构允许用户探索不同级别的术语,从而理解基因产物在不同生物学层面上的作用。术语之间的层级关系可以是直接的,也可以通过中间术语进行传递。例如,如果一个术语是另一个术语的子类(通过“is a”关系),或者是一个更大结构的一部分(通过“part of”关系),那么它们之间就存在层级关系。

此外,GO数据库还提供了一些工具和指南,用于管理和分析GO注释,包括用于检索、浏览、搜索、可视化和下载本体和注释的工具。通过这些资源,研究人员可以更深入地了解基因产物的功能,并在各种生物学研究中应用这些信息。

GO.db 是一个在 Bioconductor 上可用的 R 包

它存储了 Gene Ontology(GO)的信息。这个包提供了一个方便的方式来访问和使用 GO 数据库中的信息。以下是 go.db 包中的一些关键信息和功能:

  1. 数据结构go.db 包是一个 AnnotationDb 类型的对象,它包含了多个数据表,每个表都包含了不同类型的 GO 信息。这些表可以通过 keytypes()columns() 函数来查看 。

  2. 关键类型(Keytypes)go.db 提供了几种关键类型,包括 "DEFINITION"、"GOID"、"ONTOLOGY" 和 "TERM"。这些关键类型允许用户通过不同的方式访问数据库中的条目 。

  3. 列(Columns):包中的每个数据表都有多个列,包含了如定义(DEFINITION)、GO编号(GOID)、所属本体(ONTOLOGY)和术语(TERM)等信息 。

  4. 访问数据:可以使用 keys() 函数获取特定关键类型的所有键(例如 GO 编号),然后使用 select() 函数来检索与这些键相关的数据 。

  5. 查询操作select() 函数允许用户执行类似 SQL 中的 select 操作,通过指定键和列来查询数据。例如,可以查询特定 GO 编号的定义、术语和所属本体 。

  6. 其他信息go.db 包还提供了其他有用的信息,如 GO 术语的祖先和后代关系,可以通过 ls() 函数查看包中所有可用的对象 。

  7. 使用示例

    library(GO.db)
    keytypes(GO.db)  # 查看关键类型
    columns(GO.db)   # 查看列
    keys(GO.db, keytype = "GOID")  # 获取所有 GO 编号
    select(GO.db, keys = "GO:0000001", columns = c("TERM""ONTOLOGY"))  # 查询特定 GO 编号的信息

go.db 包是生物信息学分析中的重要工具,特别是在进行基因功能注释和富集分析时。通过这个包,研究人员可以方便地访问和利用 GO 数据库中的信息 。

有向无环图(DAG)的重点就是父节点和子节点

在R中使用GO.db包可以方便地获取每个GO条目的父节点和子节点信息。GO.db包提供了多种函数来查询GO术语之间的关系。以下是一些基本的使用方法:

  1. 获取所有父节点信息:使用GOBPANCESTOR(对于生物过程)、GOMFANCESTOR(对于分子功能)和GOCCANCESTOR(对于细胞组分)可以获取给定GO ID的所有父节点信息。例如,获取特定GO ID的父节点:

    library(GO.db)
    ancestor <- as.list(GOBPANCESTOR)
    ancestor_info <- ancestor[["GO:0001580"]]  # 使用具体的GO ID替换
  2. 获取上一级父节点信息:使用GOBPPARENTS(对于生物过程)、GOMFPARENTS(对于分子功能)和GOCCPARENTS(对于细胞组分)可以获取给定GO ID的直接父节点信息。例如:

    parent_info <- GOBPPARENTS["GO:0001580"]
  3. 获取所有子节点信息:使用GOBPOFFSPRING(对于生物过程)、GOMFOFFSPRING(对于分子功能)和GOCCOFFSPRING(对于细胞组分)可以获取给定GO ID的所有子节点信息。例如:

    offspring_info <- GOBPOFFSPRING["GO:0001580"]
  4. 获取下一级子节点信息:使用GOBPCHILDREN(对于生物过程)、GOMFCHILDREN(对于分子功能)和GOCCCHILDREN(对于细胞组分)可以获取给定GO ID的直接子节点信息。例如:

    children_info <- GOBPCHILDREN["GO:0001580"]
  5. 查看某个GO ID的详细信息:可以直接查看特定GO ID的详细信息,包括定义、所属本体等。例如:

    term_info <- GOTERM["GO:0001580"]

这些函数可以帮助你构建GO术语的层级结构,并进行各种分析,如GO富集分析等。更多详细信息和高级功能,可以参考GO.db的官方文档和教程 。

只有一个父节点的就是第二层次的GO条目

很简单的代码,因为  cellular process   ,是biological_process的子集,而且就这一个父节点,所以前者就是我们需要的第二层次的GO条目:

library(GO.db)
> ancestor <- as.list(GOBPANCESTOR)
> ancestor[["GO:0008150"]] 
[1] "all"
> select(GO.db, keys = "GO:0008150",
+        columns = c("TERM""ONTOLOGY")) 
1 GO:0008150 biological_process       BP

> ancestor[["GO:0009987"]] 
[1] "GO:0008150" "all"       
> select(GO.db, keys = "GO:0009987",
+        columns = c("TERM""ONTOLOGY")) 
1 GO:0009987 cellular process       BP

很简单的代码遍历一下即可:

goids=keys(GO.db, keytype = "GOID")  # 获取所有 GO 编号 
go2 = do.call(rbind,
              lapply(goids, function(x){
                if(length(ancestor[[x]] )==2){
                  return(  select(GO.db, keys = x,
                                  columns = c("TERM")) )
                }
              }))
head(go2)

write.table(go2,file = 'tmp.txt',
            quote = F,row.names = F,col.names = F)

如下所示,在BP里面就18个第二层次的go的term :

GO:0000003 reproduction
GO:0002376 immune system process
GO:0008152 metabolic process
GO:0009987 cellular process
GO:0016032 viral process
GO:0032501 multicellular organismal process
GO:0032502 developmental process
GO:0040007 growth
GO:0040011 locomotion
GO:0042592 homeostatic process
GO:0043473 pigmentation
GO:0044419 biological process involved in interspecies interaction between organisms
GO:0044848 biological phase
GO:0048511 rhythmic process
GO:0050896 response to stimulus
GO:0051179 localization
GO:0051703 biological process involved in intraspecies interaction between organisms
GO:0065007 biological regulation

默认的富集分析结果只能说是控制显示多少个term,并不是多少层级:

library(clusterProfiler)
library(ggthemes)
library(org.Hs.eg.db)
data(geneList, package = "DOSE")
de <- names(geneList)[1:100]
yy <- enrichGO(de, 'org.Hs.eg.db', ont="BP", pvalueCutoff=0.01)
head(yy)
barplot(yy,showCategory = 30)

 

可以看到,多种层级的注释都有,仅仅是那个染色体分离,就有多种下面的 :

> yy@result$Description[grepl('segr',yy@result$Description)]
 [1"chromosome segregation"                                     
 [2"nuclear chromosome segregation"                             
 [3"sister chromatid segregation"                               
 [4"mitotic sister chromatid segregation"                       
 [5"regulation of chromosome segregation"                       
 [6"regulation of sister chromatid segregation"                 
 [7"regulation of mitotic sister chromatid segregation"         
 [8"negative regulation of sister chromatid segregation"        
 [9"negative regulation of mitotic sister chromatid segregation"
[10"negative regulation of chromosome segregation"              
[11"positive regulation of chromosome segregation"              
[12"meiotic chromosome segregation"                             
[13"homologous chromosome segregation"  

我们前面拿到了bp的18个儿子,所以如果大家仅仅是想展示第二层次,就不需要有上面的那么多条目:

> yy@result[yy@result$ID %in% go2$GOID,1:5]
                   ID      Description GeneRatio   BgRatio     pvalue
GO:0048511 GO:0048511 rhythmic process      4/99 296/18870 0.07044242
GO:0016032 GO:0016032    viral process      5/99 432/18870 0.07706179

但是,因为我们默认是超几何分布检验会卡阈值,所以很多父节点是不会被显示,如果一定要它们,就需要删除阈值:

yy <- enrichGO(de, 'org.Hs.eg.db', ont="BP",
               pvalueCutoff=0.999,qvalueCutoff = 0.999,maxGSSize = 20000)
dim(yy@result)
yy@result[yy@result$ID %in% go2$GOID,1:5]

如下所示,这些第二层次的go条目基因列表都很大 :

 

如果你也想做单细胞转录组数据分析,最好是有自己的计算机资源哦,比如我们的2024的共享服务器交个朋友福利价仍然是800,而且还需要有基本的生物信息学基础,也可以看看我们的生物信息学马拉松授课(买一得五) ,你的生物信息学入门课。而且下周六日我们在长沙线下授课哦:千呼万唤,让我们长沙线下约起

生信技能树
生物信息学学习资料分析,常见数据格式及公共数据库资料分享。常见分析软件及流程,基因检测及癌症相关动态。
 最新文章