泛基因组分析
一句话概述:泛基因组(Pan-genome)是一个物种所有个体基因组的集合,包含核心基因组(所有个体共有)和可变基因组(部分个体特有),揭示物种内的遗传多样性全景。
核心知识点速查表
| 概念 | 说明 |
|---|
| 泛基因组 | 一个物种所有个体基因组的总和(白话:全班同学的基因拼在一起) |
| 核心基因组(Core) | 所有个体都有的基因集(白话:每个人都有的必备基因) |
| 可变基因组(Dispensable) | 仅部分个体有的基因集(白话:有些人有、有些人没有的基因) |
| 附属基因组(Accessory) | 2个以上但非全部个体有的基因 |
| 特有基因(Private) | 仅在单个个体中出现的基因 |
| 图基因组(Graph genome) | 用图结构表示泛基因组变异 |
| PAV | Presence/Absence Variation,基因存在/缺失变异 |
| SV | Structural Variation,结构变异 |
一、细菌泛基因组分析
1.1 Roary分析
# === 安装Roary ===
conda install -c bioconda roary # conda安装
# === 输入准备 ===
# Roary需要GFF3文件(Prokka注释的输出)
# 先用Prokka注释所有基因组
for genome in genomes/*.fasta; do
name=$(basename "$genome" .fasta) # 提取文件名
prokka \
--outdir "prokka_${name}" \ # 输出目录
--prefix "$name" \ # 输出前缀
--cpus 8 \ # CPU数
"$genome" # 输入基因组
done
# === 运行Roary ===
roary \
-p 16 \ # 线程数
-f roary_output \ # 输出目录
-e \ # 生成多序列比对
-n \ # 使用MAFFT比对(更准)
-i 95 \ # 序列一致性阈值(95%=同种,70%=同属)
-cd 99 \ # 核心基因定义:99%个体都有的
-v \ # 详细输出
prokka_*/*.gff # 所有GFF3文件
# === Roary结果文件 ===
# roary_output/
# ├── gene_presence_absence.csv # ★基因存在/缺失矩阵
# ├── gene_presence_absence.Rtab # R语言可读的矩阵
# ├── summary_statistics.txt # ★泛基因组统计
# ├── core_gene_alignment.aln # 核心基因比对(建树用)
# ├── number_of_conserved_genes.Rtab # 保守基因数
# └── pan_genome_reference.fa # 泛基因组参考序列
# 查看统计
cat summary_statistics.txt
# Core genes (99% <= strains <= 100%) 1234 # 核心基因数
# Soft core genes (95% <= strains < 99%) 56 # 软核心基因数
# Shell genes (15% <= strains < 95%) 789 # 壳层基因数
# Cloud genes (0% <= strains < 15%) 456 # 云层基因数
# Total genes 2535 # 泛基因组总基因数
1.2 PGAP/Panaroo替代方案
# === Panaroo(更准确,推荐2024+) ===
conda install -c bioconda panaroo
panaroo \
-i prokka_*/*.gff \ # 所有GFF3文件
-o panaroo_output \ # 输出目录
--clean-mode strict \ # 严格清理模式(去除污染和错误注释)
-t 16 \ # 线程数
-a core \ # 输出核心基因比对
--core_threshold 0.98 # 核心基因阈值(98%个体都有)
二、植物/真核泛基因组分析
# === 使用PGGB构建图泛基因组 ===
conda install -c bioconda pggb
# 第1步:合并所有基因组
cat genome1.fa genome2.fa genome3.fa > all_genomes.fa # 合并
# 第2步:建立索引(用samtools和PanSN-spec命名)
samtools faidx all_genomes.fa # 建索引
# 第3步:运行PGGB
pggb \
-i all_genomes.fa \ # 输入:所有基因组合并文件
-o pggb_output \ # 输出目录
-n 5 \ # 基因组数量
-t 16 \ # 线程数
-p 95 \ # 序列一致性阈值(同种95%)
-s 10000 \ # segment大小
-G 3000 # POA段长度
# === 使用Minigraph-Cactus构建图基因组 ===
# 2024-2025最推荐的图基因组构建流程
# 安装
pip install cactus
# 准备seqfile(物种-基因组对应文件)
cat > seqfile.txt << 'EOF'
ref genome_ref.fa
sample1 genome1.fa
sample2 genome2.fa
sample3 genome3.fa
EOF
# 运行Minigraph-Cactus
cactus-pangenome \
jobStore \ # 作业存储目录
seqfile.txt \ # 序列文件
--outDir mc_output \ # 输出目录
--outName pangenome \ # 输出名称
--reference ref \ # 参考基因组名
--vcf \ # 输出VCF变异文件
--gfa \ # 输出GFA图格式
--gbz # 输出GBZ索引
三、泛基因组可视化
# === 使用Roary绘制泛基因组图 ===
# Roary自带可视化脚本
roary_plots.py \
core_gene_tree.nwk \ # 核心基因系统发育树
gene_presence_absence.csv # 基因存在缺失矩阵
# 输出: pangenome_matrix.png, pangenome_pie.png等
# === Python绘制泛基因组累积曲线 ===
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
# 模拟数据(实际从Roary/Panaroo结果获取)
n_genomes = np.arange(1, 21) # 基因组数量1-20
pan_size = [2000, 2800, 3400, 3800, 4100, 4300, # 泛基因组大小
4450, 4550, 4630, 4690, 4740, 4780,
4810, 4835, 4855, 4870, 4882, 4892, 4900, 4906]
core_size = [2000, 1800, 1700, 1650, 1620, 1600, # 核心基因组大小
1590, 1582, 1576, 1572, 1569, 1567,
1565, 1564, 1563, 1562, 1562, 1561, 1561, 1561]
fig, ax = plt.subplots(figsize=(8, 6)) # 创建画布
ax.plot(n_genomes, pan_size, 'b-o', label='Pan-genome') # 泛基因组曲线
ax.plot(n_genomes, core_size, 'r-s', label='Core-genome') # 核心基因组曲线
ax.set_xlabel('Number of Genomes') # x轴标题
ax.set_ylabel('Number of Gene Families') # y轴标题
ax.legend() # 图例
ax.set_title('Pan-genome Accumulation Curve') # 标题
plt.tight_layout()
plt.savefig('pangenome_curve.png', dpi=300) # 保存
# 解读:
# 泛基因组曲线趋于平稳 → 封闭型泛基因组(基因已基本采样完)
# 泛基因组曲线持续上升 → 开放型泛基因组(需更多样本)
四、面试高频考点
Q1: 开放型 vs 封闭型泛基因组?
- 开放型(Open):随着新个体加入,泛基因组持续增大。说明物种基因多样性高,常见于环境菌
- 封闭型(Closed):加入新个体后泛基因组趋于稳定。说明物种基因相对保守,常见于宿主适应菌
- 白话:开放型=每加一个新同学都带来新玩具;封闭型=新同学来了发现大家玩具都差不多
Q2: 泛基因组在宏基因组研究中的应用?
- 用泛基因组参考替代单一参考基因组,提高reads比对率
- 发现菌株水平的功能差异(同一物种不同菌株的毒力/耐药基因不同)
- 图基因组可以更完整地检测结构变异
Q3: 图基因组和传统线性参考的区别?
- 线性参考:一条序列,无法表示变异
- 图基因组:图结构包含所有变异路径,减少参考偏差
- 2024+趋势:图基因组正在替代传统参考(如T2T+HPP图基因组)
常见报错与解决
| 报错 | 原因 | 解决方案 |
|---|
Roary core genes = 0 | 基因组太多样或注释不一致 | 降低-cd阈值到95 |
| Panaroo内存不足 | 基因组数量太多 | 分批运行或增加内存 |
| PGGB运行很慢 | 大基因组/参数不合适 | 增大-s参数,减少-n |
No GFF files | 路径或格式错误 | 检查GFF3格式,用Prokka重新注释 |
速查表
# === 泛基因组分析速查 ===
# 细菌泛基因组(推荐Panaroo)
panaroo -i *.gff -o output --clean-mode strict -t 16
# 细菌泛基因组(经典Roary)
roary -p 16 -f output -e -n *.gff
# 真核图泛基因组(推荐Minigraph-Cactus)
cactus-pangenome jobStore seqfile.txt --outDir output --reference ref
# 核心基因建树
iqtree2 -s core_gene_alignment.aln -m MFP -bb 1000