微生物组功能代谢整合¶
一句话概述¶
通过MMVEC、MelonnPan等工具将16S扩增子/宏基因组数据与代谢组学数据进行联合分析,揭示微生物组成与代谢物谱之间的关联,是理解微生物功能输出和宿主-微生物代谢互作的关键整合策略。
核心知识点表格¶
| 知识点 | 关键内容 | 常用工具 |
|---|---|---|
| 多组学整合策略 | 相关性/预测/因果推断 | mixOmics, MOFA |
| MMVEC | 神经网络微生物-代谢物共现 | mmvec (Qiime2插件) |
| MelonnPan | 从微生物组预测代谢物 | MelonnPan (R/Python) |
| 稀疏CCA | 正则化典型相关分析 | mixOmics, PMA |
| Procrustes分析 | 两组ordination对齐 | vegan |
| 网络可视化 | 微生物-代谢物互作网络 | Cytoscape, ggnetwork |
| 功能预测 | 从16S预测功能潜力(注意局限性) | PICRUSt2, PICRUSt2-SC, Tax4Fun |
各步骤详解¶
第一步:理解微生物-代谢物整合分析¶
白话解释: 微生物在肠道中就像一个"化工厂",它们代谢食物产生各种小分子代谢物(短链脂肪酸、胆汁酸、氨基酸衍生物等),这些代谢物直接影响宿主健康。通过同时测量同一样本的微生物组成和代谢物谱,然后用统计/机器学习方法找到它们之间的关联,就能揭示"哪些微生物产生/消耗哪些代谢物"。
技术细节: - 配对样本设计:同一样本同时提取DNA(微生物组)和代谢物(LC-MS/GC-MS) - 组成数据挑战:微生物丰度和代谢物浓度都有特殊数据性质 - 多对多关系:一种微生物可能影响多种代谢物,反之亦然 - 因果方向不确定:关联不等于因果(微生物产生代谢物?还是代谢物影响微生物?)
第二步:MMVEC微生物-代谢物条件概率推断¶
白话解释: MMVEC (Microbe-Metabolite Vectors) 使用神经网络学习微生物和代谢物之间的条件概率关系。核心思想:如果某种微生物出现时某种代谢物也倾向于出现,它们就有正向关联。与简单相关不同,MMVEC能处理组成数据和零膨胀问题。
代码示例:
# 安装mmvec
# 注意:MMVEC 自2022年后更新较少,仅兼容 QIIME2 2020.6 及更早版本
# 推荐单独安装使用 Python API:
pip install mmvec
# 或使用 mamba(更稳定):
# conda create -n mmvec_env mamba python=3.7 -c conda-forge
# conda activate mmvec_env
# mamba install mmvec -c conda-forge
# 若需在 QIIME2 环境中使用:
# pip install git+https://github.com/biocore/mmvec.git
# qiime dev refresh-cache
# 准备输入数据
# 1. 微生物丰度表 (BIOM格式): microbe_table.biom
# 2. 代谢物丰度表 (BIOM格式): metabolite_table.biom
# 将TSV转为BIOM
biom convert -i microbe_table.tsv -o microbe_table.biom --to-hdf5 --table-type="OTU table"
biom convert -i metabolite_table.tsv -o metabolite_table.biom --to-hdf5 --table-type="Metabolite table"
# 使用mmvec Python API
import mmvec
import biom
import pandas as pd
import numpy as np
# 读取数据
microbe_table = biom.load_table("microbe_table.biom")
metabolite_table = biom.load_table("metabolite_table.biom")
# 转为DataFrame
microbe_df = pd.DataFrame(
microbe_table.to_dataframe().T) # samples × microbes
metabolite_df = pd.DataFrame(
metabolite_table.to_dataframe().T) # samples × metabolites
# 确保样本对齐
common_samples = microbe_df.index.intersection(metabolite_df.index)
microbe_df = microbe_df.loc[common_samples]
metabolite_df = metabolite_df.loc[common_samples]
# 运行mmvec (使用命令行更方便)
# mmvec paired-omics \
# --microbe-file microbe_table.biom \
# --metabolite-file metabolite_table.biom \
# --summary-dir mmvec_output/ \
# --epochs 1000 \
# --batch-size 32 \
# --latent-dim 3 \
# --learning-rate 1e-3 \
# --num-testing-examples 10
# Qiime2方式运行
# qiime mmvec paired-omics \
# --i-microbes microbe_table.qza \
# --i-metabolites metabolite_table.qza \
# --p-epochs 1000 \
# --p-latent-dim 3 \
# --o-conditionals conditionals.qza \
# --o-conditional-biplot biplot.qza
# 解读输出:条件概率矩阵
# conditionals: log条件概率 log P(metabolite | microbe)
# 正值表示微生物和代谢物正关联
conditionals = pd.read_csv("mmvec_output/conditionals.tsv",
sep="\t", index_col=0)
# 提取top关联
def get_top_associations(conditionals, n=20):
"""提取最强的微生物-代谢物关联"""
associations = []
for microbe in conditionals.index:
for metabolite in conditionals.columns:
associations.append({
"microbe": microbe,
"metabolite": metabolite,
"log_conditional": conditionals.loc[microbe, metabolite]
})
df = pd.DataFrame(associations)
df = df.sort_values("log_conditional", ascending=False)
return df.head(n)
top_assoc = get_top_associations(conditionals, n=50)
print(top_assoc)
第三步:MelonnPan代谢物预测¶
白话解释: MelonnPan训练一个机器学习模型(弹性网回归),用微生物组成来预测代谢物浓度。如果预测准确,说明特定微生物确实与特定代谢物有强关联。还能推断没有同时做代谢组的样本的代谢物谱。
代码示例:
# 安装MelonnPan
# devtools::install_github("biobakery/melonnpan")
library(melonnpan)
# 准备数据
# 训练集:配对的微生物组+代谢组数据
microbe_train <- read.csv("microbe_abundance_train.csv", row.names=1)
metabolite_train <- read.csv("metabolite_concentration_train.csv", row.names=1)
# 训练MelonnPan模型
melonnpan_train <- melonnpan.train(
metab = metabolite_train, # samples × metabolites
microb = microbe_train, # samples × microbes
output = "melonnpan_output/",
nfolds = 10, # 10-fold CV
alpha = 0.5, # elastic net mixing (0=ridge, 1=lasso)
cores = 8)
# 查看预测质量(交叉验证R²)
pred_quality <- read.csv("melonnpan_output/MelonnPan_Training_Summary.txt", sep="\t")
# 保留R² > 0.3的代谢物作为可靠预测
well_predicted <- pred_quality[pred_quality$Q2 > 0.3, ]
cat("可靠预测的代谢物数:", nrow(well_predicted), "\n")
# 预测新样本的代谢物
microbe_new <- read.csv("microbe_abundance_new.csv", row.names=1)
melonnpan_predict <- melonnpan.predict(
microb = microbe_new,
trained.model = melonnpan_train,
output = "melonnpan_predictions/")
# 读取预测结果
predicted_metabolites <- read.csv(
"melonnpan_predictions/MelonnPan_Predicted_Metabolites.txt",
sep="\t", row.names=1)
第四步:稀疏CCA多组学整合¶
白话解释: 稀疏典型相关分析(sparse CCA)同时分析微生物矩阵和代谢物矩阵,找到让两组数据最大化相关的"潜在轴"——哪些微生物组合与哪些代谢物组合最相关。正则化使结果稀疏(只选择最关键的特征)。
代码示例:
library(mixOmics)
# 准备数据(CLR转化微生物丰度,log转化代谢物)
library(compositions)
X_microbe <- as.matrix(clr(microbe_df + 0.5)) # CLR转化
Y_metabolite <- log10(metabolite_df + 1) # log转化
# 稀疏PLS(替代CCA,更稳定)
spls_result <- spls(
X = X_microbe,
Y = Y_metabolite,
ncomp = 3,
keepX = c(20, 20, 20), # 每个component保留20个微生物
keepY = c(15, 15, 15), # 每个component保留15个代谢物
mode = "canonical")
# 可视化
# 样本散点图(第一对canonical variates)
plotIndiv(spls_result, comp = 1:2,
group = metadata$group,
legend = TRUE,
title = "sPLS: Microbe-Metabolite Integration")
# 变量相关性圆
plotVar(spls_result, comp = 1:2,
var.names = TRUE, cex = 3,
title = "Variable Correlation Circle")
# 网络图(微生物-代谢物关联)
network_result <- network(spls_result,
comp = 1:2,
cutoff = 0.7, # 相关系数阈值
color.node = c("blue", "red"), # 微生物蓝色,代谢物红色
shape.node = c("circle", "rectangle"))
# CIM热图(Clustered Image Map)
cim_result <- cim(spls_result,
comp = 1:2,
xlab = "Metabolites",
ylab = "Microbes",
margins = c(5, 6))
# 提取关键关联对
# 获取loading(每个component的重要特征)
loadings_X <- selectVar(spls_result, comp=1)$X$value
loadings_Y <- selectVar(spls_result, comp=1)$Y$value
第五步:Procrustes分析和Mantel检验¶
白话解释: Procrustes分析比较两个ordination(如微生物PCoA和代谢物PCoA)的整体模式是否一致。Mantel检验则直接检验两个距离矩阵是否相关。这些方法回答的问题是:微生物群落结构和代谢物谱的整体模式是否协调变化?
代码示例:
library(vegan)
# 计算距离矩阵
dist_microbe <- vegdist(microbe_df, method="bray")
dist_metabolite <- vegdist(metabolite_df, method="euclidean")
# Mantel检验(整体相关性)
mantel_result <- mantel(dist_microbe, dist_metabolite,
method="spearman", permutations=9999)
cat("Mantel r:", mantel_result$statistic, "\n")
cat("p-value:", mantel_result$signif, "\n")
# Procrustes分析
pcoa_microbe <- cmdscale(dist_microbe, k=2, eig=TRUE)
pcoa_metabolite <- cmdscale(dist_metabolite, k=2, eig=TRUE)
proc <- protest(pcoa_microbe$points, pcoa_metabolite$points,
permutations=9999)
cat("Procrustes m²:", proc$ss, "\n") # 越小越相似
cat("Correlation:", sqrt(1-proc$ss), "\n")
cat("p-value:", proc$signif, "\n")
# 可视化Procrustes
plot(proc, kind=1, main=paste("Procrustes r =", round(sqrt(1-proc$ss), 3)))
# 带分组信息的可视化
library(ggplot2)
proc_df <- data.frame(
x1 = proc$Yrot[,1], y1 = proc$Yrot[,2], # 旋转后的代谢物坐标
x2 = proc$X[,1], y2 = proc$X[,2], # 微生物坐标
group = metadata$group)
ggplot(proc_df) +
geom_segment(aes(x=x1, y=y1, xend=x2, yend=y2), alpha=0.3) +
geom_point(aes(x=x1, y=y1, color=group), shape=16, size=3) +
geom_point(aes(x=x2, y=y2, color=group), shape=17, size=3) +
theme_bw() + ggtitle("Procrustes: Microbiome ↔ Metabolome")
第六步:功能预测与验证¶
白话解释: 用PICRUSt2从16S数据预测微生物群落的功能潜力(MetaCyc通路丰度),然后与实际测量的代谢物比较,验证功能预测的可靠性。
PICRUSt2 关键局限性(面试必知): 1. 依赖参考基因组覆盖度:预测准确性取决于ASV在参考数据库中的代表程度,可通过NSTI值评估(NSTI越高越不可靠) 2. 环境偏差:人类肠道的预测精度优于非人类环境(如瘤胃、土壤),因为参考基因组偏向人体相关菌 3. 无法预测未知基因家族:只能预测已收录在KEGG KO等数据库中的功能,"暗物质"基因被忽略 4. 缺乏菌株水平分辨率:16S无法区分同一种内不同菌株的功能差异 5. 默认数据库可能过时:原始数据库基于IMG,推荐使用更新版PICRUSt2-SC(基于GTDB r214,物种数量提升3-4倍) 6. 是功能"潜力"而非"活性":预测的是基因组中存在的基因,不代表这些基因实际在表达
代码示例:
# PICRUSt2功能预测
conda install -c bioconda picrust2
# 或使用 mamba(更快):mamba install -c bioconda picrust2
# 注意:推荐同时安装 PICRUSt2-SC 更新数据库(基于GTDB r214,物种覆盖提升3-4倍)
# 从ASV序列和丰度表预测功能
picrust2_pipeline.py \
-s asv_sequences.fasta \
-i asv_table.biom \
-o picrust2_output/ \
-p 16 \
--stratified \
--per_sequence_contrib
# 注意:--stratified 和 --per_sequence_contrib 会显著增加运行时间
# 如不需要按ASV拆分贡献,可省略这两个参数
# 输出包含:
# pathway_abundance.tsv - MetaCyc通路丰度
# EC_metagenome_out/ - EC酶丰度
# KO_metagenome_out/ - KEGG KO丰度
# 与代谢组数据比较
# 将预测的功能通路与实测代谢物做相关分析
# R中整合分析
pathway_pred <- read.table("picrust2_output/pathway_abundance.tsv",
header=TRUE, sep="\t", row.names=1)
# 比较预测的SCFA产生通路与实测SCFA浓度
scfa_pathway <- pathway_pred["PWY-5022", ] # 丁酸合成通路
scfa_measured <- metabolite_df["butyrate", ]
cor_test <- cor.test(as.numeric(scfa_pathway),
as.numeric(scfa_measured), method="spearman")
cat("预测vs实测 丁酸: r =", cor_test$estimate, "p =", cor_test$p.value, "\n")
实战命令¶
#!/bin/bash
# === 微生物组-代谢组联合分析流程 ===
# 1. 功能预测
picrust2_pipeline.py -s asvs.fasta -i asv_table.biom -o picrust2/ -p 16
# 2. MMVEC关联分析
mmvec paired-omics \
--microbe-file microbe.biom \
--metabolite-file metabolite.biom \
--summary-dir mmvec_results/ \
--epochs 1000 --latent-dim 3
# 3. R整合分析
Rscript << 'EOF'
library(mixOmics); library(vegan); library(melonnpan)
# 数据加载和预处理
microbe <- read.csv("microbe_clr.csv", row.names=1)
metabolite <- read.csv("metabolite_log.csv", row.names=1)
# Mantel检验
mantel(vegdist(microbe,"euclidean"), vegdist(metabolite,"euclidean"))
# sPLS整合
res <- spls(as.matrix(microbe), as.matrix(metabolite), ncomp=3, keepX=c(20,20,20), keepY=c(15,15,15))
network(res, comp=1:2, cutoff=0.6)
EOF
面试常问点¶
Q1: 为什么不能直接用Pearson相关分析微生物-代谢物关联? A: 1)微生物丰度是组成数据(和为1),直接相关有组成偏差;2)两种数据量纲完全不同;3)存在大量零值;4)多对多关系中简单pair-wise相关产生大量假阳性。需要用MMVEC(处理组成数据+零值)或sPLS(正则化+降维)等专用方法。
Q2: MMVEC和MelonnPan适用场景有什么不同? A: MMVEC:探索性分析,发现微生物-代谢物关联模式,不需要训练集。MelonnPan:预测性分析,训练模型后可对新样本预测代谢物,需要配对训练数据。MMVEC更适合小样本探索;MelonnPan更适合有大训练集后应用到新队列。
Q3: 如何验证计算发现的微生物-代谢物关联? A: 1)独立队列验证一致性;2)体外培养实验(单菌发酵检测代谢物产出);3)无菌小鼠定殖实验;4)同位素示踪(13C标记底物追踪代谢途径);5)基因组证据(检查菌株是否含有相关代谢酶基因)。
易错点¶
样本不配对:微生物组和代谢组必须来自同一样本(同一粪便/血液样本的两份提取物),不同时间点采集会引入噪声。
未做适当数据转化:微生物丰度需CLR转化,代谢物浓度需log转化,否则极端值主导结果。
过度解读关联为因果:统计关联可能是第三因素(如饮食)同时影响微生物和代谢物,不是微生物产生代谢物。
忽略代谢物来源多样性:血清代谢物不只来自微生物,还有宿主自身代谢和饮食来源。粪便代谢物更能反映微生物活动。
样本量不足:多组学整合需要更多样本量(建议n>50)才能得到稳健结果。
过度信任PICRUSt2预测结果:PICRUSt2预测的是功能"潜力"而非实际活性,且准确性依赖参考数据库覆盖度。非人类环境(土壤、海洋等)的预测精度远低于人类肠道。关键发现务必用宏基因组测序(shotgun)或代谢组学实测验证。检查NSTI值评估预测可靠性(NSTI>2的ASV应谨慎解读)。
补充知识¶
微生物产生的重要代谢物类别¶
| 代谢物类别 | 来源微生物 | 功能 |
|---|---|---|
| 短链脂肪酸(SCFA) | Firmicutes (Clostridium等) | 肠屏障、抗炎、能量 |
| 胆汁酸(二级) | Clostridium, Bacteroides | 脂质代谢、FXR信号 |
| 色氨酸代谢物 | Lactobacillus, E. coli | AhR配体、免疫调节 |
| TMAO前体 | 多种肠道菌 | 心血管风险 |
| 维生素(B/K) | Bacteroides, Bifidobacterium | 辅酶、凝血 |
| 支链氨基酸 | Prevotella, Bacteroides | 代谢综合征相关 |