跳转至

344_遗传病致病变异筛选流程


一句话说明

从测序数据中找出"真正导致遗传病的那个变异"——从几百万个基因组变异里层层过滤,最终锁定致病候选,是临床基因组学的核心工作流程。


核心知识点

要点1:为什么需要变异筛选?

白话类比:测序产生的数据就像一本有300万个"差异"的字典,绝大多数差异是正常个体变异,找到其中那几个真正"出错"的字,就是筛选的任务。 专业解释:全基因组测序平均产生4-5百万个SNV/Indel,全外显子测序约8-10万个。通过频率过滤、功能预测、遗传模式分析等步骤,最终锁定1-10个候选致病变异。

要点2:频率过滤(人群频率)

白话类比:如果10000个健康人中有1000人带着这个变异,它大概率是正常的,不会是罕见病的原因。 专业解释:使用gnomAD(>730,000人)数据库过滤高频变异。常用阈值:罕见病 MAF < 0.001(0.1%);显性遗传病更严格,MAF < 0.0001。注意使用人群匹配频率(亚洲人vs欧洲人)。

要点3:功能注释与预测

白话类比:变异落在基因的哪个"重要部位"?会不会破坏蛋白质功能? 专业解释:功能注释工具:ANNOVAR、VEP(Ensembl)。功能预测评分:SIFT(< 0.05 = 有害)、PolyPhen-2(> 0.908 = 可能有害)、CADD(> 20 = 前1%有害变异)、AlphaMissense(2023年新工具,精度更高)。

要点4:遗传模式过滤

白话类比:根据疾病的遗传规律来筛选——显性病需要杂合变异,隐性病需要两个等位都异常。 专业解释:常见遗传模式:①常染色体显性(AD):杂合变异,亲本之一携带;②常染色体隐性(AR):纯合或复合杂合,三人组分析(Trio);③X连锁:根据性别判断。工具:SolveSpace、Phenolyzer。

要点5:表型优先级排序

白话类比:已知患者的症状,反推"哪些基因变异才能解释这些症状"——用症状来帮助缩小候选范围。 专业解释:使用HPO(人类表型本体)编码患者症状,工具Exomiser整合表型相似性+基因变异优先级排序,给每个候选变异打分,同时考虑基因是否有已知遗传病关联(OMIM数据库)。


实战命令/代码

# ========== 第一步:变异注释(ANNOVAR)==========

# 下载ANNOVAR数据库(需要注册)
# perl annotate_variation.pl -buildver hg38 -downdb -webfrom annovar \
#     refGene humandb/

# 运行ANNOVAR多库注释
perl table_annovar.pl \
    input.vcf \                      # 输入VCF文件
    humandb/ \                       # 数据库目录
    -buildver hg38 \                 # 参考基因组版本
    -out annotated_result \          # 输出前缀
    -remove \                        # 删除中间文件
    -protocol refGene,gnomad41_genome,clinvar_20240611,dbnsfp47a \  # 注释数据库
    -operation gx,f,f,f \           # 操作类型:基因/频率/频率/频率
    -nastring . \                    # 缺失值填充
    -vcfinput                        # 输入为VCF格式
# ========== 第二步:频率过滤 + 功能过滤 ==========
import pandas as pd   # 数据框处理

# 读取ANNOVAR注释结果
df = pd.read_csv("annotated_result.hg38_multianno.txt", sep='\t', low_memory=False)

print(f"原始变异数量: {len(df)}")  # 初始变异总数

# 步骤1:保留外显子区域变异
df = df[df['Func.refGene'].isin(['exonic', 'splicing'])]
print(f"外显子/剪接变异: {len(df)}")  # 过滤后数量

# 步骤2:过滤同义突变(不改变氨基酸的变异)
df = df[~df['ExonicFunc.refGene'].isin(['synonymous SNV'])]
print(f"非同义变异: {len(df)}")

# 步骤3:人群频率过滤(MAF < 0.001)
# 将频率列转为数值型,'.'转为NaN
df['AF_gnomad'] = pd.to_numeric(df['AF'], errors='coerce')
# 保留低频或未见变异(gnomAD)
df = df[(df['AF_gnomad'] < 0.001) | df['AF_gnomad'].isna()]
print(f"低频变异: {len(df)}")

# 步骤4:功能预测有害(CADD > 20)
df['CADD'] = pd.to_numeric(df['CADD_phred'], errors='coerce')
df_candidate = df[df['CADD'] >= 20]
print(f"CADD>=20候选变异: {len(df_candidate)}")  # 最终候选数
# ========== 第三步:ClinVar致病性注释 ==========
import re   # 正则表达式

def parse_clinvar(clnsig):
    """解析ClinVar临床意义字段"""
    if pd.isna(clnsig) or clnsig == '.':
        return 'Unknown'  # 无记录

    # 标记致病变异
    pathogenic_terms = ['Pathogenic', 'Likely_pathogenic', 
                        'Pathogenic/Likely_pathogenic']
    for term in pathogenic_terms:
        if term in str(clnsig):
            return 'Pathogenic'  # 致病或可能致病

    return 'Other'  # 其他分类

# 应用ClinVar解析
df_candidate['ClinVar_class'] = df_candidate['CLNSIG'].apply(parse_clinvar)

# 优先展示ClinVar已知致病变异
priority = df_candidate[df_candidate['ClinVar_class'] == 'Pathogenic']
print(f"ClinVar致病变异: {len(priority)}")
# ========== 第四步:Exomiser表型驱动排序 ==========

# 准备Exomiser配置文件
cat > exomiser_config.yml << 'EOF'
analysis:
    vcf: patient.vcf.gz           # 输入VCF
    proband: PATIENT_ID           # 先证者样本ID
    ped: family.ped               # 家系系谱文件(三人组用)
    hpoIds:                       # HPO表型编码(从patient症状得到)
        - HP:0001250  # 癫痫
        - HP:0000252  # 头围减小
        - HP:0001263  # 整体发育迟缓
    analysisMode: FULL            # 全面分析模式
    inheritanceModes:
        AUTOSOMAL_DOMINANT: 0.001   # 显性遗传频率阈值
        AUTOSOMAL_RECESSIVE: 0.001  # 隐性遗传频率阈值
outputOptions:
    outputFormats: [TSV_GENE, TSV_VARIANT, HTML]  # 输出格式
    numGenes: 20                  # 输出前20个候选基因
EOF

# 运行Exomiser
java -jar exomiser-cli-14.0.0.jar \
    --analysis exomiser_config.yml \  # 配置文件
    --output results/                  # 结果目录

面试常问点

★ Q1:WES变异筛选的标准流程是什么?按步骤说。

①质控→②比对(BWA)→③变异检测(GATK HaplotypeCaller)→④注释(VEP/ANNOVAR)→⑤频率过滤(gnomAD MAF<0.001)→⑥功能过滤(exonic/splicing + 非同义)→⑦预测过滤(CADD≥20/SIFT/PolyPhen)→⑧遗传模式过滤(三人组)→⑨表型优先级(Exomiser)→⑩ACMG分类→⑪数据库核查(ClinVar/OMIM)。

★ Q2:gnomAD频率阈值为什么对不同遗传模式不同?

显性遗传病(AD):一个等位基因变异即致病,理论上健康人不携带,阈值更严格(MAF<0.0001)。隐性遗传病(AR):携带者(杂合)在人群中可能常见,阈值可宽松(MAF<0.001),但纯合/复合杂合组合需满足Hardy-Weinberg频率极低。

★ Q3:CADD评分的意义是什么?20分和30分的区别?

CADD(Combined Annotation Dependent Depletion)是整合多种功能注释的综合评分,Phred-scaled。CADD≥10 = 前10%有害变异,CADD≥20 = 前1%,CADD≥30 = 前0.1%。面试记住:20分是常用的"可疑有害"阈值,30分用于高置信度过滤。

★ Q4:Exomiser如何结合表型排序?

Exomiser使用HPO本体计算患者症状与已知遗传病表型的相似度分数(phenodigm算法),再与变异致病性分数、遗传模式符合度综合打分(Exomiser综合分0-1),优先级排序基因-变异组合。

★ Q5:什么是复合杂合(Compound Heterozygous)?

同一基因的两条染色体各有一个致病变异(一个来自父亲,一个来自母亲),每个亲本各携带一个,子女同时继承两个→导致常染色体隐性疾病。区别于纯合(同一变异在两条染色体上),需要三人组数据(Trio)来验证亲本来源。


速查表

过滤步骤工具/数据库阈值变异保留率估计
区域过滤refGene注释exonic+splicing~1-2%
功能过滤ExonicFunc排除synonymous~70-80%
频率过滤gnomAD v4MAF<0.001~10-30%
功能预测CADD Phred≥20~30-50%
遗传模式Trio PEDAD/AR/XL~50-80%
表型驱动Exomiser综合分排序前20个候选
功能预测工具有害阈值特点
SIFT<0.05基于氨基酸保守性
PolyPhen-2>0.908基于结构+保守性
CADD≥20 (Phred)整合多维特征
AlphaMissense>0.564AlphaFold结构预测
REVEL>0.5集成多预测器