跳转至

349_致病性变异分类ACMG标准


一句话说明

ACMG标准是遗传变异的"打分规则书"——把每个变异按证据分成5个等级(致病/可能致病/意义未明/可能良性/良性),是临床遗传报告的国际通用语言。


核心知识点

要点1:ACMG五级分类体系

白话类比:就像法庭判案——确定有罪(Pathogenic)、疑似有罪(Likely Pathogenic)、证据不够(VUS)、疑似无罪(Likely Benign)、确定无罪(Benign)。 专业解释:ACMG/AMP 2015标准定义5级: - P(Pathogenic/致病):强证据支持致病 - LP(Likely Pathogenic/可能致病):较强证据,90%+概率致病 - VUS(Variant of Uncertain Significance/意义不明):证据不足 - LB(Likely Benign/可能良性):较强证据支持良性 - B(Benign/良性):强证据支持良性

要点2:证据分类框架(28条标准)

白话类比:就像给一份证据清单打分——每条证据有强弱之分,积累足够的"有罪"证据才能判定致病。 专业解释:致病性证据:PVS1(无效变异)、PS1-4(强致病)、PM1-6(中等致病)、PP1-5(支持致病)。良性证据:BA1(等位基因频率很高)、BS1-4(强良性)、BP1-7(支持良性)。分类规则:P/LP需组合多条证据达到阈值,B/LB需足够良性证据,否则为VUS。

要点3:关键证据条目详解

白话类比:理解最常用的几张"判决书"——PVS1(基因功能破坏)、PS3(功能实验)、PM2(频率很低)。 专业解释: - PVS1(Very Strong Pathogenic):无效变异(无义突变、剪接位点、起始密码子、移码)在致病基因中。需注意:基因确实是通过该机制致病(非功能获得型) - PS3(Strong Pathogenic):体外/体内功能实验证明有害 - PM2(Moderate Pathogenic):gnomAD中频率极低(或缺失),但注意2020年ClinGen SVI降级为PM2_Supporting - PP3(Supporting Pathogenic):多种预测软件(SIFT、PolyPhen、CADD)预测有害 - BA1(Stand Alone Benign):gnomAD MAF≥5%(直接判定良性)

要点4:VUS的困境与解决

白话类比:VUS就像"疑似嫌疑人"——证据既不够定罪也不够无罪释放,是临床报告中最棘手的情况。 专业解释:VUS比例在WES中可达30-50%(取决于基因和疾病)。降低VUS的策略:①功能实验(升级到PS3);②更多家系数据(PP1共分离);③随时间reclassification(数据库更新);④疾病特异性VCEP标准(ClinGen专家组对特定基因细化标准,减少VUS);⑤更大人群频率数据。

要点5:ClinGen专家组对ACMG的细化更新

白话类比:2015年的通用规则太粗糙,不同疾病需要"专科解释"——ClinGen各疾病VCEP(专家组)不断细化每条标准的具体应用。 专业解释:ClinGen SVI工作组关键更新(2020-2024):①PM2降级为PM2_Supporting(2020);②PP3/BP4计算工具校准(2023);③PP1/BS4共分离证据具体计分规则(2023);④PP1+PP4组合上限为Strong+Supporting(2024,Biesecker等);⑤splicing变异的PVS1(RNA)特殊处理(2023)。


实战命令/代码

# ========== 使用InterVar自动化ACMG分类 ==========

# InterVar是目前最广泛使用的自动化ACMG分类工具
# 安装:pip install intervar 或从GitHub下载

import subprocess   # 调用命令行
import pandas as pd # 数据处理

def run_intervar(annotated_vcf, output_prefix):
    """
    运行InterVar自动ACMG分类
    annotated_vcf: ANNOVAR注释后的VCF文件
    """
    cmd = [
        "python", "Intervar.py",
        "-b", "hg38",                    # 参考基因组版本
        "-i", annotated_vcf,             # 输入注释VCF
        "--input_type", "VCF",           # 输入类型
        "-o", output_prefix,             # 输出前缀
        "-d", "humandb/",               # ANNOVAR数据库目录
        "--table_annovar", "table_annovar.pl",  # ANNOVAR脚本路径
        "--convert2annovar", "convert2annovar.pl"  # 格式转换脚本
    ]

    result = subprocess.run(cmd, capture_output=True, text=True)
    print("InterVar运行完成" if result.returncode == 0 else f"错误: {result.stderr}")

# 读取InterVar结果
def parse_intervar_results(intervar_output):
    """
    解析InterVar输出,提取ACMG分类信息
    """
    df = pd.read_csv(intervar_output, sep='\t', header=0)

    # 提取ACMG分类列
    acmg_col = [col for col in df.columns if 'InterVar' in col][0]

    # 统计各等级变异数量
    classification_counts = df[acmg_col].value_counts()
    print("ACMG分类统计:")
    for cls, count in classification_counts.items():
        print(f"  {cls}: {count}")  # 输出各级别数量

    # 提取P/LP变异
    pathogenic = df[df[acmg_col].str.contains('Pathogenic', na=False)]
    print(f"\n致病/可能致病变异: {len(pathogenic)}")

    return df, pathogenic

# 使用示例
# run_intervar("patient.vcf", "patient_intervar")
# df, pl_variants = parse_intervar_results("patient_intervar.hg38_multianno.txt.intervar")
# ========== 手动ACMG规则应用(核心规则示例)==========

def classify_variant_acmg(variant_info):
    """
    根据变异信息应用核心ACMG规则
    variant_info: 字典,包含变异相关信息
    """
    pathogenic_evidence = []  # 致病证据
    benign_evidence = []      # 良性证据

    # ===== 致病性证据检查 =====

    # PVS1: 无效变异在已知致病基因中
    if variant_info.get('consequence') in ['stop_gained', 'frameshift', 
                                            'splice_donor', 'splice_acceptor',
                                            'start_lost']:
        if variant_info.get('gene_known_lof_disease', False):
            pathogenic_evidence.append(('PVS1', 'Very Strong'))  # 最强致病证据

    # PS3: 功能实验证明有害(需要实验数据)
    if variant_info.get('functional_study_harmful', False):
        pathogenic_evidence.append(('PS3', 'Strong'))  # 强致病证据

    # PM2: 人群频率极低(2020年后降为Supporting)
    gnomad_af = variant_info.get('gnomad_af', 0)
    if gnomad_af < 0.0001 or gnomad_af == 0:  # 极低频或未见
        pathogenic_evidence.append(('PM2_Supporting', 'Supporting'))

    # PP3: 计算预测工具预测有害
    cadd = variant_info.get('cadd_phred', 0)
    if cadd >= 20:
        pathogenic_evidence.append(('PP3', 'Supporting'))  # 支持致病证据

    # PP5: ClinVar已知致病报告(多个提交者)
    clinvar_sig = variant_info.get('clinvar_significance', '')
    if 'Pathogenic' in clinvar_sig:
        pathogenic_evidence.append(('PP5', 'Supporting'))

    # ===== 良性证据检查 =====

    # BA1: 人群频率>=5%(直接良性)
    if gnomad_af >= 0.05:
        benign_evidence.append(('BA1', 'Stand Alone'))  # 独立良性证据

    # BS1: 频率高于预期(疾病频率)
    elif gnomad_af >= 0.01:
        benign_evidence.append(('BS1', 'Strong'))  # 强良性证据

    # BP4: 计算预测工具预测良性
    sift = variant_info.get('sift_score', 1.0)
    if sift > 0.5:  # SIFT >0.5认为耐受
        benign_evidence.append(('BP4', 'Supporting'))

    # ===== 综合分类 =====
    classification = classify_by_rules(pathogenic_evidence, benign_evidence)

    return {
        'pathogenic_evidence': pathogenic_evidence,
        'benign_evidence': benign_evidence,
        'classification': classification
    }

def classify_by_rules(path_ev, benign_ev):
    """根据ACMG规则组合进行分类"""
    # 简化版规则(实际分类需完整规则表)
    path_strength = {'Very Strong': 4, 'Strong': 3, 'Moderate': 2, 'Supporting': 1}

    # 计算致病证据总分
    path_score = sum(path_strength.get(s, 0) for _, s in path_ev)

    # 良性证据存在Stand Alone直接良性
    if any(s == 'Stand Alone' for _, s in benign_ev):
        return 'Benign (B)'

    # 分类逻辑
    if path_score >= 8:
        return 'Pathogenic (P)'      # 致病
    elif path_score >= 6:
        return 'Likely Pathogenic (LP)'  # 可能致病
    elif len(benign_ev) >= 2:
        return 'Likely Benign (LB)'  # 可能良性
    else:
        return 'VUS'                  # 意义未明
# ========== ClinVar查询确认已知分类 ==========

# 使用E-utilities API查询ClinVar
# 示例:查询特定变异的ClinVar记录

# 方法1:直接API查询(基于rsID)
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?\
db=clinvar&term=rs80357906[RS]&retmax=5&retmode=json" \
| python3 -c "import json,sys; data=json.load(sys.stdin); \
print('ClinVar ID:', data['esearchresult']['idlist'])"  # 输出ClinVar ID

# 方法2:使用ClinVar API搜索(推荐)
python3 << 'EOF'
import requests   # HTTP请求
import json       # JSON解析

# 搜索BRCA1 c.5266dupC(常见BRCA1致病变异)
url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi"
params = {
    "db": "clinvar",
    "term": "BRCA1[GENE] AND 5266dupC[VARIANT]",  # 搜索条件
    "retmax": 5,
    "retmode": "json"
}
response = requests.get(url, params=params, timeout=30)
data = response.json()
print("ClinVar搜索结果ID:", data['esearchresult']['idlist'])  # 打印结果ID
EOF

面试常问点

★ Q1:说出ACMG的5个分类和28条规则框架。

5分类:P、LP、VUS、LB、B。28条规则分为致病组(PVS1×1 + PS1-4×4 + PM1-6×6 + PP1-5×5 = 16条)和良性组(BA1×1 + BS1-4×4 + BP1-7×7 = 12条)。记忆口诀:PVS=Very Strong(最强),PS=Strong(强),PM=Moderate(中),PP=Supporting(支持致病);BA=Stand Alone,BS=Strong良性,BP=Supporting良性。

★ Q2:VUS如何处理?报告还是不报告?

VUS在临床报告中确实需要报告,但需注明"意义未明,不建议单独用于临床决策"。处理策略:①记录在案,定期(每年)重评估;②告知患者后续数据库更新可能reclassification;③可以追加功能实验(如有研究条件);④通过患者注册(ClinVar共享)促进数据积累。临床不建议因VUS做预防性手术或干预(不同于P/LP)。

★ Q3:PM2在2020年后为什么降级?有什么影响?

PM2原本是"Moderate致病证据"(低频率=可能致病),但ClinGen SVI工作组发现:随着gnomAD数据库扩增(从数万到>730,000人),大量罕见变异在正常人群中被发现,PM2的"低频=致病"逻辑不够严格。2020年降为PM2_Supporting后,单独的低频证据权重减轻,需要配合其他证据才能升级到LP,减少了VUS被过度升级为LP的情况。

★ Q4:PP3(计算预测)的具体规则是什么?哪些工具算有效?

ClinGen 2023年PP3/BP4校准更新:推荐使用经过校准的综合预测工具,特别是BayesDel、REVEL(missense综合分)。REVEL>0.932→PP3 Strong,REVEL 0.644-0.931→PP3 Moderate/Supporting。CADD>25→PP3 Supporting。注意:多个预测工具预测同一方向不叠加(不能用5个预测工具得5个PP3),只能算1个PP3/BP4。

★ Q5:PVS1的应用条件是什么?所有无义突变都适用吗?

PVS1(无效变异致病)的三个前提条件:①基因的致病机制是LOF(功能丧失),而非功能获得(GOF,如FGFR3在软骨发育不全中是GOF,无义突变反而保护);②变异不位于最后外显子或距终止密码子<50bp(避免NMD逃逸,可能只影响部分蛋白);③基因没有大量良性LOF变异记录(提示LOF能被耐受)。分析时需查询gnomAD LOF constraints(pLI/LOEUF值评估基因对LOF的敏感性)。


速查表

证据代码强度含义常见应用
PVS1Very Strong无效变异(LOF基因)无义、移码、剪接
PS1Strong同氨基酸改变已知致病相同位置不同核苷酸改变
PS3Strong功能实验有害体外功能研究
PM2Supporting*人群极低频gnomAD未见或极低频
PP3Supporting计算预测有害REVEL/CADD/SIFT
BA1Stand Alone人群频率≥5%gnomAD AF≥5%
BS1Strong人群频率高于预期gnomAD AF≥1%

*注:PM2在2020年ClinGen SVI降为Supporting

分类组合示例结论
PVS1 + PS3Pathogenic
PVS1 + PM2Likely Pathogenic
PS3 + PP3×2Likely Pathogenic
PP3 aloneVUS
BA1Benign
BS1 + BP4Likely Benign