罕见病致病变异筛选¶
一句话概述:罕见病分析通过 WES/WGS 数据,按照"频率过滤→功能注释→遗传模式筛选→ACMG分类"的标准流程,从数百万变异中找到 1~2 个致病变异。
核心知识点速查表¶
| 概念 | 白话解释 |
|---|---|
| 罕见病 | 患病率 <1/2000 的疾病(约 7000 种) |
| 先证者(Proband) | 最先被诊断的患者 |
| Trio分析 | 先证者+父+母三人组分析 |
| de novo 变异 | 新发突变(父母都没有) |
| 复合杂合 | 同一基因的两个不同杂合致病变异 |
| Exomiser | 罕见病变异优先排序工具 |
| OMIM | 在线人类孟德尔遗传数据库 |
| HPO | 人类表型本体论(标准化表型描述) |
一、分析流程¶
整体流程¶
第 1 步:变异检测与注释¶
# 假设已完成 GATK Best Practices 变异检测
# 得到过滤后的 VCF 文件
# 用 ANNOVAR 做全面注释
perl table_annovar.pl \
proband.vcf \ # 先证者VCF
humandb/ \ # 数据库目录
-buildver hg38 \ # 基因组版本
-out proband_annotated \ # 输出前缀
-remove \ # 删除临时文件
-protocol refGene,gnomad40_genome,gnomad40_exome,clinvar_20240917,dbnsfp42a,dbscsnv11,intervar_20180118 \
-operation g,f,f,f,f,f,f \ # 操作类型
-nastring . \ # 缺失值标记
-vcfinput # 输入是VCF格式
# 或用 VEP (Variant Effect Predictor)
vep --input_file proband.vcf \
--output_file proband_vep.vcf \
--cache \ # 使用本地缓存
--dir_cache ~/.vep \ # 缓存目录
--assembly GRCh38 \ # 基因组版本
--everything \ # 输出所有注释
--vcf \ # 输出VCF格式
--force_overwrite # 覆盖已有文件
第 2 步:频率过滤(最关键的一步)¶
# ========== Python脚本:变异过滤 ==========
import pandas as pd
# 读取 ANNOVAR 注释结果
variants = pd.read_csv("proband_annotated.hg38_multianno.txt",
sep="\t") # 读取注释结果
print(f"原始变异数: {len(variants)}")
# 第 1 步:频率过滤(核心!)
# 罕见病的致病变异在健康人群中应该极罕见
# 常染色体显性:gnomAD AF < 0.0001 (万分之一)
# 常染色体隐性:gnomAD AF < 0.01 (百分之一)
# 过滤 gnomAD 频率
for col in ['gnomAD_genome_ALL', 'gnomAD_exome_ALL']: # 检查两个数据库
variants[col] = pd.to_numeric(variants[col],
errors='coerce') # 转为数值
variants[col] = variants[col].fillna(0) # 缺失值设为0
# 保留罕见变异(AF < 0.01)
rare = variants[
(variants['gnomAD_genome_ALL'] < 0.01) & # 基因组频率<1%
(variants['gnomAD_exome_ALL'] < 0.01) # 外显子组频率<1%
]
print(f"频率过滤后: {len(rare)}")
# 第 2 步:功能过滤
# 只保留可能影响蛋白功能的变异
functional = rare[
rare['ExonicFunc.refGene'].isin([
'nonsynonymous SNV', # 错义突变
'stopgain', # 获得终止密码子
'stoploss', # 丢失终止密码子
'frameshift deletion', # 移码缺失
'frameshift insertion', # 移码插入
'nonframeshift deletion', # 非移码缺失
'nonframeshift insertion', # 非移码插入
'splicing', # 剪接位点变异
]) |
rare['Func.refGene'].str.contains('splicing', na=False) # 剪接区域
]
print(f"功能过滤后: {len(functional)}")
# 第 3 步:质量过滤
# 深度≥10, 基因型质量≥20
quality = functional[
(functional['QUAL'] > 30) # 变异质量>30
]
print(f"质量过滤后: {len(quality)}")
# 保存候选变异
quality.to_csv("candidate_variants.tsv", sep="\t", index=False)
第 3 步:Trio 分析(家系过滤)¶
# Trio 分析是罕见病诊断的"杀手锏"
# 先证者 + 父亲 + 母亲 一起测序分析
# GATK Joint Genotyping
gatk GenotypeGVCFs \
-R reference.fa \
-V proband.g.vcf.gz \ # 先证者
-V father.g.vcf.gz \ # 父亲
-V mother.g.vcf.gz \ # 母亲
-O trio.vcf.gz # 联合基因型
# 检测 de novo 变异(新发突变)
# de novo = 先证者有,父母都没有
bcftools view \
-i 'GT[0]="0/1" & GT[1]="0/0" & GT[2]="0/0"' \ # 先证者杂合,父母纯合参考
trio.vcf.gz > denovo_candidates.vcf
# 筛选复合杂合(Compound Heterozygous)
# 同一基因上,一个变异来自父亲,一个来自母亲
# 使用 gemini 工具
gemini load -v trio.vcf.gz -t VEP trio.db # 加载到gemini数据库
gemini comp_hets \
--columns "chrom,start,gene,impact" \
--filter "aaf < 0.01" \ # 频率<1%
trio.db > compound_hets.txt # 复合杂合结果
第 4 步:Exomiser 优先排序¶
# Exomiser 结合表型信息(HPO)和基因组数据做智能排序
# 安装
wget https://github.com/exomiser/Exomiser/releases/latest/download/exomiser-cli.zip
unzip exomiser-cli.zip
# 准备配置文件
cat << 'EOF' > analysis.yml
analysis:
vcf: proband.vcf # 输入VCF
ped: family.ped # 家系PED文件
proband: PROBAND_ID # 先证者ID
hpoIds: ['HP:0001250', 'HP:0001249', 'HP:0002069'] # HPO表型术语
# HP:0001250 = 癫痫
# HP:0001249 = 智力障碍
# HP:0002069 = 全面性肌阵挛
analysisMode: PASS_ONLY # 只分析PASS变异
inheritanceModes: # 考虑的遗传模式
AUTOSOMAL_DOMINANT: 0.1 # 常染色体显性
AUTOSOMAL_RECESSIVE_HOM_ALT: 0.1 # 常染色体隐性纯合
AUTOSOMAL_RECESSIVE_COMP_HET: 2.0 # 复合杂合
X_DOMINANT: 0.1 # X连锁显性
X_RECESSIVE: 0.1 # X连锁隐性
frequencySources:
- GNOMAD_E_AFR # gnomAD外显子组-非洲
- GNOMAD_E_EAS # gnomAD外显子组-东亚
- GNOMAD_E_SAS # gnomAD外显子组-南亚
pathogenicitySources:
- POLYPHEN # PolyPhen-2预测
- MUTATION_TASTER # MutationTaster预测
- SIFT # SIFT预测
- CADD # CADD评分
- REVEL # REVEL评分
steps:
- variantEffectFilter:
remove: [SYNONYMOUS_VARIANT] # 移除同义变异
- frequencyFilter:
maxFrequency: 1.0 # 最大频率1%
- pathogenicityFilter:
keepNonPathogenic: false # 移除预测为良性的
- inheritanceFilter: {} # 遗传模式过滤
- omimPrioritiser: {} # OMIM优先排序
- hiPhivePrioritiser: {} # 表型相似度排序
EOF
# 运行 Exomiser
java -jar exomiser-cli.jar \
--analysis analysis.yml # 运行分析
# 输出:HTML报告,按优先级排序的候选基因和变异
二、常见报错与解决¶
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 候选变异太多(>50个) | 过滤不够严格 | 降低频率阈值,加HPO表型过滤 |
| 候选变异为0 | 过滤太严或致病变异在非编码区 | 放宽频率阈值,考虑WGS |
| de novo 变异是假阳性 | 测序深度不够 | 要求先证者和父母深度均≥20X |
| 基因不在OMIM中 | 可能是新发现的致病基因 | 查文献和GeneMatcher |
| 复合杂合相位不确定 | WES无法确定相位 | 做长读长测序或家系验证 |
三、面试高频问题¶
Q1:罕见病变异筛选的一般策略?
(1) 频率过滤(AF<1%或0.01%)去掉常见变异;(2) 功能过滤保留蛋白质影响变异;(3) 遗传模式筛选(显性/隐性/X连锁/de novo);(4) 表型匹配(HPO/OMIM);(5) ACMG分类评估致病性。Trio分析是最有效的策略。
Q2:为什么 Trio 分析这么有效?
因为人均每代有 ~1 个 de novo 编码区突变。通过 Trio 分析可以直接找到这些新发突变,大幅缩小候选范围。约 60% 的重度智力障碍由 de novo 突变导致。
Q3:WES 的诊断率大概多少?
罕见病 WES 诊断率约 25-40%(取决于疾病类型和分析策略)。未诊断的原因:(1) 致病变异在非编码区(WES检测不到);(2) 结构变异(需要WGS或特殊分析);(3) 新基因尚未被发现;(4) 多基因遗传。
四、速查表¶
# === 罕见病变异筛选速查 ===
# 1. 变异注释
perl table_annovar.pl input.vcf humandb/ -buildver hg38 \
-protocol refGene,gnomad40_genome,clinvar,dbnsfp42a -operation g,f,f,f
# 2. 频率过滤阈值:
# 显性遗传: gnomAD AF < 0.0001 (万分之一)
# 隐性遗传: gnomAD AF < 0.01 (百分之一)
# 3. Trio de novo 检测
bcftools view -i 'GT[0]="0/1" & GT[1]="0/0" & GT[2]="0/0"' trio.vcf
# 4. Exomiser(表型驱动排序)
java -jar exomiser-cli.jar --analysis analysis.yml
# 5. HPO 表型术语查询
# https://hpo.jax.org/
# 罕见病诊断率参考:
# Trio WES: ~40%
# Singleton WES: ~25%
# WGS: ~45%
# 重分析(2-3年后): 额外 +10%
参考资料:ACMG Secondary Findings v3.2、Exomiser (Robinson et al. 2014)、100,000 Genomes Project、ClinGen