如何基于物种MLST分型获得CG克隆群

MLST(multilocus sequence typing):多位点序列分型
CG( clonal group):克隆群
CC(clonal complex):克隆复合体
CT(clonal type):克隆型
cgMLST (core genome multilocus sequence typing):核心基因组多位点序列分型
wgMLST (whole genome multilocus sequence typing):全基因多位点序列分型

CC、CG和MLST的关系

CC/CG是微生物基因组学中用于描述一组密切相关菌株的概念,广泛应用于 MLST和 cgMLST分析。在MLST研究中,基于eBURST算法,等位基因差异位数≤1/2/3的ST型被认为属于同一CC/CG。而在cgMLST研究中,CC/CG的划分因物种而异,通常阈值在10个等位基因左右。
CC/CG有两种常见表示方法,一种是以1、2、3...的顺序分别标识当前样本的密切相关群体;另一种是以每个密切相关群体中的祖先ST型编号来表示所在的群体,如用CG258标识ST258所在的CG,以便于跨研究交流。CT有时候也被用来替代cgMLST研究中的CC/CG,反映cgST之间的联系。

eBURST算法简介

eBURST(Evolutionary Biology Research Tool)是一种用于分析微生物菌株进化关系的算法,主要应用于多位点序列分型(MLST)或全基因组多位点序列分型(cgMLST)数据。
eBURST的核心思想是通过计算菌株间等位基因差异的位数,划分亲缘关系群组:

1.核心群(Core Group, CC)

  • 若两菌株的等位基因差异位数 ≤1,则属于同一CC,代表近期共同祖先的直接后代。

2.同源群(Clonal Group, CG)

  • 差异位数 ≤2 时归为同一CG,表示较远的共同进化分支。

3.同类型(Clonal Type, CT)

  • 差异位数 ≤3 可能属于同一CT,但亲缘关系更弱。
    这种分类依赖于“克隆复合体”模型,假设菌株通过突变而非重组进化,适用于追踪短期的传播路径。
文献描述

文献( doi:10.1016/S1473-3099(19)30755-8.)中关于CG的定义方法是:只在 1~2 个基因等位位点上有差异的 ST,并以核心 ST 命名(即数量最多或最中心的 ST)。

下面是简化版eBURST的处理方法

library(data.table)
library(igraph)

# 读取数据
mlst_data <- fread("MLST.txt", sep = "\t", header = TRUE)

# 提取 profile 矩阵
profiles <- as.data.frame(mlst_data)
rownames(profiles) <- profiles$ST
alleles <- as.matrix(profiles[, -1])  # 只保留等位基因数值(不含 ST)

# 计算两两之间的 allele 差异数(矩阵形式,行/列为 ST)
n <- nrow(alleles)
edge_list <- list()

for (i in 1:(n-1)) {
  diffs <- rowSums(alleles[(i+1):n, , drop=FALSE] != alleles[rep(i, n - i), ])
  connected <- which(diffs <= 2)
  if (length(connected) > 0) {
    edge_list[[length(edge_list)+1]] <- data.frame(
      from = rownames(alleles)[i],
      to   = rownames(alleles)[(i+1):n][connected]
    )
  }
}

# 合并边
edges_df <- do.call(rbind, edge_list)

# 构建图
g <- graph_from_data_frame(edges_df, directed = FALSE)

# 计算连通子图(即 CG)
comp <- components(g)

# 构建 CG 表格
cg_map <- data.frame(ST = names(comp$membership),
                     cluster = comp$membership) %>%
  group_by(cluster) %>%
  mutate(CG = paste0("CG", min(as.integer(ST)))) %>%
  ungroup() %>%
  select(ST, CG)

# 加入未连接的 ST(没有任何连边的 ST)
all_sts <- as.character(mlst_data$ST)
unlinked_sts <- setdiff(all_sts, cg_map$ST)
if (length(unlinked_sts) > 0) {
  cg_map <- bind_rows(cg_map,
                      data.frame(ST = unlinked_sts,
                                 CG = paste0("CG", unlinked_sts)))
}

# 确保 ST 是字符型
cg_map$ST <- as.character(cg_map$ST)
mlst_data$ST <- as.character(mlst_data$ST)

# 合并并输出
final_df <- merge(mlst_data, cg_map, by = "ST")
fwrite(final_df, file = "MLST_with_CG.tsv", sep = "\t")

其中MLST.txt的格式是形如:


最终可以得到每个ST对应的CG 分型的结果:


简化版处理方式和 eBURST 区别

特点 简化版 真正的 eBURST 或 goeBURST
ST 聚类标准 差异 ≤2 差异 1(传统),或 ≤2(goeBURST 扩展)
算法 连通子图(图论) 构建单链接网络,使用复杂排序规则找“创始 ST”
创始 ST 的选取 取最小 ST 编号 依据连接度(founder 候选)和优先级评分
软件工具 R + igraph BURST (Java), goeBURST (PHYLOViZ), eBURST v3
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容