证据等级与强度:非常强、强、中等、支持
证据等级和强度的概念,说白了就是给每条变异证据打分。
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)) # 输出:致病性
我个人验证时,会用这份权重表先做一次机械式打分,再人工复核。机器算分和人工判断的差异,往往是解读讨论中最有价值的地方。
验证实战:证据等级检查清单
在我自己的验证流程里,每一条使用的证据都要过这五关:
- 代码匹配:证据描述和代码定义是否对应?比如PVS1需要的无功能机制是否明确确认?
- 等级匹配:这个证据该用强还是中?我见过把PM1当PS1用的,一个等级差出去就是2分的差异。
- 独立性校验:两条证据是否源自同一份数据?如果一条变异同时用了“群体频率缺失”和“数据库未收录”,那只能算一条。
- 阈值检查:比如PP1的共分离到底算几代?不同指南给的LOD阈值不一样。
- 基因特殊规则:某些基因有专属的ACMG调整版,比如BRCA1/2、MYH7。
我起初犯过一个低级错误:把同一个家系三代7人的共分离数据拆成三条独立的PP1证据去叠加。实际上,ACMG规定一个家系只算一条。当时要是做一次独立校验,就不会出这种乌龙了。
可视化:证据强度叠加规则
下面这张图总结了从原始证据到最终判定的完整流程:
这张图展示了从原始证据代码到最终评定的完整流程。你想想看,如果中间任何一步的证据等级判断偏了,最后的判定结果就会完全跑偏。这也是为什么验证环节里,证据等级复核是优先级最高的任务。