跳转至

668 细菌全基因组MLST分型

一句话概述:MLST/cgMLST/wgMLST是基于基因-等位基因方案的细菌分型方法,从7个基因到全基因组,分辨率逐级提高,广泛用于流行病学追踪。

核心知识点速查表

知识点关键内容
MLST7个管家基因→序列型(ST)
cgMLST核心基因组(数百-数千位点)→更高分辨率
wgMLST全基因组(核心+附属基因)→最高分辨率
工具mlst、MiST(2025)、pyMLST、chewBBACA
数据库PubMLST、cgMLST.org、EnteroBase
应用暴发追踪、克隆进化、种群结构分析

一、MLST是什么?(白话解释)

打个比方:给每个细菌发一张"身份证",MLST用7个基因的序列组合定义身份证号(ST号),就像用"姓氏+生日+血型"来区分人。cgMLST相当于升级版身份证(用了更多信息),wgMLST则是用了全部基因组信息。

分型层级位点数分辨率适用场景
MLST7个全球克隆定义、长期进化
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. coli2513≤10
S. enterica3002≤7
L. monocytogenes1701≤7
S. aureus1861≤24
M. tuberculosis2891≤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化学提高了准确性)。