宏基因组功能注释(HUMAnN3 / eggNOG-mapper)¶
一句话说明:宏基因组功能注释是对整个微生物群落的代谢潜力做"体检",回答"这群菌在干什么 / 能干什么"。
面试方向:宏基因组工程师 / 通用生信工程师 | 与 26_基因组注释基础互补——26 讲单个基因组的基因预测+注释,本篇讲社区级(community-level)功能 profiling
1. 宏基因组功能注释是什么(白话版)¶
类比: - 单基因组注释 = 看一个人的简历,弄清楚他会什么技能 - 宏基因组功能注释 = 看一个公司全员的技能表,弄清楚这家公司整体能做什么业务
具体来说:你有一份肠道菌群的宏基因组测序数据(几百万条 DNA 短 reads),功能注释就是搞清楚: 1. 这些菌整体有哪些代谢通路在活跃(比如产丁酸、分解纤维素) 2. 每条通路的丰度(哪些代谢能力强、哪些弱) 3. 哪个物种贡献了哪个功能(物种-功能关联)
与单基因组注释的核心区别¶
| 维度 | 单基因组注释(26篇) | 宏基因组功能注释(本篇) |
|---|---|---|
| 输入 | 一个物种的组装基因组 | 混合群落的 reads 或 contigs |
| 目标 | 这个菌有哪些基因 | 这群菌整体能做什么 |
| 输出 | 基因坐标 + 功能标签 | 通路丰度表 + 基因家族丰度表 |
| 核心工具 | Prokka / Prodigal + eggNOG | HUMAnN3 / MetaPhlAn4 |
| 分析单位 | 单个基因 | 代谢通路(MetaCyc/KEGG pathway) |
| 白话 | 看一个人的简历 | 看整个公司的业务能力 |
2. HUMAnN3 完整流程¶
2.1 什么是 HUMAnN¶
- 全称:HMP Unified Metabolic Analysis Network 3.0
- 最新版本:v3.9(GitHub tag,bioBakery 套件核心组件)
- 功能:从宏基因组/宏转录组 reads 直接定量代谢通路丰度和基因家族丰度
- 核心优势:一条命令搞定"物种鉴定 → 基因定量 → 通路推断"全流程
- 论文:Beghini et al. (2021) eLife 10:e65088
2.2 HUMAnN3 工作原理(三步走)¶
输入: 质控后的 fastq reads
│
▼
┌─────────────────────────────────┐
│ Step 1: 物种鉴定(MetaPhlAn4) │ → 确定样本中有哪些物种
└─────────────────────────────────┘
│
▼
┌─────────────────────────────────┐
│ Step 2: 核酸比对(Bowtie2) │ → reads 比对到已知物种的基因组
│ 针对性比对,只比对已检测到 │ (ChocoPhlAn 定制库)
│ 的物种的泛基因组 │
└─────────────────────────────────┘
│ 未比对上的 reads
▼
┌─────────────────────────────────┐
│ Step 3: 翻译搜索(Diamond) │ → 蛋白级别比对 UniRef 数据库
│ 捕获未知/远缘物种的功能 │ (找到新功能)
└─────────────────────────────────┘
│
▼
输出: 基因家族丰度 + 通路丰度 + 通路覆盖度
2.3 安装¶
# ========== 方法1: conda 安装(推荐) ==========
conda create -n humann_env python=3.9 # 创建独立环境
conda activate humann_env # 激活环境
# 安装 HUMAnN(会自动安装 MetaPhlAn4 作为依赖)
pip install humann # 安装 HUMAnN3 主程序
# 验证安装
humann --version # 应显示 humann v3.9
metaphlan --version # 应显示 MetaPhlAn 4.x
# ========== 方法2: bioconda ==========
conda install -c bioconda humann # bioconda 渠道安装
2.4 数据库下载(必须步骤)¶
# ========== 下载 ChocoPhlAn 核酸数据库(~16 GB) ==========
# 包含已知物种的泛基因组序列,用于核酸级别比对
humann_databases --download chocophlan full /path/to/databases/ # 下载完整版
# ========== 下载 UniRef 蛋白数据库 ==========
# uniref90: 精度高但数据库大(~21 GB,推荐正式分析用)
humann_databases --download uniref uniref90_diamond /path/to/databases/
# uniref50: 速度快数据库小(~7 GB,适合测试或资源有限时)
# humann_databases --download uniref uniref50_diamond /path/to/databases/
# ========== 下载 MetaPhlAn4 marker 数据库 ==========
metaphlan --install --bowtie2db /path/to/databases/metaphlan_db/
# ========== 更新 HUMAnN 配置指向数据库位置 ==========
humann_config --update database_folders nucleotide /path/to/databases/chocophlan/
humann_config --update database_folders protein /path/to/databases/uniref/
# 查看当前配置
humann_config --print # 确认数据库路径正确
2.5 运行 HUMAnN3¶
# ========== 单样本运行 ==========
humann \
--input sample_kneaddata.fastq.gz \ # 输入:KneadData 质控后的 reads
--output results/humann/ \ # 输出目录
--threads 8 \ # 使用 8 个线程
--memory-use maximum # 内存模式(maximum 更快)
# ========== 批量运行(循环所有样本) ==========
for sample in data/kneaddata/*_kneaddata.fastq.gz; do
sample_name=$(basename ${sample} _kneaddata.fastq.gz) # 提取样本名
humann \
--input ${sample} \ # 输入文件
--output results/humann/ \ # 输出目录
--threads 8 \ # 线程数
--output-basename ${sample_name} # 指定输出文件名前缀
done
# ========== 关键参数说明 ==========
# --nucleotide-database : 指定 ChocoPhlAn 路径(如果没配置 config)
# --protein-database : 指定 UniRef 路径
# --bypass-translated-search : 跳过翻译搜索(快但不全)
# --taxonomic-profile : 提供已有的物种 profile,跳过 MetaPhlAn 步骤
2.6 结果文件解读¶
HUMAnN3 输出三个核心文件:
(1) Gene Families(基因家族丰度)¶
# 文件: sample_genefamilies.tsv
# Gene Family RPKs
UniRef90_A6L0N6: Conserved protein 67.0
UniRef90_A6L0N6|g__Bacteroides.s__Bacteroides_fragilis 57.0 # 物种贡献
UniRef90_A6L0N6|unclassified 1.0 # 未知物种贡献
- 单位:RPK(reads per kilobase,按基因长度归一化)
- 分层结构:社区总量 + 每个物种的贡献
- 白话:这个基因家族整体有 67 的丰度,其中 Bacteroides_fragilis 贡献了 57
(2) Pathway Abundance(通路丰度)¶
# 文件: sample_pathabundance.tsv
# Pathway Abundance
PWY-5484: glycolysis II (from fructose-6P) 54.7
PWY-5484|g__Bacteroides.s__Bacteroides_caccae 16.7 # 物种贡献
PWY-5484|unclassified 6.0
- 数据库:MetaCyc 代谢通路(默认)
- 算法:MinPath 推断最小通路集合
- 白话:糖酵解通路的丰度是 54.7,其中 B. caccae 贡献了 16.7
(3) Pathway Coverage(通路覆盖度)¶
- 含义:通路中有多少比例的酶被检测到(0~1)
- 白话:0.95 表示糖酵解通路 95% 的步骤都有对应的酶被检测到
2.7 标准后处理流程¶
# ========== 1. 归一化 ==========
# 将 RPK 转换为 CPM(copies per million)或 relab(相对丰度)
humann_renorm_table \
--input sample_genefamilies.tsv \ # 输入原始基因家族表
--output sample_genefamilies_cpm.tsv \ # 输出归一化结果
--units cpm # cpm 或 relab
humann_renorm_table \
--input sample_pathabundance.tsv \
--output sample_pathabundance_relab.tsv \
--units relab # 通路用相对丰度
# ========== 2. 合并多样本 ==========
humann_join_tables \
--input results/humann/ \ # 包含所有样本结果的目录
--output merged_genefamilies.tsv \ # 合并后的基因家族表
--file_name genefamilies_cpm # 匹配文件名关键词
humann_join_tables \
--input results/humann/ \
--output merged_pathabundance.tsv \
--file_name pathabundance_relab
# ========== 3. 基因家族重分组(UniRef → KEGG/GO/EC) ==========
# 将 UniRef 基因家族映射到 KEGG KO
humann_regroup_table \
--input merged_genefamilies.tsv \ # 输入:UniRef 级别的基因家族
--output merged_ko.tsv \ # 输出:KO 级别
--groups uniref90_ko # 映射关系:UniRef90 → KO
# 映射到 EC 编号
humann_regroup_table \
--input merged_genefamilies.tsv \
--output merged_ec.tsv \
--groups uniref90_level4ec # UniRef90 → EC number
# 映射到 GO terms
humann_regroup_table \
--input merged_genefamilies.tsv \
--output merged_go.tsv \
--groups uniref90_go # UniRef90 → GO
# ========== 4. 添加功能名称 ==========
humann_rename_table \
--input merged_ko.tsv \ # 输入:KO 编号表
--output merged_ko_named.tsv \ # 输出:带名称的表
--names kegg-orthology # 名称来源
# ========== 5. 分离分层结果 ==========
# 拆分为社区总量和物种贡献两张表
humann_split_stratified_table \
--input merged_pathabundance.tsv \ # 输入合并的通路表
--output results/stratified/ # 输出目录
# 产生: merged_pathabundance_unstratified.tsv(社区总量)
# merged_pathabundance_stratified.tsv(物种贡献)
3. MetaPhlAn4 物种组成分析¶
3.1 MetaPhlAn4 简介¶
- 最新版本:4.2.4(2025 年 10 月发布)
- 功能:基于 marker gene 进行物种组成定量(不需要组装)
- 数据库:包含 >26,000 个参考基因组的物种特异性 marker 基因
- 白话:用"指纹库"给每条 read 验明正身,统计每个物种占多少比例
3.2 独立使用 MetaPhlAn4¶
# ========== 安装 ==========
pip install metaphlan # 通常随 HUMAnN 自动安装
# ========== 下载数据库 ==========
metaphlan --install --bowtie2db /path/to/metaphlan_db/
# ========== 运行 ==========
metaphlan \
sample_kneaddata.fastq.gz \ # 输入:质控后的 reads
--input_type fastq \ # 输入类型
--bowtie2db /path/to/metaphlan_db/ \ # 数据库路径
--output_file sample_profile.tsv \ # 物种组成表
--nproc 8 # 线程数
# ========== 合并多样本 ==========
merge_metaphlan_tables.py \
results/metaphlan/*.tsv \ # 所有样本的 profile
> merged_metaphlan.tsv # 合并为一张表
# ========== 物种多样性分析 ==========
# 计算 alpha 多样性
metaphlan \
sample.fastq.gz \
--input_type fastq \
--output_file profile.tsv \
-t rel_ab_w_read_stats # 输出带 reads 统计的相对丰度
3.3 MetaPhlAn4 输出解读¶
#clade_name relative_abundance
k__Bacteria 99.8
k__Bacteria|p__Bacteroidetes 45.2
k__Bacteria|p__Bacteroidetes|...|s__Bacteroides_vulgatus 12.3
k__Bacteria|p__Firmicutes 40.1
k__Bacteria|p__Firmicutes|...|s__Faecalibacterium_prausnitzii 8.7
- 层级结构:界 → 门 → 纲 → 目 → 科 → 属 → 种
- 值:相对丰度(%),所有同级别加起来 = 100%
- 与 HUMAnN 的关系:HUMAnN 内部调用 MetaPhlAn 确定物种组成,再据此构建定制数据库
4. eggNOG-mapper 宏基因组模式¶
注:26 篇已介绍 eggNOG-mapper 的基本用法(单基因组注释),这里专讲宏基因组场景。
4.1 为什么宏基因组还需要 eggNOG-mapper¶
| 工具 | 输入 | 输出 | 适用场景 |
|---|---|---|---|
| HUMAnN3 | 原始 reads | MetaCyc 通路丰度 | reads 级别功能 profiling |
| eggNOG-mapper | 预测的蛋白序列 | KO/GO/COG/CAZy/Pfam | 组装后的精细多数据库注释 |
白话:HUMAnN 是"粗略但全面"的通路扫描,eggNOG-mapper 是"精确但需要先预测基因"的深度注释。两者互补。
4.2 宏基因组模式流程¶
# ========== 最新版本:v2.1.13(2025年6月) ==========
# ========== Step 1: 基因预测(Prodigal meta 模式) ==========
prodigal \
-i assembled_contigs.fasta \ # 输入:组装后的 contigs
-a predicted_proteins.faa \ # 输出:蛋白序列
-p meta \ # 宏基因组模式(必须!)
-f gff \ # GFF 格式坐标
-o genes.gff
# ========== Step 2: eggNOG-mapper 注释 ==========
emapper.py \
-i predicted_proteins.faa \ # 输入:预测的蛋白序列
--itype proteins \ # 输入类型:蛋白质
-o metagenome_eggnog \ # 输出前缀
--data_dir /path/to/eggnog_db/ \ # eggNOG 数据库路径
--cpu 16 \ # CPU 数
-m diamond \ # 搜索引擎(diamond 最快)
--dmnd_iterate yes \ # 迭代搜索提高灵敏度
--override # 覆盖已有输出
# ========== Step 3: 提取 KEGG 注释 ==========
# eggNOG-mapper 输出文件: metagenome_eggnog.emapper.annotations
# 第12列 = KEGG_ko(如 ko:K00844,ko:K01810)
# 第13列 = KEGG_Pathway(如 ko00010,ko00051)
# 第14列 = KEGG_Module(如 M00001,M00002)
# 用 awk 提取 KO 注释(去掉没注释到的行)
awk -F'\t' '$12 != "-"' metagenome_eggnog.emapper.annotations \
| cut -f1,12 > gene_to_ko.tsv # 基因 → KO 映射表
4.3 eggNOG vs HUMAnN 选择策略¶
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 快速看通路差异 | HUMAnN3 | 一条命令,reads 直接出通路 |
| 需要 CAZy/碳水酶注释 | eggNOG-mapper | HUMAnN 不输出 CAZy |
| 需要 COG 功能分类 | eggNOG-mapper | COG 分类一步到位 |
| 低质量/短 reads | HUMAnN3 | 不需要组装,reads 直接比对 |
| 已有好的组装结果 | eggNOG-mapper | 蛋白序列注释更精确 |
| T2D 项目通路分析 | 两者结合 | HUMAnN 看通路 + eggNOG 看 CAZy |
5. KEGG 代谢通路分析(ko/module/pathway 层级)¶
5.1 KEGG 三层结构¶
KO(KEGG Orthology) → 最小功能单元(一个酶/蛋白)
↓ 组合
Module(功能模块) → 完成一个小任务的酶组合(如 M00001 = 糖酵解核心模块)
↓ 组合
Pathway(代谢通路) → 完整代谢途径(如 ko00010 = 糖酵解/糖异生)
白话: - KO = 一个工人(做一步工序) - Module = 一条产线上关键的几个人 - Pathway = 整条生产线
5.2 从 HUMAnN 结果提取 KEGG 信息¶
# ========== HUMAnN 默认输出 MetaCyc 通路 ==========
# 需要重分组才能得到 KEGG 编号
# 基因家族 → KO
humann_regroup_table \
--input merged_genefamilies_cpm.tsv \
--output merged_ko_cpm.tsv \
--groups uniref90_ko # UniRef90 → KO 映射
# 为 KO 添加功能描述
humann_rename_table \
--input merged_ko_cpm.tsv \
--output merged_ko_named.tsv \
--names kegg-orthology
# ========== KO → Module/Pathway 映射(需额外工具) ==========
# 方法1: 使用 MinPath 或 KEGGDecoder
# 方法2: 使用 R 包 clusterProfiler 做 KEGG 富集分析
# 方法3: 自定义 Python 脚本映射 KO → Pathway
# 示例: Python 提取 KEGG module 丰度
# 原理:一个 module 的丰度 = 其包含的 KO 的最小值(保守估计)
5.3 KEGG 富集分析(R 脚本)¶
# ========== R: KEGG 通路富集分析 ==========
library(clusterProfiler) # KEGG 富集分析包
# 读取差异 KO(如 T2D vs 健康的差异 KO 列表)
diff_ko <- read.table("diff_ko_list.txt", header=FALSE)$V1 # KO 编号列表
# 去掉 "ko:" 前缀
diff_ko <- gsub("ko:", "", diff_ko) # K00844 格式
# KEGG pathway 富集
enrich_result <- enrichKEGG(
gene = diff_ko, # 差异 KO 列表
organism = "ko", # "ko" 表示直接用 KO 编号
keyType = "kegg", # 输入类型
pvalueCutoff = 0.05, # p 值阈值
qvalueCutoff = 0.1 # FDR 校正后阈值
)
# KEGG module 富集
module_result <- enrichMKEGG(
gene = diff_ko, # 差异 KO
organism = "ko", # KO 编号
keyType = "kegg",
pvalueCutoff = 0.05
)
# 查看结果
head(enrich_result@result) # 显著富集的通路
6. 短链脂肪酸(SCFA)相关通路——与 T2D 的直接关联¶
6.1 为什么 SCFA 重要¶
- SCFA(Short-Chain Fatty Acids)= 短链脂肪酸,主要包括乙酸、丙酸、丁酸
- 与 T2D 关系:T2D 患者肠道中产丁酸菌(如 Faecalibacterium prausnitzii、Roseburia)减少 → 丁酸产量下降 → 肠屏障受损 → 慢性炎症 → 胰岛素抵抗
- 面试考点:用宏基因组数据验证 SCFA 通路在 T2D 患者中是否降低
6.2 SCFA 相关的 KEGG 编号¶
| SCFA | 产生通路 | 关键 KO | KEGG Module |
|---|---|---|---|
| 丁酸(Butyrate) | 丙酮酸 → 丁酰CoA → 丁酸 | K00929(buk, 丁酸激酶) K01034/K01035(but, 丁酰CoA:乙酸CoA转移酶) | M00156 |
| 丙酸(Propionate) | 琥珀酸途径 | K01847(methylmalonyl-CoA mutase) K00249(butyryl-CoA dehydrogenase) | M00741 |
| 乙酸(Acetate) | 丙酮酸 → 乙酰CoA → 乙酸 | K00625(pta, 磷酸乙酰转移酶) K01512(ackA, 乙酸激酶) | M00579 |
6.3 从 HUMAnN 结果提取 SCFA 通路¶
# ========== 方法1: 从 KO 表中提取 SCFA 相关 KO ==========
# 丁酸相关 KO 列表
echo -e "K00929\nK01034\nK01035\nK00248\nK01782\nK00634" > butyrate_kos.txt
# 从合并的 KO 表中提取
grep -f butyrate_kos.txt merged_ko_named.tsv > butyrate_ko_abundance.tsv
# ========== 方法2: 从 MetaCyc 通路中找 SCFA 相关通路 ==========
# HUMAnN 输出的 MetaCyc 通路中,SCFA 相关的:
# PWY-5022: 4-aminobutyrate degradation V(丁酸相关)
# CENTFERM-PWY: pyruvate fermentation to butanoate(丁酸发酵)
# P163-PWY: L-lysine fermentation to acetate and butyrate
# PWY-5100: pyruvate fermentation to acetate and lactate II
grep -i "butyr\|butan\|acetate\|propanoate" merged_pathabundance.tsv \
> scfa_pathways.tsv # 提取 SCFA 相关通路
6.4 SCFA 与 T2D 的分析脚本¶
#!/usr/bin/env python3
"""提取 SCFA 通路丰度,比较 T2D vs 健康对照"""
import pandas as pd # 数据处理
from scipy import stats # 统计检验
# 读取 HUMAnN 通路丰度表(unstratified,社区总量)
pathway_df = pd.read_csv(
"merged_pathabundance_unstratified.tsv",
sep="\t",
index_col=0 # 第一列是通路名
)
# 定义 SCFA 相关 MetaCyc 通路
scfa_pathways = [
"CENTFERM-PWY", # 丙酮酸发酵产丁酸
"P163-PWY", # 赖氨酸发酵产乙酸和丁酸
"PWY-5100", # 丙酮酸发酵产乙酸
"PWY-5022", # 4-氨基丁酸降解
"PWY-7111", # 丙酸降解
]
# 提取 SCFA 通路子集
scfa_df = pathway_df[
pathway_df.index.str.contains("|".join(scfa_pathways))
]
# 读取分组信息
metadata = pd.read_csv("metadata.tsv", sep="\t") # 含 sample_id, group 列
t2d_samples = metadata[metadata["group"] == "T2D"]["sample_id"].tolist()
ctrl_samples = metadata[metadata["group"] == "Control"]["sample_id"].tolist()
# Wilcoxon 检验比较 T2D vs Control
for pathway in scfa_df.index:
t2d_values = scfa_df.loc[pathway, t2d_samples] # T2D 组丰度
ctrl_values = scfa_df.loc[pathway, ctrl_samples] # 对照组丰度
stat, pval = stats.mannwhitneyu(t2d_values, ctrl_values)
print(f"{pathway}: p={pval:.4f}, T2D_mean={t2d_values.mean():.2f}, "
f"Ctrl_mean={ctrl_values.mean():.2f}")
7. 结果可视化¶
7.1 通路丰度热图¶
#!/usr/bin/env python3
"""通路丰度热图"""
import seaborn as sns # 热图绑定
import matplotlib.pyplot as plt # 画图基础库
import pandas as pd
# 读取归一化后的通路丰度
df = pd.read_csv("merged_pathabundance_relab_unstratified.tsv",
sep="\t", index_col=0)
# 选取 Top 30 通路
top30 = df.mean(axis=1).nlargest(30).index # 平均丰度 Top 30
plot_df = df.loc[top30]
# 画热图
plt.figure(figsize=(12, 10))
sns.clustermap(
plot_df, # 数据
cmap="YlOrRd", # 配色:黄-橙-红
standard_scale=0, # 按行标准化(Z-score)
figsize=(14, 10),
yticklabels=True, # 显示通路名称
col_cluster=True, # 样本聚类
row_cluster=True # 通路聚类
)
plt.savefig("pathway_heatmap.pdf", dpi=300, bbox_inches="tight")
7.2 物种功能贡献柱状图¶
# ========== HUMAnN 自带 barplot 工具 ==========
humann_barplot \
--input merged_pathabundance.tsv \ # 输入:分层的通路丰度表
--focal-feature "PWY-5484" \ # 指定关注的通路
--focal-metadata group \ # 按组着色
--last-metadata group \ # 分组变量
--output glycolysis_barplot.png # 输出柱状图
7.3 LEfSe 差异分析¶
# ========== LEfSe: 找组间差异功能特征 ==========
# LEfSe = Linear discriminant analysis Effect Size
# 用途:找出在 T2D 组和健康组之间有显著差异的通路/物种
# Step 1: 准备 LEfSe 输入格式
# 第一行 = 分组信息,后面每行 = 一个 feature
# group T2D T2D T2D Ctrl Ctrl Ctrl
# PWY-1 0.5 0.3 0.4 0.1 0.05 0.08
lefse_format_input.py \
merged_pathabundance_lefse.tsv \ # 输入:转换好格式的丰度表
formatted.in \ # 中间格式
-c 1 # 第1行是分组
# Step 2: 运行 LEfSe
lefse_run.py \
formatted.in \ # 输入
results.res \ # 输出结果
-l 2.0 # LDA score 阈值(>2 为显著)
# Step 3: 可视化
lefse_plot_res.py \
results.res \ # 输入结果
lefse_barplot.png \ # 输出柱状图
--dpi 300
lefse_plot_cladogram.py \
results.res \ # 输入
lefse_cladogram.png \ # 输出进化分支图
--dpi 300
8. 面试怎么答(5 道)¶
Q1:宏基因组功能注释的整体流程是什么?¶
"宏基因组功能注释有两条主要路线:第一条是 reads 级别 profiling,用 HUMAnN3 直接从质控后的 reads 出发,内部先调用 MetaPhlAn4 做物种鉴定,再通过核酸比对(Bowtie2 比对 ChocoPhlAn)和翻译搜索(Diamond 比对 UniRef90)量化基因家族丰度,最后用 MinPath 推断 MetaCyc 代谢通路丰度。第二条是组装后注释,先 MEGAHIT 组装 contigs,再 Prodigal -p meta 预测基因,然后用 eggNOG-mapper 做多数据库功能注释(同时得到 KEGG/GO/COG/CAZy)。在该 T2D 项目中,两条路线结合使用——HUMAnN 看通路差异,eggNOG-mapper 做 CAZy 碳水酶注释。"
Q2:HUMAnN3 输出的 gene families、pathway abundance、pathway coverage 分别代表什么?¶
"Gene families 是基因家族丰度,单位是 RPK(reads per kilobase),可以看成每个功能基因在社区中的拷贝数。Pathway abundance 是代谢通路丰度,由 MinPath 算法整合通路中所有酶的丰度推断出来,代表通路有多少个完整的'拷贝'在运转。Pathway coverage 是覆盖度(0~1),表示通路中多少比例的酶被检测到——如果 coverage 高但 abundance 低,说明通路存在但不活跃;如果 coverage 低,说明通路可能是假阳性。我在分析 T2D 数据时,会同时看 abundance 和 coverage 来过滤可靠的通路。"
Q3:HUMAnN 和 eggNOG-mapper 的区别,什么时候用哪个?¶
"核心区别在于输入和策略不同:HUMAnN 输入是原始 reads,直接做 reads-to-function profiling,不需要组装,速度快,适合'先看整体格局';eggNOG-mapper 输入是组装后预测的蛋白序列,基于直系同源做精确注释,能同时输出 KEGG、GO、COG、CAZy、Pfam 多种注释体系。如果我只关心代谢通路差异,HUMAnN 就够了;如果需要碳水化合物活性酶(CAZy)注释或者要做 COG 功能分类统计,就需要 eggNOG-mapper。两者不冲突,在该项目中是互补使用。"
Q4:T2D 肠道菌群的代谢功能有什么特征?¶
"T2D 患者肠道菌群在代谢功能上有几个明显特征:第一,产短链脂肪酸(SCFA)通路显著降低,特别是丁酸合成通路(如 CENTFERM-PWY、丁酸激酶 buk/K00929),因为产丁酸菌如 Faecalibacterium 和 Roseburia 减少;第二,支链氨基酸(BCAA)合成通路增加,文献显示高 BCAA 与胰岛素抵抗相关;第三,LPS 合成和氧化应激相关通路可能增加,与慢性炎症有关。在该项目中,用 HUMAnN 做 LEfSe 分析确实发现了丁酸合成相关 KO 在 T2D 组显著降低。"
Q5:MetaPhlAn4 物种 profiling 和 16S rRNA 分析有什么区别?¶
"主要区别有三点:第一,MetaPhlAn4 使用全基因组 marker genes(~100 万个 marker),分辨率到种甚至株水平,16S 通常只能到属水平;第二,MetaPhlAn4 直接用宏基因组 shotgun 数据,不需要单独建 16S 文库,减少实验成本和 PCR 偏倚;第三,shotgun 数据做完物种 profiling 后还能继续做功能注释(HUMAnN),而 16S 只能做物种组成,功能只能靠 PICRUSt2 预测(精度有限)。缺点是 MetaPhlAn4 需要更大的测序深度和计算资源。"
9. 速查表¶
命令速查¶
| 任务 | 命令 |
|---|---|
| 安装 HUMAnN | pip install humann |
| 下载 ChocoPhlAn 库 | humann_databases --download chocophlan full $DIR |
| 下载 UniRef90 库 | humann_databases --download uniref uniref90_diamond $DIR |
| 运行 HUMAnN | humann --input sample.fq.gz --output out/ --threads 8 |
| 归一化 | humann_renorm_table --input X.tsv --output X_cpm.tsv --units cpm |
| 合并样本 | humann_join_tables --input dir/ --output merged.tsv --file_name genefamilies |
| 重分组到 KO | humann_regroup_table --input X.tsv --output ko.tsv --groups uniref90_ko |
| 添加名称 | humann_rename_table --input ko.tsv --output named.tsv --names kegg-orthology |
| 分层拆分 | humann_split_stratified_table --input X.tsv --output dir/ |
| 柱状图 | humann_barplot --input X.tsv --focal-feature PWY-5484 --output plot.png |
| MetaPhlAn 运行 | metaphlan sample.fq.gz --input_type fastq -o profile.tsv --nproc 8 |
| eggNOG 注释 | emapper.py -i proteins.faa --itype proteins -o out -m diamond --cpu 16 |
版本信息¶
| 工具 | 最新版本 | 发布时间 | 安装方式 |
|---|---|---|---|
| HUMAnN | v3.9 | GitHub latest tag | pip install humann |
| MetaPhlAn | 4.2.4 | 2025-10 | pip install metaphlan |
| eggNOG-mapper | 2.1.13 | 2025-06 | conda install -c bioconda eggnog-mapper |
数据库大小参考¶
| 数据库 | 大小 | 用途 |
|---|---|---|
| ChocoPhlAn full | ~16 GB | HUMAnN 核酸比对 |
| UniRef90 Diamond | ~21 GB | HUMAnN 翻译搜索 |
| UniRef50 Diamond | ~7 GB | 轻量替代方案 |
| MetaPhlAn4 markers | ~1.5 GB | 物种鉴定 |
| eggNOG v5.0 | ~50 GB | eggNOG-mapper 注释(eggNOG-mapper v2 默认版本,最新数据库为 v7) |
常见报错¶
| 报错 | 原因 | 解决 |
|---|---|---|
CRITICAL ERROR: Can not find MetaPhlAn | MetaPhlAn 未安装或不在 PATH | pip install metaphlan |
Can not find the ChocoPhlAn database | 数据库未下载或路径未配置 | humann_config --update database_folders nucleotide $DIR |
ERROR: bowtie2 not found | Bowtie2 未安装 | conda install bowtie2 |
MemoryError during Diamond search | 内存不足 | 加 --memory-use minimum 或用 UniRef50 |
No reads aligned | 数据库版本不匹配或 reads 质量差 | 检查数据库版本一致性 |
10. 延伸资源¶
- HUMAnN3 论文:Beghini et al. (2021) "Integrating taxonomic, functional, and strain-level profiling of diverse microbial communities with bioBakery 3" eLife 10:e65088
- MetaPhlAn4 论文:Blanco-Miguez et al. (2023) "Extending and improving metagenomic taxonomic profiling with uncharacterized species using MetaPhlAn 4" Nature Biotechnology
- eggNOG-mapper v2 论文:Cantalapiedra et al. (2021) Molecular Biology and Evolution
- HUMAnN 官方教程:https://github.com/biobakery/biobakery/wiki/humann
- bioBakery 论坛:https://forum.biobakery.org (问题求助)
- LEfSe 在线版:https://huttenhower.sph.harvard.edu/lefse/
- KEGG 官网:https://www.kegg.jp (通路浏览)
- T2D 肠道菌群经典文献:Qin et al. (2012) Nature "A metagenome-wide association study of gut microbiota in type 2 diabetes"