第3章:变异解读结果的数据结构——你得先看懂“图纸”

做批次间校验,说白了就是拿两份数据做对比。但有个前提:你得知道对比的是什么玩意儿。

我刚开始接手这个任务时,以为校验就是简单的“A表等于B表”。结果发现,变异解读结果的数据结构远比想象中复杂。你想想看,一个变异位点,从原始测序信号到最终ACMG分类,中间经过了数十个环节,每个环节都可能产生新字段。

这一章,我把变异解读结果的数据结构拆开揉碎了讲。你看懂了这张“图纸”,后面的校验操作才不会跑偏。

3.1 核心数据对象:变异位点是唯一的“主键”

不管数据存在Excel里、数据库里还是JSON文件里,最核心的那个实体永远是变异位点。就像人必须有身份证号一样,每个变异位点需要一组唯一标识符才能精确锁定。

标识字段 说明 示例值
CHROM 染色体号 chr17
POS 起始位置(GRCh37/38) 7675994
REF 参考等位基因 G
ALT 变异等位基因 A
HGVS.c cDNA水平命名 NM_007294.4:c.68C>T
HGVS.p 蛋白质水平命名 NP_009225.1:p.Pro23Leu
我的习惯:做校验前,先用“CHROM + POS + REF + ALT”做一次精确匹配。如果这批数据里同一个位点有两个不同解读,那不管结果对不对,结构上已经出了问题。

3.2 解读结果的分层结构:从原始信号到临床意义

变异解读结果不是平铺直叙的一张大宽表。我见过很多新手面对几百个字段的Excel表时直接懵圈。其实,它天然分为三个层次:

  1. 变异基本信息层:记录位点的坐标、基因、转录本、人群频率等不可变属性。
  2. 证据层:PVS1、PS1、PM2、PP3……这些ACMG规则对应的证据是否被触发,以及证据的置信水平。
  3. 综合判定层:最终的ACMG分类(致病/可能致病/意义不明/可能良性/良性)、评级描述、备注信息。

为什么一定要理解这个分层?

因为批次间的差异来源往往有规律:

  • 基本信息层差异:可能是基因组版本不一致(GRCh37 vs GRCh38),或者转录本选择不同。
  • 证据层差异:常见于数据库版本更新(比如gnomAD v2.1 vs v4.0频率变了),或者管线升级导致证据判定的逻辑改变。
  • 综合判定层差异:最敏感,可能是人工审核时专家判断不同,也可能是证据组合规则有变动。

我曾经遇到过这样一个案例:两个批次里同一个变异的ACMG分类从“VUS”变成了“Likely Pathogenic”。追溯下去,发现是证据PM2_Supporting被升级为PM2_Moderate,根本原因是一个新发表的人群数据库把该变异从“未收录”改成了“低频”。这就是典型证据层变化导致的分类变化。

3.3 数据结构示意图:一张图看懂三者关系

下面这张图,我建议你存一下。每次做校验前扫一眼,能帮你快速定位问题出在哪一层。

变异解读结果的三层数据结构 第1层:变异基本信息域 染色体 | 位置 | 参考碱基 | 变异碱基 | 基因符号 HGVS命名 | 转录本号 | 人群频率来源 | 基因组版本 第2层:ACMG证据域 PVS1(LoF证据)| PS1(错义相同)| PS2(新发) PM2(人群频率)| PP3(功能预测) 每个证据项:触发状态 + 置信等级 + 证据来源 第3层:综合判定域 ACMG分类(5类)| 评级描述 | 审核状态 报告备注 | 审核者 | 审核日期 校验时需逐个层次比对,跨越两层的变化需要重点审查证据来源

重要提醒:做校验时不要直接跳到最后一行看分类是否一致。你应该逐层核对——如果基本信息层对不上(比如转录本不同),那后面的证据层和判定层根本没有可比性。先修复基本信息层的差异,再往下走。

3.4 数据存储格式:你总会遇到至少一种

实际工作中,变异解读结果的数据格式五花八门。我总结了一下,最常见的是这三种:

  • VCF + INFO/ANN 注释列:最原始,ACMG证据以“PVS1=1;PM2=0;”这种形式塞在INFO里。
  • Excel/CSV 宽表:每个变异一行,几百列字段摊开。好处是直观,坏处是列数一多容易看花眼。
  • JSON/API 响应:从解读平台导出的结构化数据,层级清晰,适合程序化校验。

下面是一个简化的JSON结构示例,你感受一下:

{
  "variant": {
    "chr": "17",
    "pos": 7675994,
    "ref": "G",
    "alt": "A",
    "hgvs_c": "NM_007294.4:c.68C>T",
    "gene": "BRCA1"
  },
  "evidence": {
    "PVS1": {"status": "not_triggered", "level": "NA"},
    "PS1": {"status": "triggered", "level": "strong"},
    "PM2": {"status": "triggered", "level": "supporting"},
    "PP3": {"status": "triggered", "level": "supporting"}
  },
  "classification": {
    "acmg_5tier": "Pathogenic",
    "rating": "Class 5",
    "review_status": "approved",
    "reviewer": "Dr.Li",
    "date": "2024-06-15"
  }
}
踩坑实录:我曾经处理过一批数据,看起来是JSON格式,但里边的键名不统一——有的批次用"evidence",有的用"acmg_evidence",还有的混用了"classification"和"acmg_class"。做校验前,先做一次字段映射和标准化,能省掉后面80%的麻烦。

3.5 元数据:批次间校验离不开的“附加信息”

除了变异本身的解读数据,每一批解读结果还需要附带元数据。这些数据不直接参与ACMG判分,但决定了你能否正确理解差异产生的原因。

常见的元数据字段包括:

  • 解读管线版本:v1.0还是v2.3?管线升级可能带来算法变化。
  • 参考基因组版本:GRCh37 vs GRCh38,直接影响坐标。
  • 人群数据库版本:gnomAD v2.1.1 vs v4.0,频率差异巨大。
  • 解读日期:判断数据时效性。
  • 解读软件/平台:不同平台对同一规则的实现可能不同。

我建议你在设计校验流程时,先把元数据单独拿出来做一个“批次档案”,跟解读数据放在一起。这样一旦发现异常,能快速定位是管线问题还是数据版本问题。

3.6 小结:数据结构是校验的“地基”

理解变异解读结果的数据结构,就像是盖房子之前的勘查地形。你不搞清楚哪里是承重墙、哪里是管线井,后面的校验工作就只能是盲人摸象。

记住三个关键词:变异主键、三层结构、元数据。把这三点刻在脑子里,接下来的章节我们才能真正进入“校验”的实操环节——如何把两个批次的解读数据拉到一张表里做逐字段比对。