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 | 最可靠但计算量大 |
| 比较基因组法 | 一个基因在近缘种中有而在远缘种中也有 | 需要参考基因组 |
| 泛基因组法 | 基于泛基因组检测嵌合的contig | WAAFLE的核心方法 |
二、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 error | BLAST版本不兼容 | 使用blast >= 2.9.0版本 |
No HGTs detected | MAG数量太少或分类不够多样 | 至少需要不同目/纲的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盘拷贝(质粒)