跳转至

遗传变异致病性预测

一句话概述

利用CADD、REVEL、AlphaMissense和SpliceAI等计算工具对遗传变异进行致病性评估和优先级排序,是临床基因组学中从海量变异中筛选致病突变的核心分析步骤。


核心知识点表格

知识点关键内容常用工具
综合评分整合多种特征的meta-predictorCADD, REVEL, MetaSVM
错义变异氨基酸替换的功能影响预测AlphaMissense, PolyPhen-2, SIFT
剪接变异剪接位点破坏/创建预测SpliceAI, MaxEntScan
保守性进化保守位点更可能致病phyloP, phastCons, GERP++
蛋白结构结构对变异功能影响AlphaFold+变异分析
群体频率致病变异通常在群体中罕见gnomAD, ClinVar
临床分级ACMG/AMP五级分类标准InterVar, Franklin
基因不耐受性基因对LoF变异的耐受程度pLI, LOEUF, s_het

各步骤详解

第一步:理解变异致病性评估框架

白话解释: 每个人的基因组与参考序列相比大约有400-500万个变异。其中绝大多数是良性的,只有极少数可能导致疾病。致病性预测工具就像"筛子",帮助从海量变异中筛选出最可能致病的候选变异。这些工具利用进化保守性、蛋白质功能、群体频率等多维信息进行综合评分。

技术细节: - ACMG/AMP标准:5级分类(致病、可能致病、意义不明、可能良性、良性) - 28条证据标准:PM/PP/BA/BS/PVS等 - 计算预测只是证据之一(PP3/BP4),不能单独定性 - 不同类型变异需要不同工具:错义→REVEL/AlphaMissense,剪接→SpliceAI,同义→SpliceAI+保守性

第二步:CADD综合致病性评分

白话解释: CADD (Combined Annotation Dependent Depletion) 是最广泛使用的综合评分工具。最新版本v1.7(2024年发表于Nucleic Acids Research)整合了超过100种注释特征(保守性、蛋白影响、调控功能等),包括新增的蛋白语言模型(Meta ESM-1v)和调控区深度卷积神经网络预测,用机器学习模型区分"有害变异"(已被自然选择清除的)和"中性变异"。PHRED-scaled分数越高越可能有害,通常>20认为"可能有害",>30认为"很可能有害"。

技术细节: - 训练数据:模拟的有害变异(derived alleles) vs 模拟的中性变异 - 特征包括:SIFT, PolyPhen, GERP++, phyloP, GC content, splice site distance, ESM-1v蛋白语言模型分数, Zoonomia保守性等 - PHRED分数:-10*log10(rank/total), 20表示top 1%, 30表示top 0.1% - 适用于所有类型变异(SNV+InDel),包括非编码区 - 官方网站:https://cadd.gs.washington.edu/ 或 https://cadd.bihealth.org/

代码示例:

# 方法1: 使用CADD在线服务
# https://cadd.gs.washington.edu/score
# 上传VCF文件获取评分

# 方法2: 本地安装CADD
# 下载预计算分数(全基因组SNV约80GB)
wget https://krishna.gs.washington.edu/download/CADD/v1.7/GRCh38/whole_genome_SNVs.tsv.gz
wget https://krishna.gs.washington.edu/download/CADD/v1.7/GRCh38/whole_genome_SNVs.tsv.gz.tbi

# 查询特定变异的CADD分数
tabix whole_genome_SNVs.tsv.gz 1:942451-942451
# 输出: chr, pos, ref, alt, RawScore, PHRED

# 方法3: 使用CADD脚本评分自定义变异
git clone https://github.com/kircherlab/CADD-scripts.git
cd CADD-scripts

# 安装依赖和下载数据
./install.sh

# 对VCF文件评分
./CADD.sh -g GRCh38 -v v1.7 -o scored_variants.tsv.gz input.vcf

# 解析CADD分数
zcat scored_variants.tsv.gz | awk '$6 >= 20' > cadd_deleterious.tsv
# PHRED >= 20: top 1% most deleterious
# PHRED >= 30: top 0.1%

# 方法4: 使用Python/R注释
# Python
import pandas as pd
from pysam import TabixFile

cadd = TabixFile("whole_genome_SNVs.tsv.gz")
records = cadd.fetch("1", 942450, 942451)
for r in records:
    fields = r.split("\t")
    print(f"Chr:{fields[0]} Pos:{fields[1]} Ref:{fields[2]} Alt:{fields[3]} PHRED:{fields[5]}")

第三步:REVEL错义变异评分

白话解释: REVEL专门针对错义变异(氨基酸替换),它集成了13种独立预测工具的结果(包括SIFT、PolyPhen-2、MutationAssessor等),用随机森林训练了一个meta-predictor。比任何单一工具都更准确。分数0-1,越高越可能致病,通常>0.5作为初步筛选阈值。

代码示例:

# 下载REVEL预计算分数
wget https://sites.google.com/site/revelgenomics/downloads/revel-v1.3_all_chromosomes.zip
unzip revel-v1.3_all_chromosomes.zip

# 格式: chr, hg19_pos, grch38_pos, ref, alt, aaref, aaalt, REVEL
# 查询特定变异
zcat revel_all_chr.csv.gz | awk -F',' '$1=="1" && $3==942451'

# 批量注释VCF文件(使用VEP + REVEL插件)
vep --input_file variants.vcf \
    --output_file annotated.vcf \
    --format vcf \
    --vcf \
    --assembly GRCh38 \
    --cache \
    --plugin REVEL,revel_scores.tsv.gz \
    --plugin CADD,whole_genome_SNVs.tsv.gz \
    --plugin SpliceAI,snv=spliceai_scores.raw.snv.hg38.vcf.gz,indel=spliceai_scores.raw.indel.hg38.vcf.gz \
    --everything \
    --fork 8

# 解析VEP输出,提取高分变异
grep -v "^#" annotated.vcf | \
    awk '{if ($0 ~ /REVEL=/) {match($0, /REVEL=([0-9.]+)/, a); if (a[1] > 0.5) print}}' \
    > high_revel_variants.vcf

# R中使用REVEL注释
library(tidyverse)

# 读取REVEL数据
revel <- read_csv("revel_all_chr.csv.gz", 
    col_names=c("chr","hg19_pos","grch38_pos","ref","alt",
                "aaref","aaalt","REVEL"))

# 读取候选变异
variants <- read_tsv("candidate_variants.tsv")

# 合并注释
annotated <- variants %>%
    left_join(revel, by=c("chr","pos"="grch38_pos","ref","alt"))

# 筛选高致病性变异
# ClinGen校准阈值(Pejaver et al., 2022, AJHG):
#   PP3_Supporting: >= 0.644
#   PP3_Moderate:   >= 0.773
#   PP3_Strong:     >= 0.932
#   BP4_Moderate:   <= 0.183
pathogenic <- annotated %>%
    filter(REVEL >= 0.644) %>%  # ClinGen PP3_Supporting阈值
    arrange(desc(REVEL))

cat("REVEL >= 0.644 (PP3 Supporting) 的变异数:", nrow(pathogenic), "\n")

第四步:AlphaMissense深度学习预测

白话解释: AlphaMissense是Google DeepMind开发的最新工具,利用AlphaFold的蛋白质语言模型来预测错义变异的致病性。它学习了蛋白质序列进化和结构知识,不需要显式的结构特征输入。在最新benchmark中表现优于REVEL和CADD。

代码示例:

# 下载AlphaMissense预计算分数
# https://zenodo.org/record/8208688
# 文件: AlphaMissense_hg38.tsv.gz (约4.5GB)

import pandas as pd

# 读取AlphaMissense分数
am_scores = pd.read_csv("AlphaMissense_hg38.tsv.gz", 
    sep="\t", comment="#",
    names=["CHROM","POS","REF","ALT","genome","uniprot_id",
           "transcript_id","protein_variant","am_pathogenicity","am_class"])

# am_class: 'likely_pathogenic', 'likely_benign', 'ambiguous'
# am_pathogenicity: 0-1 连续分数
#
# 重要阈值说明:
# - 0.564 = 原始论文默认阈值(90%精度),但ClinGen校准表明此阈值
#   未达到PP3 Supporting的证据强度,不建议直接用于临床分类
# - ClinGen校准阈值(Bergquist et al., Genetics in Medicine, 2025):
#   PP3_Supporting: >= 0.719
#   PP3_Moderate:   >= 0.898
#   PP3_Strong:     >= 0.978
#   BP4_Moderate:   <= 0.070(较少变异达到此区间)
# - 临床变异分类应使用ClinGen校准阈值,而非原始论文阈值

# 查询特定变异
query = am_scores[(am_scores["CHROM"]=="chr1") & 
                   (am_scores["POS"]==942451)]
print(query)

# 统计全基因组分类分布
print(am_scores["am_class"].value_counts())
# likely_benign: ~50M
# likely_pathogenic: ~18M  
# ambiguous: ~22M

# 筛选致病候选
pathogenic_am = am_scores[am_scores["am_class"] == "likely_pathogenic"]

# 与VCF文件合并
import cyvcf2

vcf = cyvcf2.VCF("patient_variants.vcf.gz")
results = []
for variant in vcf:
    chrom = f"chr{variant.CHROM}"
    pos = variant.POS
    ref = variant.REF
    alt = variant.ALT[0]

    match = am_scores[(am_scores["CHROM"]==chrom) & 
                       (am_scores["POS"]==pos) & 
                       (am_scores["REF"]==ref) & 
                       (am_scores["ALT"]==alt)]
    if not match.empty:
        results.append({
            "variant": f"{chrom}:{pos}{ref}>{alt}",
            "am_score": match.iloc[0]["am_pathogenicity"],
            "am_class": match.iloc[0]["am_class"],
            "protein_change": match.iloc[0]["protein_variant"]
        })

results_df = pd.DataFrame(results)
print(results_df.sort_values("am_score", ascending=False).head(20))

第五步:SpliceAI剪接变异预测

白话解释: SpliceAI是一个深度学习模型,专门预测变异是否会影响RNA剪接。它能检测变异对附近剪接位点(供体/受体)的影响,包括现有剪接位点的破坏和新剪接位点的创建。对编码区和非编码区变异都适用。

代码示例:

# 安装SpliceAI
pip install spliceai

# 使用预计算分数(推荐,大约30GB)
# 下载地址: https://basespace.illumina.com/s/otSPW8hnhaZR
# spliceai_scores.raw.snv.hg38.vcf.gz
# spliceai_scores.raw.indel.hg38.vcf.gz

# 查询预计算分数
tabix spliceai_scores.raw.snv.hg38.vcf.gz chr1:942451-942451

# 或实时计算(适合少量变异)
spliceai -I input.vcf \
    -O output.vcf \
    -R /ref/hg38.fa \
    -A grch38 \
    -D 500    # 考虑距离剪接位点500bp范围

# 输出VCF中的SpliceAI注释:
# SpliceAI=ALLELE|SYMBOL|DS_AG|DS_AL|DS_DG|DS_DL|DP_AG|DP_AL|DP_DG|DP_DL
# DS: Delta Score (0-1)  DP: Delta Position (距离)
# AG: Acceptor Gain, AL: Acceptor Loss
# DG: Donor Gain, DL: Donor Loss

# 解读:
# DS >= 0.2: 可能影响剪接
# DS >= 0.5: 很可能影响剪接
# DS >= 0.8: 高置信度影响剪接

# Python中使用SpliceAI
from keras.models import load_model
import numpy as np

# 或更实用地解析预计算结果
import cyvcf2

vcf = cyvcf2.VCF("output_spliceai.vcf.gz")
splice_variants = []

for variant in vcf:
    info = variant.INFO.get("SpliceAI")
    if info:
        fields = info.split("|")
        allele, gene = fields[0], fields[1]
        ds_ag, ds_al, ds_dg, ds_dl = [float(x) for x in fields[2:6]]
        max_ds = max(ds_ag, ds_al, ds_dg, ds_dl)

        if max_ds >= 0.2:
            splice_variants.append({
                "chrom": variant.CHROM,
                "pos": variant.POS,
                "ref": variant.REF,
                "alt": variant.ALT[0],
                "gene": gene,
                "max_delta_score": max_ds,
                "acceptor_gain": ds_ag,
                "acceptor_loss": ds_al,
                "donor_gain": ds_dg,
                "donor_loss": ds_dl
            })

splice_df = pd.DataFrame(splice_variants)
print(f"影响剪接的变异: {len(splice_df)}")
print(splice_df.sort_values("max_delta_score", ascending=False).head(10))

第六步:整合评估与ACMG分类

白话解释: 单一工具的预测不够可靠,需要整合多种证据。ACMG/AMP标准提供了系统的变异分类框架,结合计算预测(PP3/BP4)、群体频率(BA1/PM2)、功能研究(PS3/BS3)等证据综合判断。

代码示例:

# 综合变异注释与分级
import pandas as pd

def classify_variant(row):
    """简化的变异分级逻辑"""
    evidence = {"pathogenic": [], "benign": []}

    # 1. 群体频率
    if row.get("gnomAD_AF", 0) > 0.05:
        evidence["benign"].append("BA1")  # 良性, standalone
    elif row.get("gnomAD_AF", 0) < 0.0001:
        evidence["pathogenic"].append("PM2")  # 罕见

    # 2. 计算预测(ClinGen校准阈值,Pejaver et al., 2022)
    # REVEL PP3: >=0.644(Supporting), >=0.773(Moderate), >=0.932(Strong)
    # REVEL BP4: <=0.183(Moderate), <=0.016(Strong)
    if row.get("REVEL", 0) >= 0.932:
        evidence["pathogenic"].append("PP3_Strong")
    elif row.get("REVEL", 0) >= 0.773:
        evidence["pathogenic"].append("PP3_Moderate")
    elif row.get("REVEL", 0) >= 0.644:
        evidence["pathogenic"].append("PP3")  # Supporting
    elif row.get("REVEL", 0) <= 0.183:
        evidence["benign"].append("BP4")  # Moderate

    # 3. 蛋白截断变异
    if row.get("consequence") in ["stop_gained", "frameshift"]:
        if row.get("pLI", 0) > 0.9:  # 基因对LoF不耐受
            evidence["pathogenic"].append("PVS1")

    # 4. ClinVar已知
    if row.get("ClinVar_class") == "Pathogenic":
        evidence["pathogenic"].append("PS1_like")

    # 5. SpliceAI
    if row.get("SpliceAI_max", 0) > 0.5:
        evidence["pathogenic"].append("PP3_splice")

    # 简化分类(实际应遵循ACMG完整规则)
    path_count = len(evidence["pathogenic"])
    benign_count = len(evidence["benign"])

    if "BA1" in evidence["benign"]:
        return "Benign"
    elif "PVS1" in evidence["pathogenic"] and path_count >= 2:
        return "Pathogenic"
    elif path_count >= 3:
        return "Likely_Pathogenic"
    elif benign_count >= 2:
        return "Likely_Benign"
    else:
        return "VUS"

# 应用分级
variants_df["ACMG_class"] = variants_df.apply(classify_variant, axis=1)
print(variants_df["ACMG_class"].value_counts())

# 使用InterVar自动ACMG分类
# pip install intervar
# 或命令行:
python InterVar.py \
    -b hg38 \
    -i input.vcf \
    --input_type=VCF \
    -o intervar_output \
    -d /db/intervar/

# 使用VEP + 多插件一站式注释
vep -i input.vcf -o annotated.vcf --vcf --assembly GRCh38 --cache \
    --plugin CADD,cadd_snvs.tsv.gz \
    --plugin REVEL,revel.tsv.gz \
    --plugin SpliceAI,snv=spliceai_snv.vcf.gz,indel=spliceai_indel.vcf.gz \
    --plugin AlphaMissense,file=AlphaMissense.tsv.gz \
    --plugin gnomADc,gnomad.genomes.vcf.gz \
    --everything --fork 8

实战命令

#!/bin/bash
# === 变异致病性评估完整流程 ===

VCF="patient_wes.vcf.gz"
REF="/ref/hg38.fa"
THREADS=8

# 1. VEP注释(一站式)
vep -i $VCF -o vep_annotated.vcf --vcf --assembly GRCh38 --cache \
    --plugin CADD,cadd.tsv.gz \
    --plugin REVEL,revel.tsv.gz \
    --plugin SpliceAI,snv=spliceai_snv.vcf.gz,indel=spliceai_indel.vcf.gz \
    --sift b --polyphen b --af_gnomade --everything --fork $THREADS

# 2. 过滤候选致病变异
# 保留: 罕见(AF<0.01) + 蛋白影响 + 高CADD/REVEL
bcftools query -f '%CHROM\t%POS\t%REF\t%ALT\t%INFO/CSQ\n' vep_annotated.vcf | \
    python3 filter_pathogenic.py > candidate_pathogenic.tsv

# 3. InterVar ACMG分级
python InterVar.py -b hg38 -i $VCF --input_type=VCF -o acmg_classified

面试常问点

Q1: CADD、REVEL和AlphaMissense各自的优势和适用范围? A: CADD(v1.7):适用范围最广(编码+非编码+InDel),v1.7新增蛋白语言模型和调控区CNN,综合性强但对错义变异不是最准。REVEL:专注错义变异,集成13种工具,ClinGen推荐的四个PP3/BP4工具之一(另三个为BayesDel、MutPred2、VEST4)。AlphaMissense:DeepMind开发,利用AlphaFold蛋白语言模型,ClinGen 2024年校准后也可达Strong级别PP3证据,但只覆盖错义变异。注意:ClinGen要求每个实验室/基因预先选定一个工具使用,不建议多工具取最高分。

Q2: 为什么计算预测不能单独决定变异分类? A: 虽然ClinGen 2022年校准后PP3/BP4可达Strong级别证据(不再限于Supporting),但计算预测仍不能单独定性。原因:1)所有工具都有假阳性/假阴性;2)同一变异只能使用一个工具的PP3/BP4证据,不能叠加多个工具;3)训练数据有偏(常见基因过度代表);4)不考虑基因型-表型关联和遗传模式;5)ACMG分类需要多条独立证据的组合才能达到Pathogenic/Likely Pathogenic。必须结合临床表型、家系共分离、功能实验等多方面证据。

Q3: SpliceAI的delta score如何解读? A: Delta score = 变异引起的剪接概率变化(0-1)。分四类:供体/受体 × 获得/丧失。≥0.2为可能影响,≥0.5为很可能,≥0.8为高置信度。注意:远离剪接位点的深度内含子变异也可能有高分(创建新剪接位点)。同一变异可能同时丧失旧位点和获得新位点。

Q4: gnomAD在变异解读中的作用? A: gnomAD v4.1(2024年发布)包含约73万外显子组和7.6万全基因组(共约80.7万个体),比v2/v3合计大5倍。核心用途:1)频率>5%的变异几乎不致显性疾病(BA1证据);2)罕见变异(AF<0.01%)更可能致病(PM2,注意ClinGen已建议将PM2降级为Supporting);3)pLI/LOEUF评估基因对LoF的不耐受性(v4引入转录本级别constraint指标);4)区分人群特异多态性;5)v4新增GroupMax Filtering Allele Frequency (FAF)替代旧版PopMax。

Q5: 基因pLI/LOEUF分数的含义? A: pLI (probability of LoF intolerance): 基因对功能丧失变异不耐受的概率。pLI>0.9表示该基因的LoF变异被强烈选择清除,LoF很可能致病。LOEUF (LoF observed/expected upper fraction): 更新的指标,越低越不耐受。LOEUF<0.35的基因LoF变异高致病风险。


易错点

  1. 单一工具定性:只用一个工具的分数决定致病性是错误的。必须多工具交叉验证+临床综合判断。

  2. 忽略基因组版本:CADD/REVEL/SpliceAI有GRCh37和GRCh38两个版本,混用会导致注释错误。

  3. 对VUS的过度解读:大量变异被分类为VUS(意义不明),不能被当作致病或良性处理。

  4. 遗传模式忽略:AR疾病中杂合LoF变异不致病(需要双等位基因变异);AD疾病中de novo变异权重更高。

  5. 非编码变异被忽略:大部分变异在非编码区,CADD能评分但不如编码区可靠。调控区变异需要特殊工具(RegulomeDB、DANN)。

  6. 群体频率数据库选择不当:gnomAD不含严重早发疾病患者,但含有迟发/隐性携带者。对于晚发病,频率阈值需要更宽松。


补充知识

预测工具推荐组合

错义变异: REVEL(>=0.644) 或 AlphaMissense(>=0.719) + CADD(>25)
         注意:ClinGen要求每个实验室/基因预先选定一个工具,不能混用取最高分
截断变异: pLI(>0.9)/LOEUF(<0.35) + NMD预测 + 最后外显子规则
剪接变异: SpliceAI(>0.5) + MaxEntScan + dbscSNV
非编码: CADD(>15) + DANN + RegulomeDB + ENCODE注释
同义变异: SpliceAI + 密码子使用频率变化 + ESE/ESS影响

ACMG证据强度与计算工具

证据强度对应工具/数据源
PVS1Very StrongLoF + pLI>0.9/LOEUF<0.35
PS1StrongClinVar同位置已知致病
PM1Moderate热点区域/功能域
PM2Supporting*gnomAD AF<0.01%(*ClinGen建议降级为Supporting)
PP3Supporting→StrongREVEL: >=0.644(Sup), >=0.773(Mod), >=0.932(Str)
PP3Supporting→StrongAlphaMissense: >=0.719(Sup), >=0.898(Mod), >=0.978(Str)
BA1StandalonegnomAD AF>5%
BP4Supporting→StrongREVEL: <=0.183(Mod), <=0.016(Str)
BP7Supporting同义+无剪接影响

注:PP3/BP4不再限于Supporting,ClinGen 2022年校准后可达Strong(Pejaver et al., AJHG 2022)。 2024年Bergquist等进一步校准了AlphaMissense、ESM1b、VARITY三个新工具。