基因组注释基础(Genome Annotation)¶
一句话说明:基因组注释就是在一条长 DNA 序列上"标记"出哪里是基因、基因有什么功能,是从原始序列到生物学解读的核心桥梁。
面试方向:宏基因组/细菌基因组/通用生信工程师 | 与 03_功能注释数据库互补,本篇聚焦注释方法、工具和流程
1. 什么是基因组注释(白话版)¶
类比:你拿到一本外语书(基因组序列),注释就是做两件事: 1. 结构注释:先把书里每个句子的位置标出来(哪里是基因、在哪一行开始、哪一行结束) 2. 功能注释:再翻译每个句子的意思(这个基因负责什么功能、参与什么代谢通路)
没有注释,基因组就只是一堆 ATCG 字母,面试官问"你拿到组装结果之后做什么",答案的第一步就是注释。
注释在整个分析流程中的位置¶
2. 结构注释 vs 功能注释¶
| 维度 | 结构注释 (Structural Annotation) | 功能注释 (Functional Annotation) |
|---|---|---|
| 目标 | 找出基因在哪里(位置、边界) | 找出基因干什么(功能、通路) |
| 白话 | "在哪一页、第几行有句子" | "这句话什么意思" |
| 输出 | GFF/GTF 文件(基因坐标) | 注释表格(GO/KEGG/COG 编号) |
| 方法 | ab initio 预测、同源比对、转录组证据 | 序列比对数据库、HMM 搜索、结构域扫描 |
| 原核 | Prodigal, GeneMark, Glimmer | eggNOG-mapper, Prokka 内置 |
| 真核 | Augustus, MAKER, BRAKER | InterProScan, Blast2GO |
| 难度 | 原核简单(无内含子),真核复杂 | 依赖数据库质量,新基因可能注释不到 |
面试核心区分点: - 原核基因组没有内含子(白话:句子是连续的,不像英文有括号插入语),所以结构注释相对简单 - 真核基因组有外显子-内含子结构(白话:句子被打散了,中间插了一堆废话),结构注释需要更复杂的算法
3. 结构注释工具详解¶
3.1 Prodigal(原核基因预测的标准工具)¶
- 全称:PROkaryotic DYnamic programming Gene-finding ALgorithm
- 最新版本:v2.6.3(GitHub: hyattpd/Prodigal)
- 适用对象:细菌、古菌基因组和宏基因组
- 核心算法:动态规划 + 机器学习,自动学习目标基因组的 GC 含量、RBS(核糖体结合位点)模式等特征
- 白话:它像一个"自学型翻译官",先读一遍你的基因组,自己学会这个物种的"语法规则",然后再标注所有基因
# ========== Prodigal 安装 ==========
conda install -c bioconda prodigal # conda 安装
# ========== 基本用法 ==========
# -i: 输入基因组 fasta 文件
# -o: 输出 GFF 格式的基因坐标文件
# -a: 输出预测的蛋白质氨基酸序列(用于后续功能注释)
# -d: 输出预测的核酸序列
# -p: 运行模式,single=单个基因组,meta=宏基因组
prodigal \
-i genome.fasta \ # 输入:组装好的基因组
-o genes.gff \ # 输出:基因坐标(GFF3格式)
-a proteins.faa \ # 输出:蛋白质序列(功能注释用)
-d genes.fna \ # 输出:基因核酸序列
-p single \ # 模式:single(单基因组)或 meta(宏基因组)
-f gff # 输出格式:gff
# 宏基因组模式(不能自学习,用通用模型)
prodigal -i contigs.fasta -o meta_genes.gff -a meta_proteins.faa -p meta -f gff
Prodigal vs Prodigal-gv:Prodigal-gv 是针对病毒基因组的改进版,可处理病毒特有的遗传密码。
3.2 GeneMark(商业/学术双重许可)¶
- 版本:GeneMark-ES/ET/EP+(真核),GeneMark.hmm(原核)
- 特点:使用隐马尔可夫模型(HMM),需要申请学术许可
- 适用:原核和真核都有对应版本
- 白话:和 Prodigal 类似的"自学型",但算法不同(用的是 HMM 而不是动态规划)
# GeneMark 需要先从官网申请 license key
# 原核基因组用法
gmhmmp -m GeneMark_hmm_combined.mod -o genes.lst genome.fasta
# 真核基因组自训练模式(GeneMark-ES)
gmes_petap.pl --ES --sequence genome.fasta
3.3 Augustus(真核基因预测的经典工具)¶
- 最新版本:v3.5.0(GitHub: Gaius-Augustus/Augustus)
- 适用对象:真核生物基因组
- 核心特点:支持多种物种预训练模型,可整合 RNA-seq 证据
- 白话:它像一个经验丰富的"翻译官",已经学过很多物种的语法,你告诉它"这个物种最像谁",它就用那套规则来找基因
# 安装
conda install -c bioconda augustus
# 查看已有物种模型
augustus --species=help
# 基本用法:指定最接近的物种模型
# --species: 选择最接近的已训练物种模型
# --gff3: 输出 GFF3 格式
augustus --species=human --gff3=on genome.fasta > augustus_genes.gff3
# 整合 RNA-seq 提示信息(hints)可以大幅提高准确率
augustus --species=human --hintsfile=hints.gff --extrinsicCfgFile=extrinsic.cfg genome.fasta > genes.gff3
3.4 MAKER(真核注释流水线)¶
- 全称:MAKER Genome Annotation Pipeline
- 适用对象:真核基因组的整合注释
- 核心特点:不是单个工具,而是整合 Augustus + GeneMark + BLAST + RNA-seq 的流水线
- 白话:它是一个"注释工厂",把多种预测工具的结果综合起来,取最优共识
# 安装(依赖多,推荐 conda)
conda install -c bioconda maker
# MAKER 三步走:
# 1. 生成控制文件
maker -CTL
# 会生成三个文件:
# maker_opts.ctl → 主要设置(输入文件、物种模型等)
# maker_bopts.ctl → BLAST 参数
# maker_exe.ctl → 外部程序路径
# 2. 编辑 maker_opts.ctl,设置输入文件
# genome=genome.fasta # 基因组文件
# est=transcripts.fasta # 转录组证据(EST/RNA-seq组装)
# protein=proteins.fasta # 同源蛋白证据
# augustus_species=human # Augustus 物种模型
# 3. 运行 MAKER
maker maker_opts.ctl maker_bopts.ctl maker_exe.ctl
结构注释工具选择决策树¶
你要注释什么类型的基因组?
├── 原核生物(细菌/古菌)
│ ├── 单个基因组 → Prodigal (-p single) 或 Prokka(一站式)
│ └── 宏基因组 contigs → Prodigal (-p meta)
├── 真核生物
│ ├── 有 RNA-seq 数据 → BRAKER2 或 MAKER + Augustus + hints
│ ├── 无 RNA-seq → Augustus(选近缘物种模型)+ GeneMark-ES
│ └── 复杂真核(大基因组)→ MAKER pipeline
└── 病毒 → Prodigal-gv 或 PHANOTATE
4. 功能注释工具详解¶
4.1 eggNOG-mapper(一站式功能注释利器)¶
- 最新版本:v2.1.13(GitHub: eggnogdb/eggnog-mapper)
- 数据库:eggNOG 5.0 数据库(eggNOG-mapper v2 默认使用;eggNOG 最新版为 v7,覆盖 12535 个物种)
- 输出:同时提供 GO、KEGG KO、COG、CAZy、Pfam 等多种注释
- 白话:一次运行,拿到所有主流数据库的注释结果,是"全家桶"型工具
# ========== 安装 ==========
conda install -c bioconda eggnog-mapper
# ========== 下载数据库(首次运行必须,约50GB)==========
download_eggnog_data.py --data_dir /path/to/eggnog_data
# ========== 运行注释 ==========
# -i: 输入蛋白质序列(来自 Prodigal 的 -a 输出)
# --output: 输出文件前缀
# --data_dir: eggNOG 数据库路径
# -m: 搜索模式,diamond(快速)或 mmseqs(更快)
# --cpu: 使用的 CPU 核心数
# --go_evidence: GO 注释的证据级别筛选
# --tax_scope: 分类范围限制(如 Bacteria)
emapper.py \
-i proteins.faa \ # 输入:蛋白质序列(来自Prodigal输出的.faa)
--output t2d_annotation \ # 输出文件前缀
--data_dir /path/to/eggnog_data \ # 数据库路径
-m diamond \ # 搜索引擎:diamond(推荐,速度快)
--cpu 16 \ # 使用16个CPU核心
--go_evidence non-electronic \ # GO注释只保留有实验证据的
--tax_scope Bacteria \ # 限制搜索范围为细菌(加速+减少假阳性)
--override # 覆盖已有输出文件
# 输出文件解读(.emapper.annotations):
# 第1列: 查询序列ID
# 第5列: eggNOG 直系同源组(OG)
# 第7列: COG 功能分类字母
# 第10列: GO terms(GO:0006810 等)
# 第12列: KEGG KO 编号(ko:K00001 等)
# 第13列: KEGG Pathway
# 第21列: Pfam 结构域
# 第22列: CAZy 家族
4.2 InterProScan(蛋白质结构域注释金标准)¶
- 最新版本:v5.77-108.0(GitHub: ebi-pf-team/interproscan)
- 本质:整合 Pfam、PANTHER、CDD、TIGRFAM、Gene3D 等 14+ 个成员数据库的"联合搜索引擎"
- 白话:InterPro 像一个"联合国",把全球各个蛋白质数据库的力量集中起来,给你的蛋白找到最全面的结构域和功能描述
# 安装(较大,约 15GB)
# 从 InterPro 官网下载解压即可
wget https://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.77-108.0/interproscan-5.77-108.0-64-bit.tar.gz
tar -xzf interproscan-5.77-108.0-64-bit.tar.gz
# 运行注释
# -i: 输入蛋白质序列
# -f: 输出格式(tsv/xml/json/gff3)
# -goterms: 同时输出 GO 注释
# -pa: 同时输出 Pathway 注释
interproscan.sh \
-i proteins.faa \ # 输入蛋白质序列
-f tsv,gff3 \ # 输出格式:tsv表格 + gff3坐标
-goterms \ # 输出GO注释
-pa \ # 输出Pathway注释
-cpu 16 \ # 使用16个CPU
-dp # 关闭预计算查询(离线模式)
4.3 Prokka(原核基因组一站式注释)¶
- 最新版本:v1.14.6(GitHub: tseemann/prokka,稳定版)
- 本质:一站式工具,内部串联了 Prodigal(基因预测)+ BLAST/HMMER(功能注释)
- 白话:Prokka 就是"结构注释 + 功能注释"的自动流水线,输入基因组 fasta,直接输出全套注释文件
# ========== 安装 ==========
conda install -c bioconda prokka
# ========== 注释一个细菌基因组 ==========
# --outdir: 输出目录
# --prefix: 输出文件名前缀
# --kingdom: 生物界(Bacteria/Archaea/Viruses)
# --genus/--species: 物种分类信息
# --cpus: CPU核心数
# --locustag: 基因标签前缀(给每个基因编号用的)
# --compliant: 输出符合NCBI提交标准的格式
prokka \
--outdir prokka_output \ # 输出目录
--prefix my_genome \ # 文件名前缀
--kingdom Bacteria \ # 指定为细菌
--genus Escherichia \ # 属名(可选但推荐)
--species coli \ # 种名(可选但推荐)
--cpus 16 \ # 使用16个CPU核心
--locustag ECOLI \ # 基因编号前缀,如 ECOLI_00001
--compliant \ # 生成NCBI提交兼容格式
--addgenes \ # 在GFF中添加gene特征
genome.fasta # 输入:组装好的基因组fasta
# Prokka 输出文件一览:
# .gff → GFF3 注释文件(结构+功能信息)
# .gbk → GenBank 格式(可用Artemis查看)
# .faa → 蛋白质氨基酸序列
# .ffn → 基因核酸序列
# .fna → 基因组核酸序列(带注释头信息)
# .tbl → NCBI提交格式的特征表
# .tsv → 注释汇总表(基因ID、产物名、EC号等)
# .txt → 统计摘要(总基因数、CDS数、tRNA数、rRNA数)
# .log → 运行日志
4.4 DRAM(宏基因组代谢重建)¶
- 全称:Distilled and Refined Annotation of Metabolism
- 最新版本:v1.5.0(GitHub: WrightonLabCSU/DRAM)
- 特点:专门为宏基因组设计,自动注释 + 生成代谢通路可视化
- 白话:DRAM 不只是注释工具,还是"代谢画师"——它帮你把注释结果画成代谢通路图,一眼看出微生物群落能做什么
# 安装
conda install -c bioconda dram
# 准备数据库(首次运行)
DRAM-setup.py prepare_databases --output_dir /path/to/dram_db
# 注释宏基因组MAGs
# -i: 输入基因组fasta
# -o: 输出目录
DRAM.py annotate \
-i genome.fasta \ # 输入:MAG或基因组
-o dram_annotation \ # 输出目录
--threads 16 # CPU核心数
# 生成代谢通路可视化
DRAM.py distill \
-i dram_annotation/annotations.tsv \ # 注释结果
-o dram_distillate # 可视化输出目录
# 会生成 metabolism_summary.xlsx 和 product.html(交互式代谢图)
功能注释工具选择指南¶
| 场景 | 推荐工具 | 理由 |
|---|---|---|
| 单个细菌基因组快速注释 | Prokka | 一条命令搞定,输出完整 |
| 宏基因组全面功能注释 | eggNOG-mapper | 多数据库同时注释,速度快 |
| 需要精确结构域分析 | InterProScan | 14+ 数据库联合搜索 |
| 宏基因组代谢通路重建 | DRAM | 自动可视化代谢通路 |
| T2D 项目肠道菌群功能 | eggNOG-mapper + DRAM | 先全面注释再代谢重建 |
5. 注释流程对比:原核 vs 真核¶
5.1 原核基因组注释流程(简洁高效)¶
组装后的基因组 (contigs.fasta)
│
├─ 方案A:一站式 → Prokka → 全套输出
│
└─ 方案B:分步式
├── Step 1: Prodigal 预测基因 → genes.gff + proteins.faa
├── Step 2: eggNOG-mapper 功能注释 → GO/KEGG/COG
├── Step 3: InterProScan 结构域注释 → Pfam/TIGRFAM
└── Step 4: 专用数据库注释(可选)
├── dbCAN3/run_dbcan v5 → CAZy碳水化合物酶
├── ABRicate → 耐药基因(CARD)、毒力因子(VFDB)
└── SignalP/TMHMM → 信号肽/跨膜区
原核注释为什么简单? - 基因密度高(约85-90%的基因组是编码区) - 无内含子,ORF 连续(白话:基因从头到尾一口气读完,中间不断) - 有明确的起始密码子(ATG/GTG/TTG)和终止密码子(TAA/TAG/TGA) - 有 Shine-Dalgarno 序列(核糖体结合位点)作为额外定位信号
5.2 真核基因组注释流程(复杂多步)¶
组装后的基因组 (genome.fasta)
│
├── Step 0: RepeatMasker → 屏蔽重复序列(先把"噪音"去掉)
│
├── Step 1: RNA-seq 比对 → HISAT2/STAR → 转录组证据
│
├── Step 2: 基因预测(多种方法综合)
│ ├── Ab initio: Augustus, GeneMark-ES
│ ├── 同源证据: GeMoMa, Exonerate
│ └── 转录组证据: StringTie, PASA
│
├── Step 3: 证据整合 → MAKER/EvidenceModeler → 共识基因模型
│
├── Step 4: 功能注释
│ ├── BLAST vs UniProt/Nr → 同源功能推断
│ ├── InterProScan → 结构域和GO注释
│ └── eggNOG-mapper → KEGG/COG注释
│
└── Step 5: 手动审查 → Apollo/JBrowse → 修正错误预测
真核注释为什么复杂? - 外显子-内含子交替,剪接位点识别困难 - 可变剪接(同一个基因可以拼出不同的转录本) - 基因密度低(大量非编码区和重复序列) - 需要转录组数据辅助才能准确
6. GO/KEGG/COG/Pfam 注释体系详解¶
注意:03_功能注释数据库已经介绍了各数据库的基本概念和层级结构,本节聚焦于如何在注释流程中使用这些体系以及注释结果怎么解读。
6.1 GO(Gene Ontology)注释¶
三大分支(面试必背):
| 分支 | 英文 | 白话解释 | 示例 |
|---|---|---|---|
| BP | Biological Process | 这个基因参与什么生物过程 | GO:0006096 糖酵解 |
| MF | Molecular Function | 这个基因有什么分子功能 | GO:0004340 葡萄糖激酶活性 |
| CC | Cellular Component | 这个基因的产物在细胞哪里 | GO:0005737 细胞质 |
GO 注释的"证据代码"(面试加分项): - EXP:实验验证的(最可靠) - IEA:电子注释推断的(最多但可靠性较低) - ISS:序列相似性推断的
使用建议:eggNOG-mapper 的 --go_evidence non-electronic 参数可以过滤掉 IEA 注释,提高注释质量。
6.2 KEGG 注释在流程中的应用¶
蛋白质序列 → eggNOG-mapper → KO 编号 → Pathway 映射
↓
K00844 (HK, hexokinase)
↓
ko00010 (Glycolysis/Gluconeogenesis)
↓
用于差异代谢通路分析
解读 eggNOG-mapper 的 KEGG 输出: - 第12列 KEGG_ko:ko:K00844,ko:K12407(直接的 KO 编号) - 第13列 KEGG_Pathway:ko00010,ko00500(对应的代谢通路) - 一个基因可以有多个 KO,一个 KO 可以属于多个 Pathway
6.3 COG 分类体系¶
COG 用单个字母代表功能大类,共 26 类(面试常问 top 几类):
| 字母 | 功能 | 白话 |
|---|---|---|
| J | Translation, ribosomal structure | 翻译和核糖体 |
| K | Transcription | 转录 |
| L | Replication, recombination, repair | DNA复制和修复 |
| C | Energy production and conversion | 产能和能量转换 |
| E | Amino acid transport and metabolism | 氨基酸代谢 |
| G | Carbohydrate transport and metabolism | 碳水化合物代谢 |
| S | Function unknown | 功能未知 |
| R | General function prediction only | 只有大致功能预测 |
COG 在宏基因组中的用法:统计每个 COG 类别的基因数量,绘制柱状图比较不同样本/组别的功能组成差异。
6.4 Pfam 结构域分析¶
- Pfam:蛋白质家族数据库,基于 HMM(隐马尔可夫模型)定义的蛋白质结构域
- 白话:Pfam 像蛋白质的"零件目录",每个蛋白由若干"零件(结构域)"组成,Pfam 告诉你它有哪些零件
- 使用方式:通过 InterProScan 或 HMMER 的 hmmscan 搜索 Pfam-A 数据库
# 使用 HMMER 直接搜索 Pfam
# -E: E-value 阈值(越小越严格)
# --domtblout: 输出每个结构域的详细比对结果
hmmscan \
--cpu 8 \ # CPU 核心数
-E 1e-5 \ # E-value 阈值
--domtblout pfam_results.txt \ # 结构域结果输出
/path/to/Pfam-A.hmm \ # Pfam HMM 数据库
proteins.faa # 输入蛋白质序列
7. 富集分析原理(超几何分布白话版)¶
7.1 什么是富集分析?¶
白话类比: 假设一个班有 100 个学生(全部基因),其中 30 个是男生(某个 GO term 对应的所有基因)。现在老师挑了 20 个成绩好的学生(差异基因),发现其中 15 个是男生。那问题来了:成绩好的学生里男生比例(15/20=75%)远高于全班男生比例(30/100=30%),这是偶然的还是有规律的?
这就是富集分析要回答的核心问题:差异基因中,某个功能类别的基因是否"异常多"(富集)?
7.2 超几何分布(数学原理)¶
超几何分布公式:
P(X = k) = C(K,k) * C(N-K, n-k) / C(N,n)
其中:
N = 总基因数(全班100人)
K = 某GO term包含的基因数(全班30个男生)
n = 差异基因数(20个好学生)
k = 差异基因中属于该GO term的数量(15个男生好学生)
C(a,b) = 组合数,从a中选b个的方式数
白话:从100人里随机抽20人,恰好抽到>=15个男生的概率是多少?
如果概率很低(p < 0.05),说明"好学生里男生多"不是偶然的 → 富集了!
7.3 富集分析的关键步骤¶
1. 确定背景基因集(N):通常是所有被注释到的基因
2. 确定目标基因集(n):差异表达基因或特定条件的基因
3. 对每个GO/KEGG term:
- 计算在背景中有多少基因属于该term(K)
- 计算在目标集中有多少基因属于该term(k)
- 用超几何检验计算p值
4. 多重检验校正(BH/FDR):因为同时测试了成百上千个term
5. 筛选显著富集的term(通常 FDR < 0.05)
7.4 R 语言 clusterProfiler GO 富集分析实操代码¶
# ========== clusterProfiler GO 富集分析 ==========
# 安装(如果没有的话)
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install(c("clusterProfiler", "org.Hs.eg.db", "enrichplot"))
# 加载包
library(clusterProfiler) # 富集分析核心包
library(enrichplot) # 可视化包
library(org.Hs.eg.db) # 人类基因注释数据库(肠道菌群宿主侧分析用)
# 注意:如果分析细菌基因,不用 org.Hs.eg.db,而是用自己的注释表
# ---------- 方法1:使用自定义注释(宏基因组常用)----------
# 读取 eggNOG-mapper 输出的注释文件
anno <- read.delim("t2d_annotation.emapper.annotations",
comment.char = "#", # 跳过#开头的注释行
header = FALSE) # eggNOG输出无表头
# 构建 gene2go 映射表(term2gene格式)
# 假设第1列是基因ID,第10列是GO terms
gene2go <- data.frame(
gene = anno$V1, # 基因ID
go = anno$V10 # GO注释(可能有多个,用逗号分隔)
)
# 展开多值GO注释(一个基因可能有多个GO term)
library(tidyr)
gene2go_expanded <- gene2go %>%
separate_rows(go, sep = ",") %>% # 把 "GO:0001,GO:0002" 拆成两行
filter(go != "-") %>% # 去掉没有注释的("-")
filter(go != "") # 去掉空值
# 转换为 enricher 需要的 TERM2GENE 格式
term2gene <- gene2go_expanded[, c("go", "gene")] # 注意顺序:先term再gene
# 定义差异基因列表(从差异分析结果中获得)
diff_genes <- c("gene_001", "gene_002", "gene_003") # 替换为实际差异基因ID
# 运行 GO 富集分析(自定义注释版)
ego <- enricher(
gene = diff_genes, # 差异基因列表
TERM2GENE = term2gene, # 自定义的GO注释映射
pvalueCutoff = 0.05, # p值阈值
pAdjustMethod = "BH", # 多重检验校正方法(Benjamini-Hochberg)
qvalueCutoff = 0.2 # q值(FDR)阈值
)
# ---------- 方法2:使用内置数据库(模式生物用)----------
# 如果分析的是人类基因(比如T2D宿主转录组)
ego2 <- enrichGO(
gene = diff_gene_ids, # 差异基因的Entrez ID
OrgDb = org.Hs.eg.db, # 人类注释数据库
ont = "BP", # 选择GO分支:BP/MF/CC/ALL
pAdjustMethod = "BH", # BH法校正p值
pvalueCutoff = 0.05, # p值阈值
qvalueCutoff = 0.2 # q值阈值
)
# ---------- 可视化 ----------
# 气泡图(最常用)
dotplot(ego, showCategory = 20) + # 显示top20个GO term
ggtitle("GO Enrichment Analysis - T2D Gut Microbiome")
# 柱状图
barplot(ego, showCategory = 15)
# 网络图(展示GO term之间的关系)
emapplot(ego, showCategory = 20)
# KEGG 富集分析(类似逻辑)
# 构建 term2gene 用 KEGG pathway
kegg_term2gene <- data.frame(
pathway = anno$V13, # KEGG pathway列
gene = anno$V1 # 基因ID
)
kegg_term2gene <- kegg_term2gene %>%
separate_rows(pathway, sep = ",") %>%
filter(pathway != "-" & pathway != "")
ekegg <- enricher(
gene = diff_genes,
TERM2GENE = kegg_term2gene,
pvalueCutoff = 0.05,
pAdjustMethod = "BH"
)
dotplot(ekegg, showCategory = 15) +
ggtitle("KEGG Pathway Enrichment - T2D vs Control")
8. 与 T2D 项目的关联¶
在该 2 型糖尿病肠道菌群宏基因组项目中,注释流程是这样串联的:
宏基因组测序数据
↓
质控 → 组装(MEGAHIT)→ contigs
↓
Prodigal -p meta → 预测基因(蛋白质序列) ← 结构注释
↓
eggNOG-mapper → GO/KEGG/COG 功能注释 ← 功能注释
↓
差异分析(T2D组 vs 健康对照组)
↓
clusterProfiler 富集分析 ← 功能富集
↓
发现 T2D 相关的差异代谢通路
例如:短链脂肪酸(SCFA)合成通路 ↓
丁酸合成基因(bcd, buk)在T2D中显著降低
LPS合成通路在T2D中富集(促炎)
关键发现举例(面试可以说的): 1. T2D 患者肠道菌群中丁酸合成相关基因(COG 分类 C/G 类)显著减少 2. KEGG 通路富集分析显示 ko00650(丁酸代谢)在健康对照中富集 3. GO 富集分析显示 T2D 组在 "carbohydrate metabolic process" 等 BP term 上有显著差异 4. Pfam 分析发现 T2D 相关差异菌中特定碳水化合物活性酶结构域的变化
9. 面试怎么答(5 道高频题)¶
Q1:请描述一下你对细菌基因组的注释流程¶
"我通常用 Prokka 进行一站式注释,它内部先调用 Prodigal 做结构注释(预测 CDS、tRNA、rRNA 等),再用 BLAST 和 HMMER 比对 UniProt/Pfam 等数据库完成功能注释。如果需要更全面的功能注释,我会先用 Prodigal 单独预测基因,然后用 eggNOG-mapper 同时获取 GO、KEGG、COG 等多个数据库的注释。对于宏基因组,Prodigal 要用 -p meta 模式,因为 contigs 可能来自不同物种,不能用单基因组的自学习模式。"
Q2:结构注释和功能注释有什么区别?¶
"结构注释解决'基因在哪里'的问题,输出是基因的坐标信息(GFF文件);功能注释解决'基因做什么'的问题,输出是 GO/KEGG/COG 等功能编号。原核生物结构注释相对简单,因为没有内含子,基因是连续的 ORF;真核生物有外显子-内含子结构和可变剪接,需要 Augustus 或 MAKER 等更复杂的工具,最好有 RNA-seq 数据辅助。"
Q3:eggNOG-mapper 和 InterProScan 有什么区别,怎么选?¶
"eggNOG-mapper 基于直系同源基因组进行注释,速度快,一次运行可以同时拿到 GO、KEGG、COG、Pfam、CAZy 等多种注释,适合大规模宏基因组数据的快速注释。InterProScan 整合了 14 个以上的蛋白质结构域数据库(Pfam、PANTHER、CDD 等),对结构域的识别更精确,但速度较慢。在实际项目中,我通常先用 eggNOG-mapper 做全面快速注释,对重点基因再用 InterProScan 做精确的结构域分析。"
Q4:GO 富集分析用的是什么统计原理?¶
"GO 富集分析核心用的是超几何分布检验,也叫 Fisher 精确检验。原理是:如果从 N 个背景基因中随机抽 n 个基因,属于某个 GO term 的基因被抽中的数量 k 是否显著高于预期。比如背景中有 30% 的基因属于'碳水化合物代谢',但差异基因中有 70% 属于这个类别,超几何检验会计算这种'偏离'发生的概率。因为同时检验了几百上千个 GO term,需要用 BH(Benjamini-Hochberg)方法做多重检验校正,控制假阳性率(FDR)。"
Q5:宏基因组和单基因组的注释有什么不同?¶
"主要有三个区别:第一,结构注释时宏基因组用 Prodigal 的 meta 模式而不是 single 模式,因为 contigs 来自多个物种,不能用单一物种的参数训练;第二,宏基因组的 contigs 可能很短且碎片化,导致基因预测不完整,需要注意片段基因的处理;第三,功能注释时宏基因组的基因量巨大(百万级),需要选择速度快的工具如 eggNOG-mapper 配合 diamond 搜索引擎,而不是逐条 BLAST。另外宏基因组还需要结合分 bin(binning)的结果,将功能注释和物种归属关联起来。"
10. 速查表¶
工具速查表¶
| 工具 | 版本 | 类型 | 适用 | 安装 | 一句话 |
|---|---|---|---|---|---|
| Prodigal | v2.6.3 | 结构注释 | 原核/宏基因组 | conda install -c bioconda prodigal | 原核基因预测标准工具 |
| GeneMark | ES/ET | 结构注释 | 原核/真核 | 需申请license | HMM基因预测 |
| Augustus | v3.5.0 | 结构注释 | 真核 | conda install -c bioconda augustus | 真核基因预测经典 |
| MAKER | v3 | 结构注释 | 真核 | conda install -c bioconda maker | 真核注释流水线 |
| Prokka | v1.14.6 | 结构+功能 | 原核 | conda install -c bioconda prokka | 原核一站式注释 |
| eggNOG-mapper | v2.1.13 | 功能注释 | 通用 | conda install -c bioconda eggnog-mapper | 多数据库全家桶 |
| InterProScan | v5.77 | 功能注释 | 通用 | 官网下载 | 结构域注释金标准 |
| DRAM | v1.5.0 | 功能+代谢 | 宏基因组 | conda install -c bioconda dram | 代谢通路重建+可视化 |
注释体系速查表¶
| 体系 | 内容 | 层级 | 在 eggNOG 输出第几列 | 面试关键词 |
|---|---|---|---|---|
| GO | 基因功能本体论 | BP/MF/CC 三分支 | 第10列 | 三大分支、证据代码、DAG结构 |
| KEGG | 代谢通路百科 | Level 1/2/3 + KO | 第12-13列 | KO号→Pathway映射、七大类 |
| COG | 直系同源基因分类 | 26个字母类别 | 第7列 | 字母编码、S/R是未知功能 |
| Pfam | 蛋白质结构域家族 | 家族→clan | 第21列 | HMM搜索、结构域组合 |
| CAZy | 碳水化合物活性酶 | GH/GT/PL/CE/AA/CBM | 第22列 | 六大家族、dbCAN3/run_dbcan v5注释 |
命令速查表¶
# 原核一站式注释
prokka --kingdom Bacteria --cpus 16 genome.fasta --outdir anno_out
# 宏基因组基因预测
prodigal -i contigs.fasta -o genes.gff -a proteins.faa -p meta -f gff
# eggNOG-mapper 功能注释
emapper.py -i proteins.faa --output result -m diamond --cpu 16
# InterProScan 结构域注释
interproscan.sh -i proteins.faa -f tsv,gff3 -goterms -pa -cpu 16
# DRAM 代谢重建
DRAM.py annotate -i genome.fasta -o dram_out --threads 16
DRAM.py distill -i dram_out/annotations.tsv -o dram_distill
11. 延伸资源¶
学习资源¶
- Prodigal 论文:Hyatt et al. (2010) BMC Bioinformatics. "Prodigal: prokaryotic gene recognition and translation initiation site identification"
- eggNOG-mapper 论文:Cantalapiedra et al. (2021) Molecular Biology and Evolution. "eggNOG-mapper v2"
- Prokka 论文:Seemann (2014) Bioinformatics. "Prokka: rapid prokaryotic genome annotation"
- DRAM 论文:Shaffer et al. (2020) Nucleic Acids Research. "DRAM for distilling microbial metabolism"
- Augustus 论文:Stanke et al. (2006) Nucleic Acids Research. "AUGUSTUS: ab initio prediction of alternative transcripts"
在线工具¶
- eggNOG-mapper 在线版:http://eggnog-mapper.embl.de (适合少量序列测试)
- InterPro 在线搜索:https://www.ebi.ac.uk/interpro/ (查看单个蛋白的结构域)
- KEGG Mapper:https://www.genome.jp/kegg/mapper/ (通路可视化)
- Gene Ontology 官网:http://geneontology.org/ (GO term 浏览和搜索)
与其他知识库的联系¶
- 03_功能注释数据库:各数据库的详细介绍和层级结构
- 01_宏基因组全流程:注释在宏基因组流程中的位置
- 14_比对与组装工具:注释的上游步骤(组装)
- 11_统计学基础:富集分析用到的超几何分布和多重检验校正
- 12_机器学习基础:随机森林特征筛选后再做富集分析
最后更新:2026-05-03 | 版本信息已联网核实