证据等级与强度:非常强、强、中等、支持

证据等级和强度的概念,说白了就是给每条变异证据打分。

ACMG/AMP指南把致病性证据分成五个级别:非常强、强、中等、支持、致病性待定。良性那边也有对应的一套。我做解读时,最头疼的就是新人搞不清这些等级到底怎么用。今天咱们把这事儿彻底理清楚。

从“证据”到“判定”的换算逻辑

你手头有个变异,找到了几条证据。但证据不是直接相加的。ACMG规定了一套权重系统:

证据强度代码前缀致病性赋值良性赋值
非常强PVS1致病性 +8无对应
强PS1-PS4 / BS1-BS4致病性 +4良性 -4
中等PM1-PM6 / BM1-BM2致病性 +2良性 -2
支持PP1-PP5 / BP1-BP7致病性 +1良性 -1

最终如何判定?很简单:把致病性证据总分加起来,再减去良性证据总分。

总分 ≥ 10 → 致病性;6 ~ 9 → 可能致病性;2 ~ 5 → 意义不明确(VUS);−7 ~ −1 → 可能良性;≥ −8 → 良性。

我个人习惯:拿到变异后,先在表格里列所有可用的证据代码,再算总分。很多错误的解读,源头就是某条证据的等级用错了。

五个等级,逐个拆解

1. 非常强:PVS1

这是ACMG体系里最重的级别,只用在“无功能变异”上。

什么算无功能?无义突变、移码突变、经典的±1或2剪接位点突变、大片段缺失导致阅读框移位。但有个坑——必须在基因的功能丧失是已明确的致病机制时,PVS1才能用。我记得一个经典反例:CFTR基因的某些无功能变异反而关联轻度表型,直接用PVS1就会误判。

我之前在解读一份心肌病panel时,看到一个无义突变,顺手就上了PVS1。结果再次核对时发现,基因在心脏中主要依赖一种保留读框的剪接异构体——那个“无义”其实根本没影响到主要功能蛋白。白白浪费了一次判定机会。

2. 强:PS1 ~ PS4

强证据有四条,各有各的用法:

  • PS1:同样的氨基酸改变已被确认为致病性变异。说白了,查数据库发现同一个位点上的其他核苷酸变化也致病,那这个也能算强证据。
  • PS2:de novo变异,且父母关系确认无误。这个在儿科遗传病里太好用了。但要注意:必须通过家系验证排除亲缘关系错误。
  • PS3:功能研究证实该变异对基因功能有破坏作用。我不建议拿纯计算机预测结果来套PS3——那属于支持等级。
  • PS4:人群对照研究显示变异在患者中显著富集。这个在低频变异上特别强,但用得不好容易犯人群分层偏差。

3. 中等:PM1 ~ PM6

中等级别的使用频率很高,我接触到的80%以上的解读都会碰到。

  • PM1:变异位于已知功能结构域或突变热点区域。嗯,这里要注意做结构域边界的精确界定。
  • PM2:在正常人群中极度罕见或完全缺失。
  • PM3:致病性变异反式位置。这是常隐基因的好朋友,但前提是必须确认反式位置。
  • PM4:非重复区域内的框内缺失/插入导致蛋白长度改变。这招对胶原蛋白基因很管用。
  • PM5:另一个致病性变异发生在同一密码子上。
  • PM6:de novo变异但父母关系未经正式验证。比PS2弱一档。

我曾经遇到一个案例:某实验室把人群频率0.04%的变异直接套了PM2。但查看原始数据库后发现,该频率只来自一个孤立种群。真相是:那个“罕见”在特定人种里其实很常见——PM2不能用。频率的适用人群永远是第一关。

4. 支持:PP1 ~ PP5 / BP1 ~ BP7

支持等级的证据,单拎出来不够看,但是叠加起来非常关键。

  • PP1:家系共分离。注意,必须算LOD分。
  • PP3:多项计算预测软件支持有害效应。我建议大家只用≥2个独立算法的结果,别找一堆同质化工具来凑数。
  • BP1:错义变异发生在通常只有截断变异才致病的基因上。
  • BP4:多项计算预测支持良性效应(正好和PP3反着来)。
  • BP7:同义变异且不在经典剪接位点附近。这个其实很多人忘了用,白白浪费一个良性证据。

权重叠加的量化逻辑

ACMG推荐的是穷举法:把所有证据按等级拆开,不能合并同类项。

# Python示例:证据权重自动计算
evidence_scores = {
    "PVS1": 8,
    "PS1": 4, "PS2": 4, "PS3": 4, "PS4": 4,
    "PM1": 2, "PM2": 2, "PM3": 2, "PM4": 2, "PM5": 2, "PM6": 2,
    "PP1": 1, "PP3": 1, "PP4": 1, "PP5": 1,
    "BS1": -4, "BS2": -4, "BS3": -4, "BS4": -4,
    "BM1": -2, "BM2": -2,
    "BP1": -1, "BP4": -1, "BP6": -1, "BP7": -1
}

def classify_variant(evidence_codes):
    total = sum(evidence_scores.get(code, 0) for code in evidence_codes)
    if total >= 10: return "致病性"
    elif total >= 6: return "可能致病性"
    elif total <= -8: return "良性"
    elif total <= -7: return "可能良性"
    else: return "意义不明确"

# 示例:无义变异 + 家系共分离 + 人群频率缺失
codes = ["PVS1", "PP1_strong", "PM2"]
print(classify_variant(codes))  # 输出:致病性

我个人验证时,会用这份权重表先做一次机械式打分,再人工复核。机器算分和人工判断的差异,往往是解读讨论中最有价值的地方。

验证实战:证据等级检查清单

在我自己的验证流程里,每一条使用的证据都要过这五关:

  1. 代码匹配:证据描述和代码定义是否对应?比如PVS1需要的无功能机制是否明确确认?
  2. 等级匹配:这个证据该用强还是中?我见过把PM1当PS1用的,一个等级差出去就是2分的差异。
  3. 独立性校验:两条证据是否源自同一份数据?如果一条变异同时用了“群体频率缺失”和“数据库未收录”,那只能算一条。
  4. 阈值检查:比如PP1的共分离到底算几代?不同指南给的LOD阈值不一样。
  5. 基因特殊规则:某些基因有专属的ACMG调整版,比如BRCA1/2、MYH7。

我起初犯过一个低级错误:把同一个家系三代7人的共分离数据拆成三条独立的PP1证据去叠加。实际上,ACMG规定一个家系只算一条。当时要是做一次独立校验,就不会出这种乌龙了。

可视化:证据强度叠加规则

下面这张图总结了从原始证据到最终判定的完整流程:

证据强度叠加规则 PVS1 PS1 + PS4 PM2 + PM3 PP3 + BP4 PVS1 = 8 PS = 4 PM = 2 PP/BP = 1 总得分 = 8+4+2+1 = 15 致病性(Pathogenic) 阈值:≥10 → Pathogenic 6~9 → Likely Pathogenic

这张图展示了从原始证据代码到最终评定的完整流程。你想想看,如果中间任何一步的证据等级判断偏了,最后的判定结果就会完全跑偏。这也是为什么验证环节里,证据等级复核是优先级最高的任务。