跳转至

736. 宏基因组水平基因转移检测(HGT Detection)

一句话概述:检测微生物群落中不同物种之间的基因"偷渡"事件——细菌不像人类只能从父母遗传基因,它们还能从"邻居"那里直接拿基因来用,这就是水平基因转移(HGT)。


核心知识点速查表

概念白话解释关键工具
HGT水平基因转移,不同物种间直接传递基因MetaCHIP, WAAFLE
转化细菌从环境中吸收裸DNA自然过程
转导噬菌体携带宿主基因传给另一个菌噬菌体介导
接合两个菌通过性菌毛直接传递质粒质粒介导
WAAFLE基于泛基因组的HGT检测Python
MetaCHIP结合最佳匹配+系统发育的HGT检测Python
geNomad检测质粒和噬菌体(HGT载体)Python

一、原理(白话版)

1.1 HGT的三种方式

1. 转化(Transformation):
   死菌释放DNA → 活菌吸收 → 整合到基因组
   比喻:捡到路边的技术手册,学到新技能

2. 转导(Transduction):
   噬菌体感染A菌 → 不小心打包A的基因 → 感染B菌 → B获得A的基因
   比喻:快递小哥送错了包裹

3. 接合(Conjugation):
   A菌和B菌通过菌毛连接 → 质粒从A复制到B
   比喻:U盘拷贝文件

1.2 为什么HGT在宏基因组中很重要?

  • 抗生素耐药:耐药基因通过HGT在菌群中快速传播
  • 毒力因子:无害菌可能通过HGT获得致病能力
  • 代谢能力:菌可以通过HGT获得降解新底物的能力
  • 进化速度:HGT让细菌进化比垂直遗传快得多

1.3 检测HGT的计算方法

方法原理优缺点
组成偏差法HGT来的基因GC含量/密码子偏好与宿主不同只能检测"近期"转移
系统发育法基因树和物种树不一致说明发生过HGT最可靠但计算量大
比较基因组法一个基因在近缘种中有而在远缘种中也有需要参考基因组
泛基因组法基于泛基因组检测嵌合的contigWAAFLE的核心方法

二、MetaCHIP分析流程

2.1 安装

# 安装MetaCHIP
conda create -n hgt python=3.8  # 创建专用环境
conda activate hgt  # 激活环境

# 安装MetaCHIP
pip install MetaCHIP  # 安装主程序

# 安装依赖
conda install -c bioconda \
  blast \        # BLAST序列比对
  muscle \       # 多序列比对
  fasttree \     # 快速建树
  mafft \        # 多序列比对(备选)
  prodigal \     # 基因预测
  hmmer  # HMM搜索

# 验证安装
MetaCHIP -h  # 查看帮助信息

2.2 准备输入数据

# MetaCHIP需要两个输入:
# 1. MAG基因组文件(每个菌一个fasta)
# 2. 分类信息文件(每个MAG属于什么分类)

# 准备MAG文件目录
ls mags/
# bin.1.fa  bin.2.fa  bin.3.fa ...

# 准备分类信息文件(GTDB-Tk的输出可以直接用)
# 格式:MAG_ID\t分类字符串
cat taxonomy.tsv
# bin.1   d__Bacteria;p__Firmicutes;c__Clostridia;o__Lachnospirales;f__Lachnospiraceae;g__Roseburia;s__Roseburia intestinalis
# bin.2   d__Bacteria;p__Bacteroidota;c__Bacteroidia;o__Bacteroidales;f__Bacteroidaceae;g__Bacteroides;s__Bacteroides fragilis

2.3 运行MetaCHIP

# ===== 第一步:在目(Order)水平检测HGT =====
MetaCHIP PI \
  -p sample1 \  # 项目名称前缀
  -r o \  # 在Order(目)水平检测(o=order, c=class, p=phylum)
  -i mags/ \  # MAG文件目录
  -x fa \  # MAG文件后缀
  -taxon taxonomy.tsv \  # 分类信息文件
  -t 8  # 线程数

# ===== 第二步:在纲(Class)水平检测HGT =====
MetaCHIP PI \
  -p sample1 \
  -r c \  # 在Class(纲)水平检测
  -i mags/ \
  -x fa \
  -taxon taxonomy.tsv \
  -t 8

# ===== 第三步:在门(Phylum)水平检测HGT =====
MetaCHIP PI \
  -p sample1 \
  -r p \  # 在Phylum(门)水平检测
  -i mags/ \
  -x fa \
  -taxon taxonomy.tsv \
  -t 8

2.4 结果解析

# ===== 解析MetaCHIP结果 =====
import pandas as pd  # 导入pandas
import matplotlib.pyplot as plt  # 导入绑图
import seaborn as sns  # 导入seaborn
import networkx as nx  # 导入网络分析包

# 读取HGT检测结果
hgt_results = pd.read_csv(
    "sample1_HGTs_ip_at_o.txt",  # MetaCHIP输出的HGT列表
    sep="\t"
)

print(f"检测到的HGT事件数: {len(hgt_results)}")
print(hgt_results.head())
# Gene_1       Gene_2       Donor        Recipient    Identity  Direction
# bin1_gene_3  bin2_gene_5  Roseburia    Bacteroides  95.2      bin1→bin2

# 统计各分类间的HGT频率
transfer_counts = hgt_results.groupby(
    ["Donor", "Recipient"]  # 按供体和受体分组
).size().reset_index(name="HGT_count")  # 统计每对之间的HGT数量

# 绘制HGT网络图
G = nx.DiGraph()  # 创建有向图
for _, row in transfer_counts.iterrows():
    G.add_edge(
        row["Donor"],  # 源节点:供体
        row["Recipient"],  # 目标节点:受体
        weight=row["HGT_count"]  # 边权重:HGT次数
    )

plt.figure(figsize=(12, 10))
pos = nx.spring_layout(G, seed=42)  # 弹簧布局
edges = G.edges(data=True)
weights = [e[2]["weight"] for e in edges]  # 提取边权重

nx.draw_networkx_nodes(G, pos, node_color="lightblue",
                       node_size=800)  # 绘制节点
nx.draw_networkx_labels(G, pos, font_size=8)  # 绘制标签
nx.draw_networkx_edges(G, pos, width=[w*0.5 for w in weights],
                       edge_color="gray", arrows=True,
                       arrowsize=15)  # 绘制边,宽度与HGT次数成正比
plt.title("Horizontal Gene Transfer Network")
plt.axis("off")
plt.tight_layout()
plt.savefig("hgt_network.png", dpi=300)
plt.show()

三、WAAFLE分析流程

# ===== WAAFLE:基于泛基因组的HGT检测 =====

# 安装WAAFLE
pip install waafle  # 安装WAAFLE

# WAAFLE工作流程:
# 1. 将contigs比对到泛基因组数据库
# 2. 检查每个contig上的基因是否来自不同物种
# 3. 如果一个contig上有基因来自物种A也有来自物种B → 嵌合contig → 可能是HGT

# 第一步:BLAST搜索contig上的基因
waafle_search \
  contigs.fna \  # 输入:宏基因组组装的contigs
  waafle_db/waafledb \  # WAAFLE泛基因组数据库
  --threads 8  # 线程数

# 第二步:分类contigs
waafle_orgscorer \
  contigs.fna \  # 输入:contigs
  contigs.fna.blastout \  # 输入:BLAST结果
  waafle_db/taxonomy.tsv  # 分类信息

# 第三步:检测LGT(横向基因转移)
waafle_genecaller \
  contigs.fna \  # 输入:contigs
  contigs.fna.blastout \  # BLAST结果
  contigs.fna.no_lgt.tsv \  # 非LGT的contigs
  contigs.fna.lgt.tsv  # 检测到LGT的contigs(这是主要结果)

四、geNomad:检测HGT载体

# ===== geNomad检测质粒和噬菌体 =====
# 质粒和噬菌体是HGT的主要载体

# 安装
conda install -c bioconda genomad  # 安装geNomad

# 下载数据库
genomad download-database .  # 下载数据库到当前目录

# 运行检测
genomad end-to-end \
  contigs.fna \  # 输入:宏基因组组装的contigs
  genomad_output/ \  # 输出目录
  genomad_db/ \  # 数据库目录
  --threads 8 \  # 线程数
  --min-score 0.7  # 最低置信度阈值

# 结果文件
# genomad_output/
# ├── contigs_summary/
# │   ├── contigs_plasmid_summary.tsv  # 质粒预测结果
# │   ├── contigs_virus_summary.tsv    # 病毒预测结果
# │   └── contigs_summary.tsv         # 汇总

五、常见报错与解决

报错信息原因解决方案
MetaCHIP: BLAST errorBLAST版本不兼容使用blast >= 2.9.0版本
No HGTs detectedMAG数量太少或分类不够多样至少需要不同目/纲的MAG
WAAFLE database not found数据库未下载从WAAFLE GitHub下载数据库
Memory error in BLAST数据库太大分批运行或增加内存
geNomad: model loading error数据库版本不匹配重新下载匹配版本的数据库
FastTree: segfault序列比对文件格式错误检查MAFFT/MUSCLE输出

六、面试高频问题

Q1: HGT的三种方式?在宏基因组中怎么区分?

A: 转化(吸收裸DNA)、转导(噬菌体介导)、接合(质粒传递)。在宏基因组中,可以通过检测HGT基因附近是否有噬菌体序列(转导)、质粒复制子(接合)来区分。

Q2: 为什么HGT在肠道菌群中特别值得关注?

A: 因为肠道环境密度高、物种多,HGT频率高。最重要的是抗生素耐药基因的水平转移——一个菌获得耐药基因后可以通过HGT迅速传播给其他菌种。

Q3: MetaCHIP和WAAFLE的区别?

A: MetaCHIP基于MAG,使用系统发育+最佳匹配双重标准,需要分类信息,适合MAG-level分析。WAAFLE基于contig,检测嵌合contig(一个contig上基因来自不同物种),不需要先分箱,适合contig-level分析。


七、速查表

# ===== HGT检测速查 =====

# MetaCHIP(MAG-level)
MetaCHIP PI -p project -r o -i mags/ -x fa -taxon taxonomy.tsv -t 8

# WAAFLE(Contig-level)
waafle_search contigs.fna db --threads 8
waafle_orgscorer contigs.fna blast.out taxonomy.tsv
waafle_genecaller contigs.fna blast.out nolgt.tsv lgt.tsv

# geNomad(检测HGT载体)
genomad end-to-end contigs.fna output/ db/ --threads 8

# ===== HGT检测的判定标准 =====
# 1. 基因树和物种树不一致
# 2. GC含量/密码子使用偏差
# 3. contig上基因来自不同物种
# 4. 基因附近有移动元件特征

# ===== 三种HGT方式 =====
# 转化 = 捡别人的DNA
# 转导 = 噬菌体送错货
# 接合 = U盘拷贝(质粒)