跳转至

基因组注释基础(Genome Annotation)

一句话说明:基因组注释就是在一条长 DNA 序列上"标记"出哪里是基因、基因有什么功能,是从原始序列到生物学解读的核心桥梁。

面试方向:宏基因组/细菌基因组/通用生信工程师 | 与 03_功能注释数据库互补,本篇聚焦注释方法、工具和流程


1. 什么是基因组注释(白话版)

类比:你拿到一本外语书(基因组序列),注释就是做两件事: 1. 结构注释:先把书里每个句子的位置标出来(哪里是基因、在哪一行开始、哪一行结束) 2. 功能注释:再翻译每个句子的意思(这个基因负责什么功能、参与什么代谢通路)

没有注释,基因组就只是一堆 ATCG 字母,面试官问"你拿到组装结果之后做什么",答案的第一步就是注释。

注释在整个分析流程中的位置

原始测序数据 → 质控 → 组装(Assembly) → 【基因组注释】 → 下游分析
                                    结构注释(找基因)
                                    功能注释(查功能)
                                    富集分析 / 比较基因组学 / 代谢重建

2. 结构注释 vs 功能注释

维度结构注释 (Structural Annotation)功能注释 (Functional Annotation)
目标找出基因在哪里(位置、边界)找出基因干什么(功能、通路)
白话"在哪一页、第几行有句子""这句话什么意思"
输出GFF/GTF 文件(基因坐标)注释表格(GO/KEGG/COG 编号)
方法ab initio 预测、同源比对、转录组证据序列比对数据库、HMM 搜索、结构域扫描
原核Prodigal, GeneMark, GlimmereggNOG-mapper, Prokka 内置
真核Augustus, MAKER, BRAKERInterProScan, 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多数据库同时注释,速度快
需要精确结构域分析InterProScan14+ 数据库联合搜索
宏基因组代谢通路重建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)注释

三大分支(面试必背):

分支英文白话解释示例
BPBiological Process这个基因参与什么生物过程GO:0006096 糖酵解
MFMolecular Function这个基因有什么分子功能GO:0004340 葡萄糖激酶活性
CCCellular 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_koko:K00844,ko:K12407(直接的 KO 编号) - 第13列 KEGG_Pathwayko00010,ko00500(对应的代谢通路) - 一个基因可以有多个 KO,一个 KO 可以属于多个 Pathway

6.3 COG 分类体系

COG 用单个字母代表功能大类,共 26 类(面试常问 top 几类):

字母功能白话
JTranslation, ribosomal structure翻译和核糖体
KTranscription转录
LReplication, recombination, repairDNA复制和修复
CEnergy production and conversion产能和能量转换
EAmino acid transport and metabolism氨基酸代谢
GCarbohydrate transport and metabolism碳水化合物代谢
SFunction unknown功能未知
RGeneral 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. 速查表

工具速查表

工具版本类型适用安装一句话
Prodigalv2.6.3结构注释原核/宏基因组conda install -c bioconda prodigal原核基因预测标准工具
GeneMarkES/ET结构注释原核/真核需申请licenseHMM基因预测
Augustusv3.5.0结构注释真核conda install -c bioconda augustus真核基因预测经典
MAKERv3结构注释真核conda install -c bioconda maker真核注释流水线
Prokkav1.14.6结构+功能原核conda install -c bioconda prokka原核一站式注释
eggNOG-mapperv2.1.13功能注释通用conda install -c bioconda eggnog-mapper多数据库全家桶
InterProScanv5.77功能注释通用官网下载结构域注释金标准
DRAMv1.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 | 版本信息已联网核实