EVOScore-2 商用友好的致病性预测数据集

#coding

更新:错了兄弟们,AlphaMissense的V3版本已经从CC BY-NC-SA 协议转向 CC BY 4.0了,可以商用

在错义突变范畴,SOTA 是 AlphaMissense 没有错,也建议大家尽可能的去用 AlphaMissense。但对于需要合规商业化来说,AlphaMissense 是不可用的(CC BY-NC-SA 协议)。

因此,必须有一个替代方案:使用 ESM-2

注:虽然 ESM-3 模型已经发布,但其免费版严禁商用,且仅开源了小参数模型。相比之下,Meta 发布的 ESM-2 采用 MIT 协议,是目前唯一兼具高性能与商业合规性的蛋白质语言模型。

EVOScore-2 数据集采用MIT许可开源,意味着你可以不受限制的接入自己的商业流程中。

1. 基础资料

我本来已经想着用自行部署esm2_t33_650M_UR50D来对所有位点进行重新计算,但发现ntranoslab/vesm_scores已经使用了esm2_t36_3B_UR50D来完成了这个工作。

这样一来,结果的精度比我原本构想中的精度更高,也节省了大量的工作时间,感谢ntranoslab

对应的VESM_3B数据集是以MIT开源分发的,放心使用。

2. 生成标准 VCF

现在我们需要做的是把hg38_VESM_3B_scores.parquet.gzip转换成Vcf格式,这样即可直接对接到VEP流程中。

python -c "import pandas as pd; print(pd.read_parquet('hg38_VESM_3B_scores.parquet.gzip').head())"

通过查看parquet文件,可以明确包含的列是这样的

CHROM POS REF ALT gnome uniprot_id transcript_id protein_variant VESM (3B)
chr1 69094 G T hg38 Q8NH21 ENST00000335137.4 V2L -5.5739

这样明确我们可以完美的转换到Vcf格式中。

3. 验证与基准测试

拿到分数只是第一步。为了给临床提供可信的证据,我们需要建立严格的阈值标准,我们将采用 “小样本校准,大样本盲测” 的反向验证策略。我使用ClinVar的20260126版本进行验证。

3.1 清洗 ClinVar 数据

从 NCBI 下载最新的 ClinVar VCF,并进行严格过滤。

过滤标准(金标准):

  1. Variation Type: 仅保留 SNV (Single Nucleotide Variant)。
  2. Consequence: 仅保留 Missense (错义突变)。
  3. Review Status: 必须有星级 (CLNSIGCONF != null 或 星级 >= 1)。
  4. Clinical Significance:
  • Positive Set (致病): PathogenicLikely_pathogenic
  • Negative Set (良性): BenignLikely_benign
  • 剔除:Conflict, VUS, Drug response 等模糊数据。

清洗结果如下:

Input 4280453
Output 1263960
Pathogenic 69598
Likely_pathogenic 65563
Benign 173420
Likely_benign 955379

3.2 数据集切分—— 核心步骤

为了避免“既当裁判又当运动员”,不使用全量数据来寻找阈值。

我们采用分层抽样,将清洗后的 ClinVar 数据划分为两部分:

  • 校准集 (Calibration Set, 20%): 仅用于寻找最佳 Cutoff 值。
  • 验证集 (Benchmark Set, 80%): 作为“盲盒”,用于最终评估模型性能。
校准集 验证集
Pathogenic 3111 12051
Likely_pathogenic 5589 22748
Benign 5442 21654
Likely_benign 18467 73985

3.3 确定阈值

注意:本步骤仅在 20% 的校准集上进行。

我们将 ESM-2 分数与校准集的标签对齐,根据 ACMG 的证据强度需求确定 Cutoff:

  • PP3 (Supporting/Moderate) 阈值:

  • 寻找 Youden Index 最大点(敏感性与特异性的最佳平衡点)。

  • PP3_Strong (High Specificity) 阈值:

  • 锁定 Specificity > 95% 的分数值。

  • 逻辑: 只有当误报率低于 5% 时,我们才敢给出强致病证据。

使用校准集,我们获得了两个阈值

P_threshold -11.5678
B_threshold -8.4456

便于记忆,人为的将EVOScore < -11.6时,认为位点是Pathogenic;而当EVOScore > -8.5时,认为位点是Benign。

3.4 盲测与评估

本步骤在 80% 的验证集上进行。

将 3.3 中锁定的阈值,直接应用到这 80% 从未见过的数据上,计算最终指标。

  • 鲁棒性验证: 检查在验证集上,是否依然能维持 >90-95% 的特异性?如果能,说明阈值极其稳健。
  • 计算 AUC: 计算验证集的 ROC 曲线下面积。ESM-2 预期 AUC 应在 0.85 - 0.90 之间。
Predicted P 20377 PPV: 0.9547
Predicted B 92912 NPV: 0.9487
Ambiguous 17149 //

测试获得AUC: 0.9575。单从数值上看,当前阈值展示了优秀的B、P区分能力,存在约13%样本落入不确定区间的问题。从结果看,Ambiguous中存在的实际Pathogenic更多,成功区分出Pathogenic的比例是58.56%(20377/(12051+22748))。

当前的阈值下,EVOScore < -11.6时,我们预期有 95% 的概率是真致病;而当EVOScore > -8.5时,我们预期有 95% 的概率是真良性。而 -8.5 ≤ EVOScore ≤ -11.6的区间里,我们决定放弃预测这一部分,将其标记为 Ambiguous

4. 总结与应用

通过以上步骤,我们就在完全合规(MIT License)的前提下,拥有了一个性能逼近 AlphaMissense 的数据库 EVOScore-2。上述流程所有代码以MIT开源。

已转换好的结果,可以在huggingface获取。

在VEP中使用

作为custom注释即可

# 确保EVOScore VCF有索引
tabix -p vcf evoscore.vcf.gz

vep -i input.vcf \
      -o output_annotated.vcf \
      --cache \
      --dir_cache /path/to/vep_cache \
      --offline \
      --custom /path/to/evoscore.vcf.gz,EVOScore,exact,Float,EVOScore