跳转至

732. 宏基因组代谢建模GEM(Genome-scale Metabolic Models)

一句话概述:从宏基因组数据直接重建微生物群落的代谢网络模型,模拟预测不同细菌之间的代谢互作关系——就像给每个细菌画一张"代谢地图",然后看它们怎么"做生意交换物资"。


核心知识点速查表

概念白话解释关键工具
GEM基因组尺度代谢模型,把一个菌的所有代谢反应用数学公式表示CarveMe, ModelSEED
FBA通量平衡分析,模拟代谢网络中各反应的"流量"COBRApy
MAG宏基因组组装基因组,从混合菌群中"拼出"单个菌的基因组MetaBAT2, MaxBin2
metaGEM端到端流程,从宏基因组reads到代谢互作预测Snakemake流程
SMETANA预测群落中物种间的代谢交换(谁给谁提供什么)Python包
MEMOTEGEM质量评估标准化测试命令行工具
IMIC2025新方法,整合宏转录组改进代谢建模Python

一、背景与原理(白话版)

1.1 什么是GEM?

想象你有一张巨大的流程图,上面画着一个细菌体内所有的化学反应: - 哪些原料进来(葡萄糖、氨基酸...) - 经过什么酶催化 - 产生什么产物(ATP、代谢废物...) - 最终长出多少细菌(生物量biomass)

这张图就是GEM(Genome-scale Metabolic Model,基因组尺度代谢模型)。

1.2 为什么要用在宏基因组?

在肠道菌群里,几百种细菌住在一起,它们之间会: - 抢食物:A和B都想吃葡萄糖 - 互相喂:A的代谢废物恰好是B的食物 - 合作生产:A产生维生素K,B产生短链脂肪酸

GEM可以用数学方法模拟这些复杂关系,预测: - 谁在群落里更有竞争力 - 去掉某个菌会怎样 - 饮食改变会如何影响菌群代谢

1.3 核心算法:FBA

FBA(通量平衡分析)的核心思想很简单: - 假设代谢网络处于稳态(进多少出多少) - 在所有可能的代谢方案中,找到让生物量最大的那个 - 用线性规划求解

数学表示:
maximize: c^T * v        # 目标:最大化生物量
subject to: S * v = 0    # 约束:代谢物浓度不变(稳态)
            lb ≤ v ≤ ub  # 约束:反应速率有上下限

二、metaGEM全流程详解

2.1 安装metaGEM

# 克隆metaGEM仓库
git clone https://github.com/franciscozorrilla/metaGEM.git  # 下载metaGEM源代码

# 进入目录
cd metaGEM  # 切换到metaGEM目录

# 使用conda创建环境(metaGEM自带环境配置文件)
conda env create -f envs/metagem.yaml  # 从yaml文件创建conda环境

# 激活环境
conda activate metagem  # 激活metaGEM专用环境

# 验证安装
snakemake --version  # 检查Snakemake是否正确安装

2.2 流程总览

原始reads → 质控(fastp) → 组装(MEGAHIT) → 分箱(MetaBAT2/MaxBin2) 
→ 优化(MetaWRAP) → 质检(CheckM) → 分类(GTDB-Tk) 
→ 建模(CarveMe) → 质评(MEMOTE) → 互作(SMETANA)

2.3 从MAG到GEM

# ===== 第一步:用CarveMe从MAG构建GEM =====
# CarveMe是自动化GEM重建工具,输入基因组蛋白序列,输出SBML格式模型

# 安装CarveMe
pip install carveme  # 安装CarveMe(需要CPLEX或GLPK求解器)

# 预测蛋白序列(如果没有的话)
prodigal -i mag_bin1.fa \  # 输入:MAG的fasta文件
         -a mag_bin1.faa \  # 输出:蛋白序列(氨基酸fasta)
         -o mag_bin1.gff \  # 输出:基因预测结果GFF格式
         -p meta  # 使用宏基因组模式(更适合不完整基因组)

# 用CarveMe构建GEM
carve mag_bin1.faa \  # 输入:蛋白序列文件
     -o mag_bin1_gem.xml \  # 输出:SBML格式的代谢模型
     --solver glpk  # 指定求解器(免费的用glpk,商业的用cplex更快)

2.4 GEM质量评估

# 用MEMOTE测试GEM质量
pip install memote  # 安装MEMOTE

# 运行质量测试
memote run mag_bin1_gem.xml \  # 输入:GEM模型文件
       --filename report.html  # 输出:HTML格式的质量报告

# 报告包含:
# - 模型一致性(反应平衡、代谢物完整性)
# - 注释覆盖率(基因、反应、代谢物是否有数据库ID)
# - 生物量反应检查
# - 总体得分(满分100)

2.5 FBA模拟(用COBRApy)

# ===== 用COBRApy进行通量平衡分析 =====
import cobra  # 导入COBRA工具包

# 加载GEM模型
model = cobra.io.read_sbml_model("mag_bin1_gem.xml")  # 从SBML文件读取模型

# 查看模型基本信息
print(f"反应数: {len(model.reactions)}")  # 打印模型中代谢反应的总数
print(f"代谢物数: {len(model.metabolites)}")  # 打印代谢物总数
print(f"基因数: {len(model.genes)}")  # 打印关联基因数

# 设置培养基条件(模拟肠道环境)
# 通过设置exchange reaction的下界来定义可用营养物
for rxn in model.exchanges:  # 遍历所有交换反应(与外界交换物质的反应)
    rxn.lower_bound = 0  # 先关闭所有营养物输入

# 开放常见肠道营养物
model.reactions.get_by_id("EX_glc__D_e").lower_bound = -10  # 葡萄糖摄入上限
model.reactions.get_by_id("EX_o2_e").lower_bound = -2  # 氧气(厌氧环境,限制氧气)
model.reactions.get_by_id("EX_nh4_e").lower_bound = -10  # 铵盐(氮源)

# 运行FBA
solution = model.optimize()  # 求解最优代谢方案
print(f"预测生长速率: {solution.objective_value:.4f} /h")  # 打印最大生物量产生速率

# 查看关键反应通量
print(f"葡萄糖消耗: {solution.fluxes['EX_glc__D_e']:.4f}")  # 葡萄糖的消耗量
print(f"乳酸产生: {solution.fluxes.get('EX_lac__D_e', 0):.4f}")  # 乳酸的分泌量

2.6 群落代谢互作预测(SMETANA)

# ===== 安装SMETANA =====
pip install smetana  # 安装SMETANA群落互作分析工具

# 运行群落代谢互作分析
smetana models/*.xml \  # 输入:多个物种的GEM模型文件
       -o community_interactions.tsv \  # 输出:互作预测结果表格
       --flavor bigg \  # 使用BiGG数据库的命名规范
       --solver glpk \  # 指定求解器
       -v  # 显示详细运行信息

# SMETANA输出关键指标:
# MIP (Metabolic Interaction Potential): 群落互补性,值越大说明互依赖越强
# MRO (Metabolic Resource Overlap): 资源竞争程度,值越大说明竞争越强
# SCS (Species Coupling Score): 物种间耦合度
# ===== 用Python分析SMETANA结果 =====
import pandas as pd  # 导入pandas用于数据处理
import matplotlib.pyplot as plt  # 导入绑图库
import seaborn as sns  # 导入seaborn增强绑图

# 读取SMETANA结果
df = pd.read_csv("community_interactions.tsv", sep="\t")  # 读取互作结果表

# 筛选高置信度互作
significant = df[df["score"] > 0.5]  # 只保留得分>0.5的显著互作

# 绘制互作热图
pivot = significant.pivot_table(
    index="receiver",  # 行:接收物质的物种
    columns="donor",   # 列:提供物质的物种
    values="score",    # 值:互作强度
    aggfunc="sum"      # 聚合方式:求和
)

plt.figure(figsize=(12, 10))  # 设置画布大小
sns.heatmap(pivot, cmap="YlOrRd", annot=True, fmt=".2f")  # 绘制热图
plt.title("Species Metabolic Interaction Network")  # 设置标题
plt.tight_layout()  # 自动调整布局
plt.savefig("metabolic_interactions_heatmap.png", dpi=300)  # 保存高分辨率图片
plt.show()  # 显示图片

三、2025新进展:IMIC整合宏转录组

IMIC(Integration of Metatranscriptomes Into Community GEMs)是2025年发表在ISME Journal上的新方法:

# ===== IMIC流程示意 =====
# IMIC的核心改进:用转录组数据约束代谢模型

# 1. 传统方法:只用基因组 → 知道"能做什么"但不知道"实际在做什么"
# 2. IMIC方法:基因组+转录组 → 同时知道"能做什么"和"正在做什么"

# 伪代码示意IMIC的工作原理
"""
输入:
  - MAG构建的GEM模型
  - 宏转录组(metatranscriptome)数据

步骤:
  1. 将转录组reads比对到MAG的基因上
  2. 计算每个基因的表达量(TPM)
  3. 用表达量作为约束,限制对应反应的通量范围
     - 高表达基因 → 对应反应的通量上限提高
     - 低表达基因 → 对应反应的通量上限降低
  4. 在新约束下重新运行FBA

优势:
  - 更准确预测特定条件下的代谢状态
  - 可以比较不同环境/疾病状态下的代谢差异
"""

四、常见报错与解决

报错信息原因解决方案
Infeasible model模型没有可行解检查培养基设置,确保必需营养物开放
No solver found未安装求解器pip install optlang[glpk] 安装GLPK
CPLEX not found商业求解器未安装改用--solver glpk或申请学术版CPLEX
CarveMe: no reactions蛋白序列注释失败检查输入是否为氨基酸序列(.faa)而非核酸(.fna)
MEMOTE score < 50模型质量差MAG完整度可能太低,用CheckM检查
SMETANA timeout模型太多/太大减少物种数或用--detailed替代全局分析
cobra.io read errorSBML格式问题检查XML文件完整性,或用cobra.io.validate_sbml_model()

五、面试高频问题

Q1: GEM和普通的代谢通路注释有什么区别?

A: 普通通路注释(如KEGG)只告诉你"这个菌有没有某个通路",是定性的;GEM不仅包含通路,还包含化学计量关系和约束条件,可以做定量模拟——预测生长速率、代谢物产量等。

Q2: FBA的主要假设是什么?局限性?

A: - 假设1:稳态假设(代谢物浓度不变) - 假设2:细胞目标是最大化生长 - 局限:不考虑酶动力学、基因调控、蛋白成本

Q3: 宏基因组代谢建模的难点?

A: - MAG不完整导致模型缺失反应 - 物种间代谢物交换的量化困难 - 计算量大(100个物种就很慢) - 缺乏实验验证数据


六、速查表

# ===== GEM分析速查 =====

# 1. MAG → 蛋白
prodigal -i mag.fa -a mag.faa -p meta

# 2. 蛋白 → GEM
carve mag.faa -o mag_gem.xml --solver glpk

# 3. GEM质检
memote run mag_gem.xml --filename report.html

# 4. FBA模拟
python -c "
import cobra
m = cobra.io.read_sbml_model('mag_gem.xml')
print(m.optimize().objective_value)
"

# 5. 群落互作
smetana models/*.xml -o interactions.tsv --solver glpk

# ===== 关键Python包 =====
pip install cobra carveme memote smetana

# ===== 关键数据库 =====
# BiGG Models: http://bigg.ucsd.edu/
# ModelSEED: https://modelseed.org/
# VMH: https://www.vmh.life/ (人类代谢+微生物模型)

参考资源: - metaGEM GitHub: https://github.com/franciscozorrilla/metaGEM - COBRApy文档: https://cobrapy.readthedocs.io/ - CarveMe: https://github.com/cdanielmachado/carveme - SMETANA: https://github.com/cdanielmachado/smetana