跳转至

泛基因组分析

一句话概述:泛基因组(Pan-genome)是一个物种所有个体基因组的集合,包含核心基因组(所有个体共有)和可变基因组(部分个体特有),揭示物种内的遗传多样性全景。

核心知识点速查表

概念说明
泛基因组一个物种所有个体基因组的总和(白话:全班同学的基因拼在一起)
核心基因组(Core)所有个体都有的基因集(白话:每个人都有的必备基因)
可变基因组(Dispensable)仅部分个体有的基因集(白话:有些人有、有些人没有的基因)
附属基因组(Accessory)2个以上但非全部个体有的基因
特有基因(Private)仅在单个个体中出现的基因
图基因组(Graph genome)用图结构表示泛基因组变异
PAVPresence/Absence Variation,基因存在/缺失变异
SVStructural 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