跳转至

微生物组功能代谢整合

一句话概述

通过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)基因组证据(检查菌株是否含有相关代谢酶基因)。


易错点

  1. 样本不配对:微生物组和代谢组必须来自同一样本(同一粪便/血液样本的两份提取物),不同时间点采集会引入噪声。

  2. 未做适当数据转化:微生物丰度需CLR转化,代谢物浓度需log转化,否则极端值主导结果。

  3. 过度解读关联为因果:统计关联可能是第三因素(如饮食)同时影响微生物和代谢物,不是微生物产生代谢物。

  4. 忽略代谢物来源多样性:血清代谢物不只来自微生物,还有宿主自身代谢和饮食来源。粪便代谢物更能反映微生物活动。

  5. 样本量不足:多组学整合需要更多样本量(建议n>50)才能得到稳健结果。

  6. 过度信任PICRUSt2预测结果:PICRUSt2预测的是功能"潜力"而非实际活性,且准确性依赖参考数据库覆盖度。非人类环境(土壤、海洋等)的预测精度远低于人类肠道。关键发现务必用宏基因组测序(shotgun)或代谢组学实测验证。检查NSTI值评估预测可靠性(NSTI>2的ASV应谨慎解读)。


补充知识

微生物产生的重要代谢物类别

代谢物类别来源微生物功能
短链脂肪酸(SCFA)Firmicutes (Clostridium等)肠屏障、抗炎、能量
胆汁酸(二级)Clostridium, Bacteroides脂质代谢、FXR信号
色氨酸代谢物Lactobacillus, E. coliAhR配体、免疫调节
TMAO前体多种肠道菌心血管风险
维生素(B/K)Bacteroides, Bifidobacterium辅酶、凝血
支链氨基酸Prevotella, Bacteroides代谢综合征相关

多组学整合方法选择

探索性(无先验假设):
  - MMVEC: 微生物-代谢物条件概率
  - Procrustes/Mantel: 整体模式一致性
  - sPLS/CCA: 潜在轴发现

预测性(已有训练数据):
  - MelonnPan: 微生物→代谢物预测
  - Random Forest: 多特征预测单代谢物
  - Neural Network: 复杂非线性关系

因果推断(高级):
  - Mendelian Randomization: 因果方向判断
  - 纵向数据Granger因果: 时间先后推因果
  - 干预实验: 金标准(但昂贵)