跳转至

宏基因组功能注释(HUMAnN3 / eggNOG-mapper)

一句话说明:宏基因组功能注释是对整个微生物群落的代谢潜力做"体检",回答"这群菌在干什么 / 能干什么"。

面试方向:宏基因组工程师 / 通用生信工程师 | 与 26_基因组注释基础互补——26 讲单个基因组的基因预测+注释,本篇讲社区级(community-level)功能 profiling


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

类比: - 单基因组注释 = 看一个人的简历,弄清楚他会什么技能 - 宏基因组功能注释 = 看一个公司全员的技能表,弄清楚这家公司整体能做什么业务

具体来说:你有一份肠道菌群的宏基因组测序数据(几百万条 DNA 短 reads),功能注释就是搞清楚: 1. 这些菌整体有哪些代谢通路在活跃(比如产丁酸、分解纤维素) 2. 每条通路的丰度(哪些代谢能力强、哪些弱) 3. 哪个物种贡献了哪个功能(物种-功能关联)

与单基因组注释的核心区别

维度单基因组注释(26篇)宏基因组功能注释(本篇)
输入一个物种的组装基因组混合群落的 reads 或 contigs
目标这个菌有哪些基因这群菌整体能做什么
输出基因坐标 + 功能标签通路丰度表 + 基因家族丰度表
核心工具Prokka / Prodigal + eggNOGHUMAnN3 / 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(通路覆盖度)

# 文件: sample_pathcoverage.tsv
# Pathway                                                 Coverage
PWY-5484: glycolysis II (from fructose-6P)                0.95
  • 含义:通路中有多少比例的酶被检测到(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原始 readsMetaCyc 通路丰度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-mapperHUMAnN 不输出 CAZy
需要 COG 功能分类eggNOG-mapperCOG 分类一步到位
低质量/短 readsHUMAnN3不需要组装,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产生通路关键 KOKEGG 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. 速查表

命令速查

任务命令
安装 HUMAnNpip install humann
下载 ChocoPhlAn 库humann_databases --download chocophlan full $DIR
下载 UniRef90 库humann_databases --download uniref uniref90_diamond $DIR
运行 HUMAnNhumann --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
重分组到 KOhumann_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

版本信息

工具最新版本发布时间安装方式
HUMAnNv3.9GitHub latest tagpip install humann
MetaPhlAn4.2.42025-10pip install metaphlan
eggNOG-mapper2.1.132025-06conda install -c bioconda eggnog-mapper

数据库大小参考

数据库大小用途
ChocoPhlAn full~16 GBHUMAnN 核酸比对
UniRef90 Diamond~21 GBHUMAnN 翻译搜索
UniRef50 Diamond~7 GB轻量替代方案
MetaPhlAn4 markers~1.5 GB物种鉴定
eggNOG v5.0~50 GBeggNOG-mapper 注释(eggNOG-mapper v2 默认版本,最新数据库为 v7)

常见报错

报错原因解决
CRITICAL ERROR: Can not find MetaPhlAnMetaPhlAn 未安装或不在 PATHpip install metaphlan
Can not find the ChocoPhlAn database数据库未下载或路径未配置humann_config --update database_folders nucleotide $DIR
ERROR: bowtie2 not foundBowtie2 未安装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"