668 细菌全基因组MLST分型¶
一句话概述:MLST/cgMLST/wgMLST是基于基因-等位基因方案的细菌分型方法,从7个基因到全基因组,分辨率逐级提高,广泛用于流行病学追踪。
核心知识点速查表¶
| 知识点 | 关键内容 |
|---|---|
| MLST | 7个管家基因→序列型(ST) |
| cgMLST | 核心基因组(数百-数千位点)→更高分辨率 |
| wgMLST | 全基因组(核心+附属基因)→最高分辨率 |
| 工具 | mlst、MiST(2025)、pyMLST、chewBBACA |
| 数据库 | PubMLST、cgMLST.org、EnteroBase |
| 应用 | 暴发追踪、克隆进化、种群结构分析 |
一、MLST是什么?(白话解释)¶
打个比方:给每个细菌发一张"身份证",MLST用7个基因的序列组合定义身份证号(ST号),就像用"姓氏+生日+血型"来区分人。cgMLST相当于升级版身份证(用了更多信息),wgMLST则是用了全部基因组信息。
| 分型层级 | 位点数 | 分辨率 | 适用场景 |
|---|---|---|---|
| MLST | 7个 | 低 | 全球克隆定义、长期进化 |
| cgMLST | 数百-数千 | 中高 | 暴发追踪、短期传播 |
| wgMLST | 全基因组 | 最高 | 高分辨率暴发调查 |
二、传统MLST分析¶
# 1. 使用mlst工具(Torsten Seemann开发)
conda install -c bioconda mlst # 安装
# 对单个基因组分型
mlst genome.fasta # 自动检测物种和ST
# 输出: genome.fasta saureus ST8 arcc(3) aroe(3) glpf(1) ...
# 批量分型
mlst genomes/*.fasta > mlst_results.tsv # 批量处理
# 指定物种方案
mlst --scheme ecoli genome.fasta # 指定大肠杆菌方案
# 查看可用方案
mlst --list # 列出所有MLST方案
理解MLST结果¶
# 解析MLST结果
import pandas as pd # 数据处理
# 读取mlst输出
mlst_df = pd.read_csv("mlst_results.tsv", sep='\t',
names=["file", "scheme", "ST",
"loc1", "loc2", "loc3", "loc4",
"loc5", "loc6", "loc7"])
# 统计ST分布
st_counts = mlst_df["ST"].value_counts()
print("ST分布:")
print(st_counts.head(10))
# 找到最常见的克隆
print(f"\n最常见ST: ST{st_counts.index[0]}, 出现{st_counts.iloc[0]}次")
三、cgMLST分析¶
3.1 使用chewBBACA¶
# chewBBACA安装
conda install -c bioconda chewbbaca # 安装
# 1. 创建cgMLST方案(从头构建)
chewBBACA.py CreateSchema \
-i training_genomes/ \ # 训练基因组目录
-o my_schema/ \ # 输出方案目录
--cpu 16 \ # CPU数
--ptf prodigal_training.trn # Prodigal训练文件
# 2. 等位基因调用(对新基因组分型)
chewBBACA.py AlleleCall \
-i test_genomes/ \ # 待分型基因组
-g my_schema/ \ # cgMLST方案
-o allele_results/ \ # 输出目录
--cpu 16 # CPU数
# 3. 提取cgMLST矩阵
chewBBACA.py ExtractCgMLST \
-i allele_results/results_alleles.tsv \ # 等位基因结果
-o cgmlst_matrix/ \ # 输出目录
--t 0.95 # 95%的基因组都有的位点才算核心
# 4. 计算距离矩阵
chewBBACA.py AlleleCallEvaluator \
-i allele_results/ \ # 等位基因调用结果
-g my_schema/ \ # 方案
-o evaluation/ # 输出评估报告
3.2 使用pyMLST¶
# pyMLST安装和使用
pip install pymlst # 安装
# 1. 从cgMLST.org下载方案
pyMLST download \
--species "Escherichia coli" \ # 物种名
--output ecoli_schema/ # 输出目录
# 2. 创建数据库
pyMLST create \
--schema ecoli_schema/ \ # 方案目录
--database ecoli.db # SQLite数据库
# 3. 等位基因调用
pyMLST call \
--database ecoli.db \ # 数据库
--input genome.fasta \ # 输入基因组
--output results.tsv # 输出结果
# 4. 最小生成树
pyMLST mst \
--database ecoli.db \ # 数据库
--output mst.nwk # 输出Newick格式的树
3.3 使用MiST(2025年新工具)¶
# MiST安装(2025年BMC Genomics)
pip install mist-mlst # 安装
# MiST特点:速度快、内存低、支持MLST/cgMLST/wgMLST
mist \
--input genome.fasta \ # 输入基因组
--scheme ecoli_cgmlst \ # cgMLST方案
--output results.json \ # JSON格式输出
--threads 8 # 线程数
# MiST vs 其他工具:
# - 比chewBBACA更快
# - 比pyMLST内存占用更低
# - 支持多种方案来源
四、结果解读与可视化¶
# cgMLST距离矩阵分析和最小生成树
import pandas as pd # 数据处理
import numpy as np # 数值计算
from scipy.cluster.hierarchy import linkage, dendrogram # 聚类
import matplotlib.pyplot as plt # 绑图
# 读取等位基因profile
profiles = pd.read_csv("cgmlst_profiles.tsv", sep='\t', index_col=0)
# 计算等位基因差异数(距离)
def allelic_distance(profile1, profile2):
"""计算两个profile之间的等位基因差异数"""
# 只比较两者都有数据的位点
valid = (profile1 != 0) & (profile2 != 0) # 排除缺失数据
if valid.sum() == 0:
return np.nan
return (profile1[valid] != profile2[valid]).sum() # 不同等位基因数
# 计算成对距离矩阵
n = len(profiles)
dist_matrix = np.zeros((n, n))
for i in range(n):
for j in range(i+1, n):
d = allelic_distance(profiles.iloc[i], profiles.iloc[j])
dist_matrix[i, j] = d
dist_matrix[j, i] = d
# 暴发聚类(阈值:通常10-20个等位基因差异)
OUTBREAK_THRESHOLD = 10 # 暴发阈值
outbreak_clusters = []
for i in range(n):
for j in range(i+1, n):
if dist_matrix[i, j] <= OUTBREAK_THRESHOLD:
print(f"可能暴发关联: {profiles.index[i]} <-> {profiles.index[j]}, "
f"差异={dist_matrix[i,j]:.0f}")
# 最小生成树可视化
from scipy.sparse.csgraph import minimum_spanning_tree
mst = minimum_spanning_tree(dist_matrix) # 最小生成树
# 树状图
Z = linkage(dist_matrix[np.triu_indices(n, k=1)], method='single')
fig, ax = plt.subplots(figsize=(15, 6))
dendrogram(Z, labels=profiles.index.tolist(), ax=ax,
color_threshold=OUTBREAK_THRESHOLD)
ax.axhline(y=OUTBREAK_THRESHOLD, color='r', linestyle='--',
label=f'暴发阈值({OUTBREAK_THRESHOLD})')
ax.set_ylabel("等位基因差异数")
ax.legend()
plt.xticks(rotation=90)
plt.tight_layout()
plt.savefig("cgmlst_dendrogram.png", dpi=150)
五、cgMLST暴发阈值参考¶
| 物种 | cgMLST位点数 | 暴发阈值(等位基因差异) |
|---|---|---|
| E. coli | 2513 | ≤10 |
| S. enterica | 3002 | ≤7 |
| L. monocytogenes | 1701 | ≤7 |
| S. aureus | 1861 | ≤24 |
| M. tuberculosis | 2891 | ≤12 |
常见报错与解决¶
| 报错 | 原因 | 解决方案 |
|---|---|---|
| mlst报"scheme not found" | 物种方案不在默认数据库 | mlst --list查看可用方案,或更新数据库 |
| cgMLST大量位点缺失 | 基因组质量差/组装不完整 | 先用CheckM评估,completeness>95%再分型 |
| ST号为"unknown" | 新的等位基因组合 | 提交到PubMLST申请新ST号 |
| chewBBACA报Prodigal错误 | 基因预测失败 | 检查输入fasta格式,确保无非法字符 |
| 不同工具给出不同ST | 数据库版本不一致 | 确保使用同一版本的方案数据库 |
速查表¶
# MLST/cgMLST分析流程
1. 基因组组装和质控 (SPAdes + QUAST + CheckM)
2. 传统MLST分型 (mlst工具,秒级)
3. cgMLST分型 (chewBBACA/pyMLST/MiST)
4. 距离矩阵计算 (等位基因差异)
5. 聚类分析 (最小生成树/UPGMA)
6. 暴发判定 (基于物种特异性阈值)
# 工具选择
快速MLST: mlst (Seemann, 最简单)
cgMLST建方案: chewBBACA
cgMLST分型: pyMLST / MiST (2025, 最快)
可视化: GrapeTree / PHYLOViZ
# 数据库
PubMLST.org: 传统MLST方案
cgMLST.org: cgMLST方案
EnteroBase: 肠道菌在线分析平台
BIGSdb: Pasteur方案
面试高频问题¶
Q1:MLST、cgMLST和wgMLST有什么区别? A:MLST用7个管家基因定义ST,分辨率低但数据库全球共享;cgMLST用几百-几千个核心基因,分辨率更高,用于暴发追踪;wgMLST包含所有基因(核心+附属),分辨率最高但与cgMLST结果通常相似。选择取决于研究目的:全球监测用MLST,暴发调查用cgMLST/wgMLST。
Q2:ST号是怎么定义的? A:每个基因位点的独特序列被赋予一个等位基因号,7个位点的等位基因号组合定义一个序列型(ST)。例如arcc(3)-aroe(3)-glpf(1)-...-yqiL(1)就是ST8。新的等位基因组合需要提交到PubMLST获得新ST号。但ST号是任意编号,ST10和ST11可能进化距离很远。
Q3:cgMLST暴发判定的阈值怎么确定? A:阈值是物种特异性的,取决于该物种的突变率和核心基因组大小。一般通过已知暴发事件的回顾性分析来确定,如大肠杆菌通常≤10个等位基因差异、沙门氏菌≤7个差异。但阈值是指导性的,不是绝对标准,需结合流行病学调查。
Q4:2025年有什么新的MLST工具? A:(1) MiST (BMC Genomics 2025):速度更快、内存更低的MLST/cgMLST工具;(2) BacTaxID (2025):基于哈希函数的分布式cgMLST方案,不需要中心化数据库;(3) 纳米孔测序兼容的cgMLST流程(R10化学提高了准确性)。