微生物组代谢预测(PICRUSt2 / Tax4Fun / MIMOSA)¶
一句话概述¶
微生物组代谢功能预测通过16S rRNA基因标记数据推断群落的代谢潜力,本教程覆盖PICRUSt2、Tax4Fun2和MIMOSA等工具的原理、操作和结果解读。
目录¶
1. 核心知识点¶
| 序号 | 步骤 | 工具 | 目的 | 输入 | 输出 | 关键参数 |
|---|---|---|---|---|---|---|
| 1 | 16S数据预处理 | QIIME2/DADA2 | 获得ASV表和代表序列 | 原始FASTQ | BIOM表+rep-seqs | 截断长度 |
| 2 | 序列放置 | EPA-ng/SEPP | 将ASV放到参考树上 | ASV代表序列 | 树放置文件 | 参考树/比对 |
| 3 | 基因家族预测 | PICRUSt2 (hsp.py) | 预测各ASV的基因组功能组成 | 树放置+参考基因组数据 | 各ASV的基因家族预测 | NSTI阈值 |
| 4 | 宏基因组预测 | PICRUSt2 (metagenome_pipeline) | 按丰度加权得到群落功能谱 | 基因预测+ASV丰度表 | 预测宏基因组KO/EC/MetaCyc | 分层/非分层 |
| 5 | 通路丰度推断 | PICRUSt2 (pathway_pipeline) | 从基因推断代谢通路丰度 | 预测宏基因组(EC) | MetaCyc通路丰度表 | MinPath算法 |
| 6 | Tax4Fun2预测 | Tax4Fun2 | 基于SILVA参考的功能预测 | ASV表+SILVA分类 | KEGG KO丰度表 | 参考数据库版本 |
| 7 | 差异功能分析 | ALDEx2/STAMP | 识别组间差异功能 | 功能丰度表+分组 | 差异功能列表 | FDR校正 |
| 8 | MIMOSA分析 | MIMOSA2 | 整合宏基因组与代谢组数据 | 功能丰度+代谢物浓度 | 微生物-代谢物关联 | CMP分数 |
| 9 | 通路可视化 | KEGG Mapper/Pathview | 将差异功能映射到通路图 | KO/EC列表 | 通路彩色图 | 通路ID |
| 10 | 结果验证与解读 | 多种方法 | 验证预测可靠性 | 预测结果+宏基因组数据 | 验证报告 | Spearman相关 |
2. 各步骤详解¶
步骤1:16S数据预处理¶
白话解释:代谢功能预测的起点是标准的16S rRNA基因测序数据分析——先去噪得到ASV(精确序列变体)表和每个ASV的代表序列。这些信息是后续功能预测的基础。
技术细节:
功能预测对输入数据的特殊要求: - 使用ASV而非OTU:PICRUSt2对ASV有更准确的系统发育放置,因为ASV代表精确序列 - 保留代表序列:PICRUSt2需要用代表序列做系统发育放置 - 不要做rarefaction之前预测:先用全量ASV表做预测,再对预测结果做rarefaction(如果需要) - BIOM格式:PICRUSt2接受BIOM格式的ASV表
注意:对于PICRUSt2,输入的ASV表不应该包含线粒体和叶绿体序列(这些没有参考基因组数据)。
# QIIME2 DADA2去噪
qiime dada2 denoise-paired \
--i-demultiplexed-seqs reads.qza \
--p-trunc-len-f 250 --p-trunc-len-r 200 \
--p-n-threads 16 \
--o-table table.qza \
--o-representative-sequences rep-seqs.qza \
--o-denoising-stats stats.qza
# 去除线粒体和叶绿体
qiime taxa filter-table \
--i-table table.qza \
--i-taxonomy taxonomy.qza \
--p-exclude mitochondria,chloroplast \
--o-filtered-table table_filtered.qza
# 导出为BIOM格式(PICRUSt2输入)
qiime tools export --input-path table_filtered.qza --output-path exported/
qiime tools export --input-path rep-seqs.qza --output-path exported/
# 得到 exported/feature-table.biom 和 exported/dna-sequences.fasta
步骤2:序列放置(Phylogenetic Placement)¶
白话解释:PICRUSt2需要知道每个ASV在生命树上的位置,才能利用系统发育信息推断它最可能有什么基因。"序列放置"就是把未知的ASV序列"插"到一棵已有的参考树上,找到它最可能的位置。
技术细节:
PICRUSt2使用两种放置方法: - EPA-ng(默认):使用最大似然方法将查询序列放置到参考树上 - SEPP(备选):基于分治策略的放置方法,对大数据集更高效
参考树和比对来自IMG/PICRUSt2参考数据: - 包含~20,000个参考基因组 - 每个参考基因组有完整的功能注释(KO、EC、MetaCyc等)
放置质量由NSTI(Nearest Sequenced Taxon Index)衡量: - NSTI值低 = ASV离最近的参考基因组近,预测可靠 - NSTI值高 = ASV代表的微生物没有近缘参考基因组,预测不可靠 - PICRUSt2默认排除NSTI > 2的ASV
# PICRUSt2内置的序列放置(通常不需要单独运行)
place_seqs.py \
-s exported/dna-sequences.fasta \
-o placed_seqs.tre \
-p 16 \
--intermediate placement_working
# QIIME2方式(使用q2-picrust2插件)
qiime fragment-insertion sepp \
--i-representative-sequences rep-seqs.qza \
--i-reference-database sepp-refs-silva-128.qza \
--p-threads 16 \
--o-tree insertion-tree.qza \
--o-placements insertion-placements.qza
步骤3:基因家族预测(Hidden State Prediction)¶
白话解释:知道了每个ASV在参考树上的位置后,PICRUSt2利用已测序参考基因组的功能注释,通过系统发育方法"猜测"每个ASV对应的微生物可能有哪些基因。原理是:进化上相近的物种通常有相似的基因组组成。
技术细节:
PICRUSt2的隐状态预测(HSP)使用以下方法: - 最大似然祖先状态重建:沿参考树推断每个内部节点的基因含量,然后对ASV所在的枝长进行插值 - 支持的方法:pic(默认,快速)、mp(最大简约)、empirical(只使用最近邻) - NSTI计算:同时计算每个ASV到最近参考基因组的距离
输出:每个ASV的预测基因家族拷贝数矩阵(ASV × 基因家族),可以是KO、EC或MetaCyc反应。
这一步是PICRUSt2最核心的创新——通过系统发育关系传播功能信息。但其准确性严重依赖参考数据库的覆盖度。
# 基因家族预测(通常作为picrust2_pipeline的一部分自动运行)
hsp.py \
-i 16S \
-t placed_seqs.tre \
-o KO_predicted.tsv.gz \
-p 16 \
-n \
--observed_trait_table /path/to/picrust2/default_files/prokaryotic/KO.tsv.gz
# EC number预测
hsp.py \
-i 16S \
-t placed_seqs.tre \
-o EC_predicted.tsv.gz \
-p 16 \
-n \
--observed_trait_table /path/to/picrust2/default_files/prokaryotic/EC.tsv.gz
步骤4:宏基因组预测¶
白话解释:上一步知道了每个ASV可能有什么基因,这一步将ASV丰度信息"加权"——高丰度的ASV对群落功能的贡献更大。最终得到每个样本的预测宏基因组功能谱(类似于如果做了宏基因组测序会看到的结果)。
技术细节:
计算公式:predicted_metagenome[sample,gene] = Σ(ASV_abundance[sample,asv] × gene_copies[asv,gene])
即每个样本中每个基因的预测丰度 = 所有ASV丰度乘以各自的基因拷贝数之和。
输出格式选项: - 非分层(unstratified):只有总的基因丰度(最常用) - 分层(stratified):保留每个基因由哪些ASV贡献的信息(更详细,文件更大)
分层输出对于识别"哪些微生物贡献了某个功能"非常有用,但会显著增加文件大小和下游分析复杂度。
# 宏基因组预测
metagenome_pipeline.py \
-i exported/feature-table.biom \
-m KO_predicted.tsv.gz \
-o metagenome_out \
--strat_out \
--max_nsti 2
# 输出文件:
# metagenome_out/pred_metagenome_unstrat.tsv.gz (非分层,样本×基因)
# metagenome_out/pred_metagenome_strat.tsv.gz (分层,样本×基因×ASV贡献)
# metagenome_out/seqtab_norm.tsv.gz (标准化后的ASV表)
# metagenome_out/weighted_nsti.tsv.gz (加权NSTI)
步骤5:通路丰度推断¶
白话解释:从基因(KO/EC编号)到代谢通路的转换。一个代谢通路由多个基因/酶组成,只有当通路中的关键酶都存在时,这个通路才算"活跃"。PICRUSt2使用MinPath算法保守地推断通路丰度。
技术细节:
通路推断使用MinPath(Minimal Set of Pathways)算法: - 给定一组基因,MinPath找到能解释这些基因的最小通路集合 - 这避免了简单加和方法的过度膨胀问题(同一个基因可能属于多个通路) - 通路丰度基于关键限速酶的丰度,而非所有组分的简单平均
PICRUSt2使用MetaCyc通路数据库(也可以映射到KEGG通路),输出每个样本的通路丰度。
通路覆盖度(pathway coverage):一个通路中被检测到的反应比例。低覆盖度的通路预测不可靠。
# 通路丰度推断
pathway_pipeline.py \
-i metagenome_out/pred_metagenome_strat.tsv.gz \
-o pathways_out \
--intermediate pathway_working \
-p 16
# 输出文件:
# pathways_out/path_abun_unstrat.tsv.gz (通路丰度,非分层)
# pathways_out/path_abun_strat.tsv.gz (通路丰度,分层)
# pathways_out/path_cov_unstrat.tsv.gz (通路覆盖度)
步骤6:Tax4Fun2预测¶
白话解释:Tax4Fun2是PICRUSt2的替代工具,它使用SILVA分类数据库和KEGG数据库进行功能预测。与PICRUSt2不同,它基于与用户定义的参考基因组集合的序列相似性来进行预测。
技术细节:
Tax4Fun2 vs PICRUSt2的主要区别: - 参考数据库:Tax4Fun2使用用户提供的参考基因组(可以包含自己的基因组),PICRUSt2使用固定的预计算数据 - 预测方法:Tax4Fun2基于序列相似性加权,PICRUSt2基于系统发育放置 - 灵活性:Tax4Fun2允许自定义参考数据库(适合研究非标准环境) - 输出:Tax4Fun2直接输出KEGG KO和pathway丰度
Tax4Fun2的工作流程: 1. 将ASV序列比对到参考基因组的16S序列 2. 根据相似性加权,推断各ASV最可能来自哪些参考基因组 3. 用参考基因组的KEGG注释加权计算功能丰度
# Tax4Fun2 R包使用
library(Tax4Fun2)
# 1. 构建参考数据库(只需一次)
buildReferenceData(
path_to_tax4fun2_data = "Tax4Fun2_ReferenceData_v2",
path_to_user_data = "user_reference_genomes/", # 可选:自定义参考基因组
path_to_SILVA = "SILVA_138_SSURef_NR99_tax_silva.fasta",
num_threads = 16
)
# 2. 运行功能预测
# 输入:ASV的FASTA文件和丰度表
result <- runRefBlast(
path_to_otus = "rep_seqs.fasta",
path_to_reference_data = "Tax4Fun2_ReferenceData_v2",
path_to_temp_folder = "tax4fun2_temp",
database_mode = "Ref99NR",
num_threads = 16
)
# 预测功能丰度
predictions <- makeFunctionalPrediction(
path_to_otu_table = "asv_table.txt", # 样本×ASV丰度表
path_to_reference_data = "Tax4Fun2_ReferenceData_v2",
path_to_temp_folder = "tax4fun2_temp",
min_identity_to_reference = 0.97,
normalize_by_copy_number = TRUE
)
# 提取KO丰度和通路丰度
ko_table <- predictions$KO_table
pathway_table <- predictions$pathway_table
write.table(ko_table, "tax4fun2_KO_predictions.tsv", sep="\t", quote=FALSE)
write.table(pathway_table, "tax4fun2_pathway_predictions.tsv", sep="\t", quote=FALSE)
步骤7:差异功能分析¶
白话解释:得到功能预测表后,下一步是比较不同条件/组别之间哪些功能(基因/通路)存在显著差异。这类似于差异基因表达分析,但分析对象是代谢功能。
技术细节:
推荐的差异分析方法: - ALDEx2:基于Dirichlet分布的组合数据友好方法,控制假阳性 - DESeq2:借用RNA-seq差异表达框架,适合计数数据 - LEfSe:使用LDA效应大小的经典微生物组方法 - STAMP:可视化友好的统计分析工具
注意事项: - 功能预测数据是组合数据(相对丰度),应使用组合数据友好的统计方法 - 需要多重检验校正(FDR) - 效应量(effect size)和统计显著性一样重要 - 考虑每个通路的预测可靠性(NSTI、通路覆盖度)
library(ALDEx2)
# 读取功能预测表
ko_table <- read.table("metagenome_out/pred_metagenome_unstrat.tsv.gz",
header=TRUE, row.names=1, sep="\t")
# 样本分组信息
groups <- c(rep("Control", 10), rep("Treatment", 10))
# ALDEx2差异分析
aldex_result <- aldex(
reads = round(ko_table), # ALDEx2需要整数
conditions = groups,
mc.samples = 128,
test = "t",
effect = TRUE,
include.sample.summary = FALSE
)
# 筛选显著差异功能
sig_kos <- aldex_result[aldex_result$wi.eBH < 0.05 & abs(aldex_result$effect) > 1, ]
sig_kos <- sig_kos[order(sig_kos$wi.eBH), ]
cat("显著差异KO数:", nrow(sig_kos), "\n")
步骤8:MIMOSA分析¶
白话解释:MIMOSA(Model-based Integration of Metabolite Observations and Species Abundances)将微生物组数据和代谢组数据整合分析,找出微生物功能与代谢物浓度之间的关联——哪些微生物可能在产生或消耗某种代谢物?
技术细节:
MIMOSA2的核心思想: 1. 从微生物组数据预测代谢物的产生/消耗潜力(Community Metabolic Potential, CMP) 2. 将CMP与实际测量的代谢物浓度进行比较 3. 一致性高的代谢物-微生物关联更可能是真实的功能关系
CMP分数的计算: - 正CMP:表示微生物群落有能力产生该代谢物 - 负CMP:表示微生物群落有能力消耗该代谢物 - CMP与实际浓度相关:支持微生物对该代谢物水平有贡献
# MIMOSA2分析
library(mimosa2)
# 输入数据准备
# 1. 微生物丰度表(属/种水平)
species_table <- read.table("species_abundance.tsv", header=TRUE, row.names=1)
# 2. 代谢物浓度表
metabolite_table <- read.table("metabolite_concentrations.tsv", header=TRUE, row.names=1)
# 3. 运行MIMOSA
mimosa_result <- run_mimosa(
species_data = species_table,
metabolite_data = metabolite_table,
kegg_data = "kegg_reaction_data.rds", # KEGG反应数据
num_permutations = 1000
)
# 4. 查看显著关联
significant_pairs <- mimosa_result$results %>%
filter(p_adjusted < 0.05) %>%
arrange(p_adjusted)
# 5. 特定代谢物的贡献分解
butyrate_contributors <- get_contributors(
mimosa_result,
metabolite = "C00246" # KEGG ID for butyrate
)
步骤9:通路可视化¶
白话解释:把差异功能结果"画"到KEGG代谢通路图上,用颜色标注上调/下调的酶和反应,直观展示代谢网络的变化。
技术细节:
可视化工具: - KEGG Mapper(在线):直接上传KO列表到KEGG网站着色 - Pathview(R包):程序化生成KEGG通路图,支持批量处理 - iPath3(在线):全局代谢地图可视化 - MetaCyc:PICRUSt2输出的MetaCyc通路可用其自带工具可视化
library(pathview)
# 准备数据:KO编号为行名,效应量为值
ko_data <- sig_kos$effect
names(ko_data) <- rownames(sig_kos)
# 可视化特定通路(如丁酸代谢 map00650)
pathview(
gene.data = ko_data,
pathway.id = "00650",
species = "ko",
out.suffix = "butyrate_metabolism",
kegg.native = TRUE,
limit = list(gene=c(-2, 2)),
low = list(gene="blue"),
high = list(gene="red")
)
# 批量可视化多个通路
pathways_of_interest <- c("00010", "00020", "00030", "00650", "00680")
for (pw in pathways_of_interest) {
pathview(gene.data=ko_data, pathway.id=pw, species="ko",
out.suffix=paste0("pathway_", pw))
}
步骤10:结果验证与解读¶
白话解释:预测毕竟是预测——需要评估其可靠性。最好的验证方法是与同一样本的宏基因组测序数据比较。如果没有宏基因组数据,可以检查NSTI分布、与文献比较、或做功能层面的内部一致性检查。
技术细节:
验证策略: 1. 与宏基因组比较(金标准):同一批样本同时做16S和宏基因组,计算预测功能与实际功能的Spearman相关 2. NSTI分布检查:加权NSTI越低越好,NSTI>2的样本应从分析中排除 3. 预测准确性的已知规律: - 管家功能(如核糖体蛋白)预测准确度高 - 水平转移基因(如抗生素抗性基因)预测不准确 - 环境特异功能预测可能偏差大 4. 文献验证:差异通路是否与已知的微生物学知识一致
# 验证:比较PICRUSt2预测与宏基因组实测
predicted <- read.table("pred_metagenome_unstrat.tsv.gz", header=TRUE, row.names=1)
observed <- read.table("actual_metagenome_ko.tsv", header=TRUE, row.names=1)
# 对共同样本和共同KO计算相关
common_samples <- intersect(colnames(predicted), colnames(observed))
common_kos <- intersect(rownames(predicted), rownames(observed))
correlations <- sapply(common_samples, function(s) {
cor(predicted[common_kos, s], observed[common_kos, s], method="spearman")
})
cat("预测-实测相关 (Spearman):\n")
cat(" 中位数:", median(correlations), "\n")
cat(" 范围:", range(correlations), "\n")
# NSTI分布
nsti <- read.table("metagenome_out/weighted_nsti.tsv.gz", header=TRUE)
cat("\n加权NSTI:\n")
cat(" 中位数:", median(nsti$weighted_NSTI), "\n")
cat(" >2的样本:", sum(nsti$weighted_NSTI > 2), "/", nrow(nsti), "\n")
3. 实战命令/代码(完整流程)¶
#!/bin/bash
# ====================================================
# 微生物组代谢功能预测完整流程 (PICRUSt2)
# ====================================================
set -euo pipefail
THREADS=16
OUTDIR="functional_prediction"
mkdir -p ${OUTDIR}
# ---- PICRUSt2一站式流程 ----
echo "=== PICRUSt2完整流程 ==="
picrust2_pipeline.py \
-s exported/dna-sequences.fasta \
-i exported/feature-table.biom \
-o ${OUTDIR}/picrust2 \
-p ${THREADS} \
--stratified \
--per_sequence_contrib \
--max_nsti 2 \
--verbose
echo "PICRUSt2输出文件:"
ls -la ${OUTDIR}/picrust2/
# 输出说明:
# KO_metagenome_out/ - KEGG Orthology预测
# EC_metagenome_out/ - EC number预测
# pathways_out/ - MetaCyc通路预测
# ---- 添加功能描述 ----
echo "=== 添加功能描述 ==="
add_descriptions.py \
-i ${OUTDIR}/picrust2/KO_metagenome_out/pred_metagenome_unstrat.tsv.gz \
-m KO \
-o ${OUTDIR}/picrust2/KO_with_descriptions.tsv.gz
add_descriptions.py \
-i ${OUTDIR}/picrust2/pathways_out/path_abun_unstrat.tsv.gz \
-m METACYC \
-o ${OUTDIR}/picrust2/pathways_with_descriptions.tsv.gz
echo "=== 完成 ==="
#!/usr/bin/env Rscript
# ====================================================
# 功能预测结果分析与可视化
# ====================================================
library(tidyverse)
library(ALDEx2)
library(ggplot2)
library(pheatmap)
# ---- 1. 读取PICRUSt2结果 ----
ko_table <- read.table("functional_prediction/picrust2/KO_with_descriptions.tsv.gz",
header=TRUE, sep="\t", row.names=1, comment.char="")
pathway_table <- read.table("functional_prediction/picrust2/pathways_with_descriptions.tsv.gz",
header=TRUE, sep="\t", row.names=1, comment.char="")
# 分离描述列
ko_desc <- ko_table$description
ko_table$description <- NULL
pathway_desc <- pathway_table$description
pathway_table$description <- NULL
# ---- 2. 差异功能分析 (ALDEx2) ----
metadata <- read.table("metadata.tsv", header=TRUE, sep="\t")
groups <- metadata$group[match(colnames(ko_table), metadata$sample_id)]
# KO水平差异分析
aldex_ko <- aldex(
reads = round(as.data.frame(ko_table)),
conditions = groups,
mc.samples = 128,
test = "t",
effect = TRUE
)
sig_kos <- aldex_ko %>%
rownames_to_column("KO") %>%
filter(wi.eBH < 0.05, abs(effect) > 0.5) %>%
arrange(wi.eBH)
cat(sprintf("显著差异KO: %d\n", nrow(sig_kos)))
# 通路水平差异分析
aldex_pw <- aldex(
reads = round(as.data.frame(pathway_table)),
conditions = groups,
mc.samples = 128,
test = "t",
effect = TRUE
)
sig_pathways <- aldex_pw %>%
rownames_to_column("pathway") %>%
filter(wi.eBH < 0.05, abs(effect) > 0.5) %>%
arrange(wi.eBH)
cat(sprintf("显著差异通路: %d\n", nrow(sig_pathways)))
# ---- 3. 可视化 ----
# 差异通路柱状图
top_pathways <- sig_pathways %>% head(20)
top_pathways$description <- pathway_desc[match(top_pathways$pathway, rownames(pathway_table))]
ggplot(top_pathways, aes(x=reorder(description, effect), y=effect, fill=effect>0)) +
geom_col() +
coord_flip() +
scale_fill_manual(values=c("TRUE"="coral", "FALSE"="steelblue"),
labels=c("TRUE"="Treatment ↑", "FALSE"="Control ↑")) +
labs(x="", y="Effect Size (ALDEx2)", title="显著差异代谢通路 (Top 20)") +
theme_minimal(base_size=12) +
theme(legend.title=element_blank())
ggsave("functional_prediction/diff_pathways.pdf", width=10, height=8)
# NSTI分布图
nsti <- read.table("functional_prediction/picrust2/KO_metagenome_out/weighted_nsti.tsv.gz",
header=TRUE)
ggplot(nsti, aes(x=weighted_NSTI)) +
geom_histogram(bins=30, fill="steelblue", color="white") +
geom_vline(xintercept=2, color="red", linetype="dashed") +
labs(x="Weighted NSTI", y="样本数", title="预测可靠性评估 (NSTI分布)") +
annotate("text", x=2.1, y=Inf, label="NSTI=2 阈值", vjust=2, color="red") +
theme_minimal()
ggsave("functional_prediction/nsti_distribution.pdf", width=7, height=5)
4. 面试常问点¶
Q1:PICRUSt2的基本原理是什么?它如何从16S数据推断代谢功能?
PICRUSt2通过以下步骤从16S rRNA数据推断功能:(1)将ASV序列放置到参考系统发育树上(EPA-ng);(2)利用已测序参考基因组的功能注释,通过祖先状态重建预测每个ASV的基因组功能组成;(3)将ASV丰度加权求和得到群落水平的预测宏基因组;(4)使用MinPath从基因丰度推断通路丰度。核心假设是系统发育关系近的物种功能组成相似。
Q2:PICRUSt2的主要局限性是什么?什么情况下预测不可靠?
主要局限:(1)依赖参考数据库——对于没有近缘参考基因组的微生物(高NSTI),预测不准确;(2)水平基因转移破坏了系统发育预测的基础——高度可移动的基因(如抗生素抗性基因)无法准确预测;(3)无法区分基因的表达状态——有基因不代表在表达;(4)对环境特异性功能(非核心代谢)预测差;(5)分辨率上限受16S信息限制。不可靠场景:极端环境微生物、古菌丰富样本、宿主特异共生菌。
Q3:PICRUSt2和Tax4Fun2有什么区别?如何选择?
PICRUSt2使用系统发育放置方法,有预计算的大规模参考数据;Tax4Fun2基于序列相似性搜索,支持自定义参考数据库。选择建议:(1)通用环境(人体肠道、土壤等)首选PICRUSt2(参考数据库覆盖好);(2)特殊环境或有自定义参考基因组时用Tax4Fun2;(3)PICRUSt2输出MetaCyc通路,Tax4Fun2输出KEGG通路——根据下游分析需求选择。
Q4:NSTI值代表什么?如何使用它?
NSTI(Nearest Sequenced Taxon Index)是每个ASV到最近参考基因组的系统发育距离。值越小,表示参考数据库中有越近的参考,预测越可靠。加权NSTI是按ASV丰度加权的样本级指标。使用建议:(1)NSTI>2的ASV应排除;(2)报告样本的加权NSTI分布;(3)高NSTI的样本/研究应谨慎解读功能预测结果;(4)如果大部分样本NSTI很高,考虑直接做宏基因组测序。
Q5:功能预测能否替代宏基因组测序?
不能完全替代,但在一定条件下可作为经济有效的替代方案。适合替代的情况:研究管家功能的群落水平差异;样本量大但预算有限;初步筛选候选功能。不适合替代的情况:需要准确的物种水平功能归属;研究可移动遗传元素;需要MAG构建和代谢重建;极端或未充分研究的环境。最佳策略:对部分样本同时做16S和宏基因组验证预测准确性,其余样本用16S+预测。
Q6:MIMOSA如何整合宏基因组和代谢组数据?
MIMOSA计算Community Metabolic Potential (CMP)——基于微生物组功能组成预测的代谢物产生/消耗潜力,然后与实际测量的代谢物浓度做相关分析。如果CMP与代谢物浓度显著相关,说明微生物群落的功能组成可以解释该代谢物的水平变化。这帮助建立"微生物→功能→代谢物"的因果链,比单独分析更有生物学意义。
5. 易错/易混淆点¶
混淆"基因存在"和"基因表达":PICRUSt2预测的是基因组中基因的存在/拷贝数,不是转录水平。有基因不代表在特定条件下表达。功能预测是"潜力"而非"活性"。
对高NSTI样本过度解读:加权NSTI>2的样本意味着群落中的微生物与参考数据库差距大,预测可靠性低。应在文章中报告NSTI分布,并排除或标注高NSTI样本。
使用OTU表而非ASV表:PICRUSt2设计时考虑了ASV的精确序列信息。使用97%聚类的OTU会引入不必要的序列不确定性,影响系统发育放置的准确性。
忽略组合数据问题:功能预测输出的相对丰度是组合数据,各组分非独立。使用t检验或标准相关分析会产生虚假结论。应使用ALDEx2、ANCOM等组合数据友好的方法。
将PICRUSt2预测结果当作定量准确的宏基因组数据:预测和实测之间的相关系数通常为0.6-0.8,存在系统性偏差。定性结论(哪些通路差异最大)比定量结论(丰度差异的精确倍数)更可靠。
对水平转移基因做预测:抗生素抗性基因、毒力因子等常通过水平基因转移传播,与16S系统发育关系不一致。用PICRUSt2预测这类基因是不合适的。
忘记过滤线粒体/叶绿体序列:这些来自宿主细胞器的序列在PICRUSt2参考数据库中没有对应条目,会增加NSTI并引入噪音。
6. 补充知识¶
与宏基因组测序的互补策略¶
实际研究中的推荐策略: - 大样本筛选:16S + PICRUSt2预测(成本低,适合数百个样本) - 验证子集:选择代表性样本做鸟枪法宏基因组测序 - 功能验证:宏转录组(转录活性)或代谢组(最终产物)
其他功能预测工具¶
- BugBase:表型水平预测(致病性、氧需求、革兰氏染色等)
- FAPROTAX:基于文献的功能注释(环境微生物组,尤其是生物地球化学循环)
- Piphillin:使用直接BLAST比对到KEGG参考基因组
- iVikodak:针对人体微生物组优化的功能预测
推荐资源¶
- PICRUSt2: https://github.com/picrust/picrust2
- PICRUSt2论文: Douglas et al. (2020) Nature Biotechnology
- Tax4Fun2: https://github.com/Clean-Soil/Tax4Fun2
- MIMOSA2: https://github.com/borenstein-lab/MIMOSA2
- MetaCyc: https://metacyc.org/
- KEGG: https://www.genome.jp/kegg/