第3章 单核苷酸多态性(SNP)原理

3.1 什么是SNP?——从「一个字母」的差异说起

SNP,全称 Single Nucleotide Polymorphism,中文叫单核苷酸多态性。说白了,就是基因组上单个碱基位点发生了替换,而且这种替换在人群中的频率超过 1%。

我刚开始接触这个概念时,总把 SNP 和「突变」搞混。后来才明白,突变一般指频率低于 1% 的罕见变异,而 SNP 是群体中稳定存在的多态性。你想想看,人类基因组有约 30 亿个碱基对,平均每 300-1000 个碱基就有一个 SNP 位点。整个基因组里,SNP 的数量超过 1500 万个。

一个典型的 SNP 长这样:

参考序列: 5'-ATGCGATCGTAGCTAGCTAG-3'
变异序列: 5'-ATGCGATCGTAGCTAGCTAG-3'
                             ^
                    第20位: G → A 替换

我在项目中遇到过一位合作者,非说 SNP 就是「突变」。我跟他解释:SNP 是群体遗传学的概念,突变是分子生物学的概念。同一个碱基替换,在家族中可能是新发突变,但在全球人群里可能就是 SNP。视角不同,叫法不同。

判断标准:等位基因频率 ≥ 1% 叫 SNP,< 1% 叫变异或罕见突变。这个阈值是约定俗成的,不是绝对的生物学边界。

3.2 SNP 的三种类型——同义、非同义、无义

根据碱基替换对编码蛋白质的影响,SNP 分成三类。这是做 SNP 功能预测的基础,也是你在文献里最常看到的分类方式。

下面这个表格把三类的核心差异一次性说清楚:

类型 定义 密码子变化 氨基酸变化 功能影响
同义 SNP 碱基替换后编码的氨基酸不变 密码子简并 无 通常无害,但可能影响 mRNA 剪接或调控
非同义 SNP 碱基替换导致氨基酸改变 密码子改变 有 可能改变蛋白质结构和功能
无义 SNP 碱基替换产生提前终止密码子 密码子 → 终止 有 蛋白质截短,功能通常丧失

同义 SNP——真的「无害」吗?

同义 SNP 又叫沉默 SNP。因为密码子简并性,碱基变了但氨基酸不变。很多教材说它「没有功能影响」,但实际没那么简单。

我曾经接手过一个项目,一个同义 SNP 被 GWAS 反复关联到疾病表型。团队里好几个人都说「肯定是标签 SNP,不是因果位点」。我没急着下结论,而是查了 ENCODE 数据,发现这个同义 SNP 恰好落在外显子剪接增强子(ESE)区域,改变了剪接调控蛋白的结合能力。最后实验证实,它确实导致了 mRNA 的错误剪接。

避坑指南:同义 SNP 不等于「无功能 SNP」。它可能通过影响 mRNA 剪接、稳定性、翻译效率发挥调控作用。不做功能验证就把它排除,是常见错误。

非同义 SNP——蛋白质的「一字之差」

非同义 SNP 导致氨基酸替换,也叫错义突变。一个氨基酸的改变,可能让蛋白质局部结构坍塌,也可能恰好不影响功能。关键在于替换的氨基酸性质差异有多大。

举个例子,rs6265 是一个研究得非常透彻的非同义 SNP:

基因: BDNF (脑源性神经营养因子)
参考等位基因: G (编码 Val)
变异等位基因: A (编码 Met)
氨基酸变化: Val66Met
功能影响: 改变 BDNF 蛋白分泌效率,与记忆、抑郁相关

Val 和 Met 的侧链性质差异不算大,但 66 位恰好位于 pro-domain 的关键区域,一个甲基的差别就改变了蛋白的运输和分泌。

无义 SNP——蛋白质的「句号提前」

无义 SNP 把编码氨基酸的密码子变成了终止密码子(TAA、TAG、TGA)。翻译到这个地方就提前终止了,产生一个截短的、通常没有功能的蛋白质。

我记得在分析一个罕见病家系数据时,发现一个无义 SNP 在 CFTR 基因的 exon 10 上产生了提前终止密码子。患者是杂合子,另一个等位基因也有缺陷,最终导致囊性纤维化表型。嗯,这里要注意:无义 SNP 通常致病性很强,但因为 NMD(无义介导的 mRNA 降解)机制的存在,部分无义 SNP 的实际效应会被抵消。

3.3 SNP 数据库——dbSNP 和 ClinVar

做 SNP 相关研究,离不开两个数据库:dbSNP 和 ClinVar。我平时的工作流里,dbSNP 用来查变异的基本信息和频率,ClinVar 用来查临床意义。

dbSNP——SNP 的「户籍系统」

dbSNP 由 NCBI 维护,是目前最全面的 SNPs 和其他小规模变异数据库。每个录入的 SNP 都有一个唯一标识符,叫 rs 号(Reference SNP ID)。

比如刚才提到的 rs6265:

dbSNP 查询示例 (REST API):
GET https://api.ncbi.nlm.nih.gov/variation/v0/rs/6265

响应摘要:
  - rs ID: 6265
  - 基因: BDNF
  - 染色体位置: chr11:27658369
  - 参考等位基因: G
  - 变异等位基因: A
  - 等位基因频率 (gnomAD): G=0.82, A=0.18

我以前做 GWAS 数据挖掘时,经常批量下载 dbSNP 的 VCF 文件,用命令行过滤候选位点。你想想看,几千万个 SNP 里找几十个感兴趣的,没有数据库的索引机制根本不可能。

ClinVar——SNP 的「临床档案」

ClinVar 也是一个 NCBI 数据库,但它专注于变异与临床表型的关系。每个变异会标注「致病」「可能致病」「良性」「意义不明确」等分类。

我习惯在分析流程里加入 ClinVar 注释:

ClinVar 查询示例 (通过 VEP 注释):
输入: rs6265
ClinVar 注释:
  - 临床意义: 可能良性 (Benign/Likely Benign)
  - 条件: 无明确致病关联
  - 提交者: 多个实验室
  - 证据等级: 一致评估

注意,同一个 SNP 在不同数据库里的「致病性」标注可能不同,因为 ClinVar 依赖临床提交,而 dbSNP 只是记录变异存在。我以前踩过这个坑:用 dbSNP 的 MAF 过滤「罕见变异」,结果忽略了 ClinVar 里标注致病的位点。后来我定了条规矩——功能预测用 dbSNP,临床解释用 ClinVar,两者不可互相替代。

实用技巧:用 bcftools annotate 或 VEP 可以同时把 dbSNP 的 rs 号和 ClinVar 的临床意义批量加到你的变异列表中,省去手动查询的麻烦。

3.4 全章知识图谱——SNP 分类与功能影响

下面这张图把本章的核心逻辑串起来了:从 SNP 的定义出发,按功能影响分成三类,每类对应不同的密码子变化和生物学后果。你对着图再看一遍表格,思路会更清。

SNP 分类与功能影响图谱 单核苷酸多态性 (SNP) 同义 SNP (氨基酸不变) 非同义 SNP (氨基酸替换) 无义 SNP (提前终止) 密码子简并性 → 氨基酸相同 氨基酸性质改变 → 功能可能改变 产生终止密码子 → 蛋白质截短失活 可能影响 mRNA 剪接 蛋白结构/功能改变 功能丧失 / 疾病 关键提醒:同义 SNP 不一定 "无害",无义 SNP 不一定 "完全失活"(NMD 机制可能代偿)

图里从 SNP 出发,分三条路径展示了同义、非同义、无义三类变异的逻辑链条。你顺着箭头走一遍,就能把「碱基替换 → 密码子变化 → 氨基酸/蛋白影响」这个因果链刻在脑子里。

最后说句实在的:SNP 原理听起来基础,但我在实际项目中见过太多人因为「觉得简单」而犯错。比如把同义 SNP 直接扔出分析,或者看到罕见的同义 SNP 就以为是实验错误。这些坑,你自己动手做一遍 SNP 注释、跑一遍功能预测 pipeline,才能真正长记性。