732. 宏基因组代谢建模GEM(Genome-scale Metabolic Models)¶
一句话概述:从宏基因组数据直接重建微生物群落的代谢网络模型,模拟预测不同细菌之间的代谢互作关系——就像给每个细菌画一张"代谢地图",然后看它们怎么"做生意交换物资"。
核心知识点速查表¶
| 概念 | 白话解释 | 关键工具 |
|---|---|---|
| GEM | 基因组尺度代谢模型,把一个菌的所有代谢反应用数学公式表示 | CarveMe, ModelSEED |
| FBA | 通量平衡分析,模拟代谢网络中各反应的"流量" | COBRApy |
| MAG | 宏基因组组装基因组,从混合菌群中"拼出"单个菌的基因组 | MetaBAT2, MaxBin2 |
| metaGEM | 端到端流程,从宏基因组reads到代谢互作预测 | Snakemake流程 |
| SMETANA | 预测群落中物种间的代谢交换(谁给谁提供什么) | Python包 |
| MEMOTE | GEM质量评估标准化测试 | 命令行工具 |
| IMIC | 2025新方法,整合宏转录组改进代谢建模 | 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 error | SBML格式问题 | 检查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