在生信或遗传流行病学这个圈子里,你可能经常看到一张图:横坐标按染色体排开,纵坐标是-log10(P),图上稀稀拉拉耸起几根“摩天楼”,像极了城市夜景的天际线。这张图叫曼哈顿图,背后对应的研究设计就是全基因组关联研究(Genome-Wide Association Study,GWAS)。很多人第一次接触GWAS,是被那张图吸引过来的,但真正把原理和统计方法弄懂、再顺手把GWAS Catalog的数据用起来,中间还有一段不小的距离。
这篇文章我想分享的是我自己从“只会跑plink命令”到“能独立解读一个GWAS结果并用公共数据库反查证据”的完整理解路径。不堆公式推导,重点放在每个环节“为什么这样做”,以及实际数据分析里那些容易踩但不常被写进教程的细节。
1. 一条信号背后的大逻辑:GWAS为什么能“找”到基因
1.1 你的样本里藏着的两种变异
GWAS的起点是群体里天然存在的遗传变异。每个个体身上最常见的变异叫单核苷酸多态性(SNP),也就是基因组某个位置上的单个碱基,人群中一部分人是A、一部分人是G。这类变异数量极其庞大,人类基因组里已知的SNP有数千万个。
但GWAS并不真的去测这数千万个位点。大多数研究用的是基因分型芯片(Genotyping Array),一块芯片上通常只覆盖几十万到上百万个SNP。芯片把常见的、在人群中频率较高的变异铺在“网格”上,靠这些哨兵似的位点去捕捉遗传信号。这里有个反直觉的点:芯片没有覆盖到的变异,GWAS也能报出关联信号,原因就藏在下一节要讲的连锁不平衡里。
1.2 连锁不平衡:GWAS不直接测序也能定位的原因
连锁不平衡(Linkage Disequilibrium,LD)是GWAS的物理基础。它描述的是两个不同位点上的等位基因在人群里“不独立出现”的程度。打个比方,如果A位点上某个等位基因一旦出现,B位点上另一个等位基因几乎必然跟着出现,这两个位点就处于强LD中。
这种现象的本质是重组的历史。基因组在传代过程中不断被重组事件打断,但距离近的位点被打散的概率低,于是它们在人群里倾向于作为一个整体被遗传下来,这种被整体遗传的片段称为单倍型。GWAS利用的正是这一点:如果某个致病位点本身没有直接被芯片检测到,但芯片上有个和它处于强LD的“代理SNP”(Tag SNP)被检出了,那么这个代理SNP的关联信号也会显著。
这也是为什么GWAS结果里的“显著位点”并不能直接等同于“致病位点”。报告中报的往往是那个P值最低的lead SNP,真正的因果变异可能就在旁边的LD区块内,只是没有被直接测到。把这个逻辑讲清楚,后面看GWAS Catalog时就不会被“index variant”这个词误导。
1.3 从SNP到因果位点:关联不等于因果
GWAS本质上是在做相关性检验,不是因果推断。一个SNP与一个性状显著关联,原因可能有几种:这个SNP本身影响基因功能;或者它只是和真正因果变异处于LD中;还有一种情况是它本身没有生物学效应,但通过连锁关系“沾了光”。
要区分这几种情况,后面通常会做两件事:一是精细定位(Fine Mapping),把区间内所有位点都测一遍,结合LD结构和功能注释缩小可疑因果变异范围;二是功能验证,比如表达数量性状位点分析(eQTL),看这个SNP是否影响某个基因的表达水平。GWAS Catalog里提供的大量已报道关联,之所以能被当成后续研究的“线索”,前提就是我们清楚它记录的是统计关联,不是经过功能实验证实的因果关系。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 统计流水线:从基因分型矩阵到显著位点的完整路径
2.1 数据进门前先做减法:硬QC与样本QC
拿到一套基因分型原始数据,第一件事不是跑关联分析,而是做质量控制在真实项目里,这一步用的时间往往比跑关联本身多得多。
质量控制的重点是两个层面。第一个是SNP层面:看每个位点的分型检出率(call rate)、次等位基因频率(Minor Allele Frequency,MAF)、哈迪温伯格平衡检验P值。具体阈值得看样本量和人群构成,但经验值一般是:
| 质控项 | 常用阈值 | 目的 |
|---|---|---|
| SNP检出率 | > 95%或98% | 剔除分型失败的位点 |
| 样本检出率 | > 95%或98% | 剔除整体质量差的样本 |
| MAF | > 1%或5% | 过滤低频变异,避免统计功效不足 |
| HWE P值 | > 1e-6(病例对照中) | 识别基因分型错误 |
| 性别检查 | X染色体杂合率 | 核对样本性别与记录是否一致 |
| 杂合度 | 均值±3SD | 识别样本污染或近亲关系 |
第二个层面是样本层面的QC。其中最容易忽略的是样本之间的亲缘关系——如果样本队列里有隐藏的兄弟姐妹关系,关联检验的独立性假设会被破坏,P值会系统性偏小。一般来说,用基于LD-pruned SNP计算的IBD(血缘同源)矩阵,删掉PI_HAT > 0.2的个体,可以规避这个问题。
这里还在做一件事:把LD区域先挑出来用于后续的PCA/主成分分析。因为全基因组上那些LD区域如果不去除,会扭曲人群分层分析,后面讲QQ图时会看到它怎么影响结果。
2.2 核心关联模型:加性模型与回归检验
做完QC之后,每个样本在每个位点上就有了一个基因型,通常编码成0、1、2形式,对应风险等位基因的拷贝数。这是GWAS里最常用的**加性模型(Additive Model)**假设——每个风险等位基因对表型的贡献是累加的。
具体检验统计上,连续型表型(如身高、BMI)通常用线性回归,基因型编码作为自变量,对效应量进行估计,对应的系数就表示每个等位基因拷贝数带来的表型变化量;二元表型(如患病与否)则用逻辑回归,系数会转换成优势比(Odds Ratio,即OR值)。
回归模型里几乎永远会加入协变量,最常见的是前几个主成分(PC)和性别,有时候还包括年龄、批效应等。PC的加入是为了校正人群分层带来的混杂。
近几年大样本GWAS的标配是混合线性模型(Linear Mixed Model,LMM),代表工具包括BOLT-LMM、SAIGE、REGENIE等。它的优点是能同时校正亲缘关系和人群结构,避免“杀敌一千自损八百”的PC清理把真实信号也去掉。理解这一层就够了:GWAS的统计检验本质上是在回答“控制其他变量之后,这个位点的等位基因剂量是否还与表型有关”。
2.3 5e-8这个阈值的来历与多重检验校正
每个SNP都在做一次检验,全基因组上有效的独立检验次数远小于芯片上SNP的总数,但依然是百万量级。如果沿用0.05的显著性阈值,大量假阳性会混入结果。
GWAS普遍采用的全基因组显著性阈值是 P < 5e-8。这个数字不是拍脑袋定的,它是基于Bonferroni校正的粗算结果:有效独立SNP数量大约100万,0.05除以100万就是5e-8。虽然学界对“有效检验次数”到底是多少有争论,不同面板和人群结构算出的结果也有差异,但这个阈值早已成为默认语言,写论文、查数据库、看GWAS Catalog时,默认就是它。
一个常见的困惑是:如果做的是eQTL或mQTL分析,分析的是全基因组与成千上万个分子特征的关系,有效检验数远不止100万,这时往往要用更严格的阈值(比如5e-8除以特征数量),或者用排列检验/置换法。用统一的5e-8去套一切关联分析,是初学者最容易犯的错。
2.4 基因型填充:偷偷扩大可分析范围的隐形步骤
统计流水线里还有一步在数据准备阶段经常被提到,但很多人不理解它为什么重要:基因型填充(Imputation)。芯片的位点覆盖有限,但通过参考面板(比如TOPMed、HRC、1000 Genomes)上已知的单倍型信息,可以把芯片上没有直接测到的位点“猜”出来,补充为全基因组层面的估计基因型。
填充的可行性依赖的还是LD信息:一段被共享的单倍型上,参考面板里携带某些等位基因的个体,往往也携带其他位点的特定等位基因,那么被研究样本就可以依据这个模式推断出缺失位点的最可能基因型。填充质量的评价指标是INFO分数或R2,一般建议过滤掉INFO < 0.3或0.8以下的位点,具体阈值取决于研究目的和样本量。
填充能显著提高信号分辨率,尤其是在不同研究合并元分析时,大家基因分型芯片不同、位点集不同,不填充根本对不齐。只要你准备把多个队列的数据合并分析,填充这一步几乎不可避免。
3. 三张图判读GWAS结果:曼哈顿图、QQ图、区域关联图
3.1 曼哈顿图:先看最高的“楼”,再看楼下的“街区”
GWAS结果最直观的输出是曼哈顿图:横坐标是染色体位置,纵坐标是-log10(P),高于红线(通常画在5e-8对应的阈值)的点就是候选显著位点。
解读曼哈顿图有个经验:不要只看单个孤零零的点,要看“一条街上连续窜出来的多个点”。一个真正的关联信号,因为LD的存在,往往表现为同一区域内成片SNP都达到一定显著水平,峰的形状越“胖”,说明LD区块越大。反过来,如果某条染色体上只有一个位点显著,但它周围一圈邻居的P值在0.001附近,这种情况也要警惕,可能只是单个SNP的分型质量问题。
另外一个细节是横轴的染色体排布方式会影响人眼对信号强弱的判断。同一效应量的信号,在LD比较小的人群(如非洲祖源人群)里峰会更收窄,在LD较大的人群里峰势更宽。别仅凭峰的形状就判断“有没有信号”。
3.2 QQ图:一眼看出人群分层与统计功效
QQ图在GWAS结果审阅里的地位不亚于曼哈顿图,但很多新手只关注曼哈顿图,很少认真看QQ图。
QQ图的横轴是理论均匀分布的期望P值(-log10转换),纵轴是实际观测的P值。如果结果正常,绝大多数点应该沿着对角线分布,只有最右上角的一小撮点会偏离对角线向上翘,对应真正的关联信号。
如果整条线的起始点就整体高于对角线,即“一开始就飘了”,通常说明存在人群分层或样本亲缘关系等系统混杂。这时候无论曼哈顿图上多漂亮,结果都不可信。另一个常见情况是,大部分点都贴着对角线走,但中间偏右的部分有一个“台阶式”的抬升,这种情况多与基因分型批次效应、芯片探针设计的GC倾向有关。
还可以通过基因组膨胀因子 Lambda GC量化离差,它是中位数卡方值与期望中位数的比值,一般小于1.05算可以接受。如果Lambda GC超过1.1而你做的又是大样本分析,就要回头查QC了。
QQ图还有一个不那么明显的用途:判断统计功效。如果样本量不足或表型遗传度较低,真实信号可能完全被淹没在对角线里,全图几乎看不出“上翘”。这时候结果并不等于“没有关联”,而更可能是功效不够,论文里讨论时要注意措辞。
3.3 区域关联图:把信号收窄到具体基因
曼哈顿图告诉你“信号在哪条染色体上”,区域关联图(LocusZoom这类工具画的)告诉你在几十万碱基范围内,哪些SNP真正形成共关联信号、LD结构如何排列、有没有已知基因落在区间内。
使用LocusZoom时,通常要选一个参考人群的LD面板(如1000 Genomes的EUR、EAS等),把lead SNP周围500kb到1Mb范围内的SNP画出来,点按与lead SNP的r2着色:红色表示r2接近1,蓝色依次递减。如果颜色红成一片,说明这一整块区域是同一个信号;如果出现不同颜色的簇,就要怀疑该区域是否有多个独立关联信号,需要做条件分析(Conditional Analysis)进一步区分。
区域关联图还提供了第一个“功能解释”线索。图上基因位置的信息能直接帮助判断信号落在基因启动子、增强子还是外显子区域,后续设计功能实验时有了靶点。
4. GWAS Catalog实战:查询、下载与二次分析
4.1 Catalog里到底存了什么
GWAS Catalog由欧洲生物信息学研究所(EBI)维护,是GWAS领域最权威的文献关联数据仓库。它做的事情是:从已发表的GWAS文献里人工提取出“达到显著性阈值、经过质控的SNP-性状/疾病关联条目”,并整理成结构化数据。
一个Catalog条目通常包含的信息有:文献出处、关联的SNP(rs号)、风险等位基因/效应等位基因、检测到的关联P值、效应量(beta或OR)、关联的疾病或性状名称(标准化的EFO医学本体)以及群体样本信息。注意Catalog的定位是“已报道关联的数据库”,不是存放完整summary statistics的地方。后面的完整效应规模数据需要另外去GWAS Central或原文的补充材料找。
4.2 按表型、按rs号、按基因:三种最常见的查法
在浏览器打开GWAS Catalog首页,最常见的有三类查询:
第一类是按疾病或性状查。比如输入“type 2 diabetes”,页面会返回该疾病所有已收录的关联位点,并支持按P值、出版年份、地区等条件过滤。关键技巧是用EFO ID而不是自由文本做查询,比如2型糖尿病的EFO ID是EFO_0001360,这样就不会漏掉不同写法导致的不完全命中。
第二类是按SNP查。直接输入rs号(比如rs7903146),页面会展示这个SNP在所有收录文献里与哪些性状存在关联,以及在哪些人群中检测到。这是做遗传咨询解读或候选位点验证时最常用的动作。
第三类是按基因查。输入基因名,Catalog会列出落在该基因附近或与基因邻近区域相关的所有关联条目。做功能注释时,用基因的物理位置来拉取周边位点,比用基因名做字符串匹配准确得多。
4.3 批量下载与REST API的使用
交互式查询适合探索,但一旦要做系统分析,就必须用批量下载。
Catalog官网的“Downloads”页面提供多个结构化文件,其中最常用的是gwas-catalog-associations_ontology-annotated.tsv,每一行是一条已报道关联,带EFO注释。这个文件可以直接用R或Python读取,作为“已知位点清单”与自己的结果做对比。还有gwas-catalog-v1.0.2.parquet这种按版本存储的完整快照,适合需要复现他人分析、保证数据版本一致性的场景。
编程检索则推荐REST API。比如想要获取所有与某个EFO术语关联的SNP,可以请求如下接口:
bash复制curl "https://www.ebi.ac.uk/gwas/rest/api/efoTraits/EFO_0001360/associations"
如果只想要前十个结果,加上分页参数:?size=10。API的返回格式是JSON,里面有snp、pvalue、beta或or等字段,解析后可以直接进下游分析管线。刚上手时最省事的路径是:先用网页交互查询确认表型ID,再用REST API批量拉数据,最后落到本地做数据帧操作。
4.4 Catalog在MR和PRS里的应用思路
GWAS Catalog最常见的高阶用途有两个。
第一个是**孟德尔随机化(Mendelian Randomization,MR)**时的工具变量来源。MR要用遗传变异作为工具变量来推断暴露与结局之间的因果关系,而工具变量必须满足三个核心假设,其中“相关性假设”要求变异与暴露强关联。Catalog里记录的位点因为已有显著P值和效应量,经常被选作候选工具变量。
第二个是**多基因风险评分(Polygenic Risk Score,PRS)**的已知位点复现。如果手里有自己的关联结果,先和Catalog里的已有报道做一致性对比,是一种很实用的质量核查方式:真实关联往往在方向一致的前提下效应量相近;如果方向相反,大概率是等位基因编码错了方向。
5. 实战侧记:那些教程里不会细说的坑
5.1 版本与EFO:数据接口的两件小事
GWAS Catalog是定期更新的,每次更新后关联条目数量都会增加。做分析时如果不记录你下载数据的具体版本号,将来审稿人要求重算时,结果可能对不齐。我自己现在的做法是:任何用到Catalog数据的地方,都在脚本注释里写清楚下载日期和版本号,必要时把下载的tsv文件连同分析数据一起归档。
EFO这个词也需要多说两句。EFO是一种疾病/性状的标准化本体,它把“breast cancer”“breast carcinoma”“breast neoplasm”这类同义词归到同一个ID下。Catalog里绝大多数条目都做了EFO注释,但不是所有历史条目都有,而且同一个EFO ID下可能既有肿瘤也有良性增生,使用时要结合entry的具体描述,不能只凭EFO_ID做精细筛选。
5.2 LD与多信号区:别把“同一条街”当“两栋楼”
从Catalog批量拉下来一个区域内所有显著SNP时,很容易把它们当成各自独立的信号。实际上,同一个基因座内的大量SNP往往处于高LD状态,它们背后的本质是同一个因果变异。
区分独立信号最直接的方法是用LD clumping(比如PLINK的--clump)或条件分析。简单说,就是看一个lead SNP周围r2较高的区域里,其他SNP的显著P值能否归因于它。Catalog在呈现关联条目时会标注每个条目的INDEPENDENT字段,区分同一篇文献里的位点是否相互独立。实际操作中,如果两个SNP的r2大于0.8,把它们视为同一个信号去做后续的fine mapping通常不会错。
5.3 跨人群的“可迁移性”问题
GWAS的关联信号存在很强的人群特异性。一个在欧洲人群里显著的位点,在东亚人群里可能完全不显著,原因可能是等位基因频率差异、LD结构差异,甚至是效应异质性。Catalog里专门有MAPPED_TRAIT_URI和背景群体(如EUR、EAS)字段,这提醒我们:引用Catalog结果做自己的研究判断时,要尽量匹配自己样本的祖源背景。
跨人群复现阶段如果信号消失,有三种解释:一是原信号的lead SNP在该人群中频率太低甚至消失,需找代理SNP;二是因果变异的LD模式在不同人群中不同,需要重新做区域关联图确认;三是效应本身真的不跨人群。写论文时讨论这部分要谨慎,最好是先展示自己人群里的区域关联图,再解释与Catalog已有条目的关系,而不是简单一句“未复现”。
5.4 阴性结果也是结果:报告与解释的边界
最后一个想强调的坑是关于阴性结果的处理。一个GWAS做完,曼哈顿图上一条红线都没碰到,这并不代表“这个性状没有遗传基础”。更可能是样本量不足、表型测量误差大、或位点效应小于检测阈值。如果没有做统计功效估计,直接下“没有关联”的结论,审稿人基本会拒稿。
统计功效里涉及三个变量:样本量、等位基因效应量、显著性阈值。粗略估算是,检测一个OR为1.2的常见变异,需要上万甚至几万样本。如果手头只有几百个样本,不如早点降低预期,把结果定位为“探索性分析”,并在论文里用功效曲线说明阴性结果的可信度边界。
我个人现在做GWAS分析,拿到summary statistics后,第一件事往往不是看曼哈顿图,而是先跑一遍QC指标、看QQ图、算Lambda GC。只有这些基础指标都正常了,才会去看信号图,再拿GWAS Catalog去对照已知位点。这套顺序救了我好几次——有一次异常漂亮的曼哈顿图,最后发现是样本标签全乱了。GWAS的分析不是一锤子买卖,里面的每一步其实都是在为“可被解释、可被复现”这四个字服务。把这套流程理清楚之后,你会发现GWAS Catalog不只是查数据用的字典,它更像是所有GWAS结果共同参与编写的“社区联名笔记”,关键是你要知道如何正确地读它、引用它、并用它来验证自己的判断。
