参考

EggNOG

GO分析学习笔记

xuzhougeng | 基因表达分析(中)- 富集分析转录组入门(8): 富集分析

xuzhougeng | 功能注释后如何做富集分析

使用clusterProfiler对非模式植物进行注释

勘误-一文掌握转录因子的富集分析(更详细)

应该是最好的eggnog-mapper功能注释教程利用pep序列构建OrgDb进行富集分析(1)

1. EggNOG 注释

  1. $ mkdir enrich_analysis
  2. $ cd enrich_analysis
  3. $ python3 ~/bin/software/eggnog-mapper/emapper.py -i ../Arabidopsis_thaliana.pep.fa --cpu 20 -m diamond -o pep.diamond --output_dir .
  4. $ ls -lh
  5. total 26M
  6. -rw-rw-r-- 1 shwzhao shwzhao 18M Jul 15 20:01 pep.diamond.emapper.annotations
  7. -rw-rw-r-- 1 shwzhao shwzhao 6.3M Jul 15 19:59 pep.diamond.emapper.hits
  8. -rw-rw-r-- 1 shwzhao shwzhao 1.8M Jul 15 20:00 pep.diamond.emapper.seed_orthologs

2. go-basic.obo 下载

处理生成 go.tb

  1. $ wget -c http://snapshot.geneontology.org/ontology/go-basic.obo
  2. $ du -sh go-basic.obo
  3. 30M go-basic.obo
  4. $ awk -F ": " 'BEGIN{print "GO\tDescription\tlevel"}{if($0~/\[Term\]/)term=NR;if(NR==term+1)id=$2;if(NR==term+2)name[id]=$2;if(NR==term+3)namespace[id]=$2}END{for(i in name)print i"\t"name[i]"\t"namespace[i]}' go-basic.obo > go.tb

3. enricher()

  1. # 加载R包
  2. library(tidyverse)
  3. library(clusterProfiler, lib = "/home/zcli/R/x86_64-pc-linux-gnu-library/4.0/")
  4. # 文件准备,解析 eggnog 结果,联合 go.tb
  5. emapper <- read_tsv("pep.diamond.emapper.annotations", comment = "##") %>% rename(query = "#query")
  6. # 读取时去掉`##`开头的行,而`#query`开头的行作为表头
  7. GOinfo <- read_tsv("go.tb")
  8. GOannotation <- emapper %>%
  9. dplyr::select(GID = query, GO = GOs) %>%
  10. dplyr::filter(GO != "-") %>%
  11. separate_rows(GO, sep = ",") %>%
  12. left_join(GOinfo, by = "GO") %>%
  13. dplyr::select(-Description)
  14. GOannotation <- split(GOannotation, GOannotation$level)
  • 提取自己的genelist(注意是一个 vector),然后用 enricher() 富集
  1. TF <- read_tsv("Arabidopsis_thaliana.TF.txt", col_names = F)
  2. genelist <- TF %>%
  3. head(1000) %>%
  4. .$X1
  5. enrich <- enricher(genelist,
  6. TERM2GENE = GOannotation[['molecular_function']][c(2,1)],
  7. TERM2NAME = GOinfo[1:2])

4. 绘图

我的建议是 as.data.frame()as_tibble() 后用 ggplot 画。
目前还不知道怎么用网络的形式呈现富集结果。

  1. pdf("dotplot.pdf")
  2. barplot(enrich)
  3. dotplot(enrich)
  4. # 注意有时需要调整字体:font.size
  5. dev.off()