跳转至

长读测序单倍型组装 phasing


一句话说明

人类是二倍体——每条染色体有来自爸爸和妈妈的两份。Phasing(分装/定相)就是把测序数据拆分成两套单倍型,搞清楚每个变异位点到底在爸爸那条还是妈妈那条染色体上。


核心知识点

要点1:什么是 Phasing

  • 二倍体基因组 = 父源单倍型 + 母源单倍型
  • 短读测序得到的变异是"混合"的——只知道某个位置有 A 和 G,不知道 A 在哪条染色体
  • Phasing = 确定每个杂合变异在哪条染色体上,构建完整的单倍型序列
  • 白话类比:你同时听到两个人说话(混合信号),phasing 就是把两个人的话分开来

要点2:为什么 Phasing 重要

  • 复合杂合突变:两个致病变异在同一基因上,如果在同一条染色体(顺式)→ 另一条正常 → 可能不致病;如果在不同染色体(反式)→ 两条都坏 → 致病
  • 等位基因特异性表达:需要知道哪条等位基因在表达
  • 群体遗传学:单倍型频率、连锁不平衡分析
  • 基因组组装:单倍型组装质量更高

要点3:Phasing 的三种方法

方法原理需要数据Phasing 范围
读基础 phasing长读跨越多个杂合位点长读数据读长范围内(10-100kb)
Trio phasing用父母基因型确定遗传来源父母+子代全基因组
群体 phasing统计推断(连锁不平衡)群体参考面板全基因组
Hi-C phasing染色体内接触频率Hi-C 数据全染色体

要点4:长读 Phasing 的优势

  • HiFi 读长 ~15-20kb,可以直接连接距离 <20kb 的杂合位点
  • ONT 超长读可以跨越 50-100kb 以上
  • 结合 Hi-C 可以实现全染色体级别的 phasing
  • hifiasm 可以直接输出单倍型组装(hap1 + hap2)

实战代码

# ===== 长读测序 Phasing 流程 =====

# ===== 方法1:WhatsHap — 读基础 phasing =====

# 1. 先用 DeepVariant 等工具 call 变异(SNP + Indel)
# 假设已有 variants.vcf.gz 和 aligned.sorted.bam

# 2. WhatsHap phase:根据长读连接杂合位点
whatshap phase \
    --reference hg38.fa \
    --output phased.vcf.gz \
    variants.vcf.gz \
    aligned.sorted.bam

# 3. 查看 phasing 统计
whatshap stats phased.vcf.gz \
    --gtf gencode.annotation.gtf \
    > phasing_stats.txt

# 关键指标:
# - Phase block N50: 最大连续 phasing 区域的 N50
# - Phased variants: 被 phased 的变异比例
# - Switch error rate: phasing 错误率

# 4. 用 phased VCF 标记 BAM(haplotag)
# 给每条 read 打上 HP:1 或 HP:2 标签
whatshap haplotag \
    --reference hg38.fa \
    --output haplotagged.bam \
    phased.vcf.gz \
    aligned.sorted.bam
samtools index haplotagged.bam

# 5. 按单倍型分割 BAM
# 分出 hap1 和 hap2 的 reads
samtools view -h -d HP:1 haplotagged.bam | \
    samtools sort -@ 4 -o hap1.bam
samtools view -h -d HP:2 haplotagged.bam | \
    samtools sort -@ 4 -o hap2.bam
samtools index hap1.bam
samtools index hap2.bam

# ===== 方法2:hifiasm 直接单倍型组装 =====

# 使用 Hi-C 数据辅助 phasing
hifiasm -o asm_phased -t 32 \
    --h1 hic_R1.fastq.gz \
    --h2 hic_R2.fastq.gz \
    hifi_reads.fastq.gz

# 输出两套单倍型组装
awk '/^S/{print ">"$2; print $3}' \
    asm_phased.hic.hap1.p_ctg.gfa > hap1_assembly.fa
awk '/^S/{print ">"$2; print $3}' \
    asm_phased.hic.hap2.p_ctg.gfa > hap2_assembly.fa

# ===== 方法3:Trio phasing(需要父母数据) =====

# 1. 用 yak 建父母 k-mer 库
yak count -t 16 -b 37 -o pat.yak father_illumina.fastq.gz
yak count -t 16 -b 37 -o mat.yak mother_illumina.fastq.gz

# 2. hifiasm trio 模式
hifiasm -o asm_trio -t 32 \
    -1 pat.yak -2 mat.yak \
    child_hifi.fastq.gz

# 输出:完全按父母来源分开的两套组装
# asm_trio.dip.hap1.p_ctg.gfa → 父源单倍型
# asm_trio.dip.hap2.p_ctg.gfa → 母源单倍型
# ===== Python: Phasing 质量评估 =====
import pysam
from collections import Counter

# 统计 haplotagged BAM 的 phasing 情况
bam = pysam.AlignmentFile("haplotagged.bam", "rb")

hp_counts = Counter()
unphased = 0
total = 0

for read in bam:
    if read.is_unmapped or read.is_secondary:
        continue
    total += 1
    if read.has_tag("HP"):
        hp = read.get_tag("HP")  # 1 或 2
        hp_counts[hp] += 1
    else:
        unphased += 1

bam.close()

print(f"总 reads 数: {total}")
print(f"Hap1 reads: {hp_counts[1]} ({hp_counts[1]/total*100:.1f}%)")
print(f"Hap2 reads: {hp_counts[2]} ({hp_counts[2]/total*100:.1f}%)")
print(f"未 phased: {unphased} ({unphased/total*100:.1f}%)")
# 理想情况:Hap1 和 Hap2 大致相等,未 phased 比例低

# 解析 phasing 统计文件
print("\n=== Phase Block 统计 ===")
with open("phasing_stats.txt") as f:
    for line in f:
        if "N50" in line or "phased" in line.lower():
            print(line.strip())

面试常问点

★ 为什么长读测序能做 phasing 而短读不行?

参考答案:Phasing 的核心是连接杂合位点——需要一条 read 同时覆盖两个或以上的杂合位点,才能判断哪些变异在同一条染色体上。人类基因组中杂合位点的平均间距约 1-2kb,短读只有 150bp,绝大部分读只能覆盖一个杂合位点,无法建立连接。长读 10-100kb,可以轻松跨越多个杂合位点,直接看到同一条 DNA 分子上的变异组合。这就是为什么长读的 phase block N50 可以达到 Mb 级别,而短读只有几 kb。

★ Trio phasing 和 Hi-C phasing 各自的优缺点?

参考答案:Trio phasing 需要父母的测序数据,通过孟德尔遗传规律确定每个变异的亲本来源,phasing 准确率最高(switch error < 0.1%),且能实现全基因组完整 phasing。缺点是必须有父母样本。Hi-C phasing 只需要样本本身的 Hi-C 数据,利用同一条染色体上的 DNA 接触频率来连接远距离的变异位点,可以实现染色体级别的 phasing。缺点是准确率略低(switch error ~1-2%),且需要额外做 Hi-C 实验。


速查卡片

问题一句话答案
Phasing 含义确定每个杂合变异在哪条染色体上
读基础 phasing 工具WhatsHap
Trio phasing 需要父母双方的测序数据
Hi-C phasing 优势全染色体级别 phasing
hifiasm 单倍型输出hap1.p_ctg.gfa + hap2.p_ctg.gfa
Phase block N50 含义连续 phasing 区域的 N50 长度
复合杂合突变判断需要 phasing 确定顺式/反式
HP 标签含义BAM 中 HP:1 或 HP:2 表示单倍型归属