做过临床科研的人大概都有同一个体会:收数据是最大的瓶颈。单中心几百例,随访不齐,基因检测贵到飞起,想发一篇像样的遗传流行病学文章难如登天。所以当我第一次接触英国生物银行(UK Biobank)时,第一反应是:这哪是数据库,简直是一座随时可以开采的矿。UK Biobank是一个超大规模前瞻性队列数据库,招募了约50万名40—69岁英国居民,从他们身上采集了基因型、血液生化、尿液、体格测量、生活方式问卷、认知测试、住院与死亡登记,以及数十万人的脑、心、腹部影像数据。对临床人来说,只要你有合理的科学问题、能通过规范化申请,就能在这套数据上做遗传关联分析、孟德尔随机化、多基因风险评分乃至影像表型研究。这篇内容,就写给所有打算把UKB作为自己第一篇数据挖掘论文素材的临床医生和研究生,从数据怎么拿、表型怎么定义、分析怎么做,到常见的坑怎么绕,一条线讲清楚。
1. 一条数据洪流:UK Biobank到底存了什么
1.1 50万人的大样本是怎么攒出来的
UK Biobank的核心是“规模”。2006年至2010年,研究团队在英国苏格兰、英格兰、威尔士的22个评估中心招募了50万余名中老年人,基线年龄多在40—69岁之间。每个入组个体都经历了长达数小时的基线评估,包括问卷调查、体格测量、血压与肺功能测试、静脉血和尿液采集。这个设计决定了它在流行病学上的一句话特点:它是一个能同时支持“暴露在前、结局在后”的前瞻性研究设计的数据库,不是一堆横断面数据的简单堆叠。
光有基线还不够。UK Biobank对这批人进行了持续追踪,通过住院记录、死亡登记、癌症登记、初级保健记录等途径不断回补新发疾病信息。这意味着你可以用基线测量(比如血脂、血压、生活方式)去预测未来若干年内某个事件的发生风险,这种“时间先后关系”是普通电子病历数据库给不了的。
1.2 数据仓库里的具体货架
把UKB想象成一个巨大的数据仓库,里面不同的货架放着不同类型的数据。我习惯把它分成几个大类,方便头脑里有个地图:
| 数据类别 | 主要内容 | 大致覆盖情况 |
|---|---|---|
| 基因型数据 | 基因分型芯片数据、imputation后遗传位点、线粒体DNA | 全队列50万人完成芯片分型 |
| 全外显子/全基因组测序 | WES、WGS、变异注释 | 分批发布,覆盖面持续扩大 |
| 健康记录 | 住院主诊断与手术操作码(ICD-10、OPCS-4)、死亡原因、癌症登记 | 全队列持续随访 |
| 基线问卷 | 吸烟、饮酒、饮食、睡眠、职业暴露、家庭收入、教育程度 | 绝大多数参与者 |
| 体格与功能 | 血压、心率、身高体重、腰臀比、肺功能、握力、骨密度、认知测试 | 大多数参与者 |
| 血液与尿液 | 血脂、血糖、糖化血红蛋白、炎症标志物、肾功能指标等 | 基线全覆盖,部分人有重复测量 |
| 影像数据 | 脑MRI、心脏MRI、腹部MRI、DXA全身骨密度 | 影像亚队列,设计目标10万人 |
| 衍生数据 | 遗传主成分(PCs)、样本批次、亲缘关系矩阵、影像衍生表型(IDP) | 按批次提供 |
关键点在于:UKB的原始数据不是一个统一文件夹,而是按场次和文件分散存储的。和你平时操作Oracle、MySQL这类关系的数据库一样,你需要通过“字段编号+样本编号”的键值把不同表关联起来。UKB的字段(Field)有固定编号,比如Field 31是性别,Field 21003是年龄,Field 41270是住院ICD-10诊断代码。很多人刚上手时被几千个Field编号砸晕,这很正常——把它当成一张巨大的宽表来管理就行了,外键就是那个每个人的唯一编号(eid)。
1.3 为什么临床人会绕不开它
临床人的痛点是:样本量不够、随访时间短、对照不好找、蛋白和影像数据太贵。UKB一次性把这些问题都摊平了。
如果你做传统临床队列,光靠自己的病例收集十年也很难凑到5000例有心梗事件的数据,但在UKB里,这只需要一条SQL查询加上合理的表型定义。如果你做药物靶点方向,UKB的基因型数据加上血浆蛋白组、代谢组数据,可以让你完成从“遗传变异—中间表型—临床结局”的整条因果链条分析。如果你做影像研究,UKB提供的脑区体积、白质纤维束结构等衍生指标,已经过了大量QC,可以直接关联到认知、精神疾病和心血管风险。
更关键的是,UKB允许你合法地在“个体水平”上做分析,而不是像很多公开数据库只给汇总统计量。这意味着你可以自己定义暴露、自己定义结局、自己调整协变量,自由度极高。这一点同时带来了风险:如果没有数据库基本功,很容易在字段筛选和数据清洗上翻车,后面的分析全白做。
2. 拿钥匙的艰难与正确姿势:申请与数据访问
2.1 申请窗口里的硬性门槛
UKB不是一个下载即用且适合所有人的免费资源。它的准入机制本质上是科研项目评审,不是注册后随便抓数据。首次申请需要主申请人(Principal Investigator,PI)具备研究机构任职资质,通常要求是高校、医院、研究所的员工或长聘教职人员。如果你是硕士生或博士生,一般需要挂靠导师或科室主任作为PI,自己作为协作者进入系统。
申请需要提交一份研究方案(Research Plan),核心是讲清楚三件事:
- 你要回答什么科学问题
- 你需要哪些数据字段
- 你的统计分析和伦理考量是什么
很多临床人的误区是“我想先看看数据再说”。这在UKB行不通。你必须在申请时明确列出需要的Field编号,所以动手申请前先花一周时间泡在UKB Showcase里熟悉字段,非常值得。另外,方案里最好带上一点初步统计计划,哪怕只是简单的“先做Logistic回归,再做有向无环图调节中介分析”,也能显著提高通过率。
审批周期通常从几周到半年不等。有些临床人以为提交后马上就能用,结果耽误了论文投稿窗口。我的建议是:在写标书阶段就提交申请,等标书中的方案敲定,UKB数据也正好批下来。
2.2 拿到数据有几种姿势
我说“拿到数据”其实是个泛称,因为UKB提供好几条访问路径,选错了路径会让人多走很多弯路。
第一种是传统下载方式。你在申请获批后从AMS系统(Access Management System)里勾选需要用到的字段集和数据版本,打包下载。优点是可以把数据拉到本地,用习惯的软件Roll;缺点是很多组学数据体积惊人,全外显子的VCF文件几百GB到几TB都有可能,机箱里没有足够硬盘还能忍,网络传输断了才是最让人崩溃的。
第二种是UKB Research Analysis Platform(RAP,基于DNAnexus搭建的云平台)。我强烈建议临床人优先用这种方式。RAP把原始数据托管在云端,分析环境预制了JupyterLab、RStudio、Spark SQL等常用工具,不需要下载数百GB文件,直接在云端写代码、跑回归。用RAP还有一个额外好处:计算资源和数据在同一机房,很多耗时的“数据搬运”环节被直接抹掉。它的费用模式是按计算量计费,但UKB会给获批研究者一定的免费计算额度,绝大多数初筛分析用不了太多钱。
此外还有UKB Showcase,它是数据字典,负责回答“这个字段到底存的什么、单位是什么、分几期测量”。我见过太多人把Showcase当成下载入口,以为在那里点Download就能拿到数据,结果绕了一大圈。
2.3 数据库版本与同步问题
热词列表里有一堆关于数据库同步工具、数据库管理工具的搜索记录。放在UKB的语境里,你得养成一个习惯:跟踪数据版本。
UKB不是静态的,它会随着测序完成、影像扫描进度和新随访数据更新而定期发布新版本。同是一个Field,隔几个月可能有增补记录或修正值。你写方法学时必须写清楚用的是哪个版本(如2024年某月发布的外显子数据),否则别人复现不了你的结果。
我个人的习惯是建一个专门的版本记录表,把每次下载的数据集名称、文件日期、字段版本、下载时间都登记进去。这一步看起来多此一举,但在回复审稿人“你用的数据是哪个release”时非常救命。数据库同步工具本身并不适用于UKB——你不能像同步自己的业务库那样直接拉取UKB,只能通过批准的数据集申请接口获取。把“同步”做好靠的是文档习惯,而不是某个现成的软件。
3. 临床人的第一个UKB分析:从选题到落地
3.1 选一个能打的问题
在UKB上发论文,最常见的选题思路有三条:
- 疾病预测类:基线指标+遗传风险评分→未来心血管事件/糖尿病/痴呆风险
- 病因关联类:某暴露(饮食、睡眠、生化指标)→某结局的风险比
- 孟德尔随机化类:用遗传变异作为工具变量,推断中间表型与结局的因果关系
临床人最大的优势是临床知识扎实,知道哪些表型定义可操作、哪些指标在临床上真正重要。但光有临床直觉不够,你还需要先看UKB里的事件数够不够。举例来说,你在方案里想研究“心肌梗死”,可以通过Field 41270(住院ICD-10主诊断)或Field 42001(自报非癌疾病代码)提取,但必须提前估算事件例数,避免苦哈哈分析完发现统计功效不足。好在UKB的汇总统计数据可以在Showcase和部分公开论文里查到,申请获批前就能查到大致的患病与事件数量。
我的建议是从“暴露可测、结局常见、机制尚未完全清楚”的题目入手。比如“睡眠时长与2型糖尿病”“血浆维生素D与骨折风险”“握力与全因死亡”,都属于容易出结果、审稿人也能接受的稳妥方向。
3.2 表型定义的细节之水
确定题目后,最耗精力的环节是表型定义。UKB不会给你一张现成的“是否患病”的干净表格,你需要自己把自报疾病、住院记录、死亡记录、初级保健记录拼起来。
拿心肌梗死来举例。一个相对稳妥的定义是:
- 自报心肌梗死:Field 20002(非癌自报疾病代码)里有代码1161
- 或住院诊断:Field 41270里包含ICD-10代码I21(急性心肌梗死)I22(再发心梗)或I23(心梗后并发症)等
- 或死亡原因:Field 40001、40002里包含I21/I22/I23
这种多来源交叉的好处是减少漏诊,但坏处是可能混入“陈旧性心肌梗死”和“急性事件”。你需要根据研究设计选择”单次事件时间“还是“首发时间”。定义表型时,在论文方法部分写清楚用了哪些Field和代码,是审稿人最看重的基本功。
除了疾病表型,暴露变量同样要留意Field单位。收缩压Field 4080和Field 93都存过血压,但一个是自动读数、一个是手工读数;age字段21003在不同随访时间的值不同,分析时要注意用的是第几次随访的Instance。上一个字段编号眼花,分析对象从血压变成了骨密度,这种事不是没发生过。
3.3 从GWAS到孟德尔随机化到PRS
拿到干净的表型后,主流分析框架有以下三大类,临床人至少要了解每一种的适用场景。
基因组关联分析(GWAS)是UKB的看家本领。你把基因型数据和表型数据连接起来,对每个遗传位点做一次回归,P值小于5×10⁻⁸即达到全基因组显著水平。常用工具是BOLT-LMM、SAIGE、regenie和PLINK。
plink2 --bfile ukb_geno_chr21 \ --pheno mi_pheno.txt \ --logistic \ --covar covars.txt \ --ci 0.95 \ --out gwas_chr21_mi跑之前必须加入遗传主成分(PC)作为协变量,用来校正人群分层。UKB直接提供Field 22009的10个遗传主成分,不要自己重新算。
孟德尔随机化(MR)则是利用“遗传变异在受精时随机分配”的特性来推断因果。它相当于一个天然的随机对照试验,工具变量就是那些与暴露强相关的遗传位点。基于UKB的单样本MR,常用两步最小二乘法或IVW法;两样本MR则可以通过公开GWAS汇总数据来完成。这里要注意一个关键陷阱:如果做两样本MR,工具变量所在的GWAS人群与结局数据必须没有重叠样本,否则会产生弱工具变量偏倚和样本重叠偏倚。UKB个体的数据是受控的,很难从外部GWAS汇总数据中彻底剔除,所以很多MR论文现在喜欢用“UKB单样本MR+外部两样本MR交叉验证”的组合方式。
多基因风险评分(PRS)是临床预测方向最常用的方法。你在独立的GWAS发现数据里筛选一批显著位点,用它们的效应量构建加权评分,然后到UKB验证该评分对疾病的区分度和校准度。常见的构建工具有PRSice-2、LDpred2等。注意:如果发现数据和验证人群有重叠,评分的预测效果会被高估。更稳妥的做法是用UKB内部的一部分样本做发现,另一部分做验证,或者干脆使用不与UKB重叠的外部GWAS汇总数据。
3.4 一个最小可复现的分析流程
下面我用一个“睡眠时长与高血压风险”的假想例子,给你梳理出一套最小工作流。
第一步,在AMS中申请需要的字段:eid(唯一编号)、Field 21003(年龄)、Field 31(性别)、Field 22009(遗传主成分)、Field 1200(饮酒频率)、Field 1239(吸烟状态)、Field 4080(收缩压)、Field 4100(舒张压)、Field 1160(睡眠时长)、Field 41270(ICD-10诊断)、Field 42001(自报疾病)。
第二步,把随访数据中关于高血压的诊断代码整理出来。高血压的ICD-10编码包括I10到I15,再加上自报代码和降压药使用字段(Field 6153/6177),可以构成一个相对广泛的“高血压表型”。
第三步,用R读入数据并做基础清洗:
library(data.table) d <- fread("ukb_extract.csv") d <- d[!is.na(age) & !is.na(sex), ] d$hypertension <- ifelse(d$icd10_primary %like% "%I1[0-5]%" | d$self_report_hypertension == 1, 1, 0) # logistic regression model <- glm(hypertension ~ sleep_hours + age + sex + PC1 + PC2 + PC3, data = d, family = "binomial") summary(model)第四步,如果活动范围扩大到遗传分析,就把样本切成“发现集”和“验证集”,先用发现集跑GWAS获取显著位点,再构建PRS并在验证集里评估AUC增量。这个流程可以套用到绝大多数临床表型上,只要把暴露和结局字段换成你的研究变量即可。
在我的经验里,第一次跑通这套流程,少则两周,多则两个月。慢不是因为代码复杂,而是字段定义、数据清洗和版本核对会让新手反复卡壳。老生常谈一句话:前面20%的时间能决定后面80%的成果质量。
4. 避坑手册:我把常见的翻车点都踩了一遍
4.1 申请阶段最容易犯的错
申请被拒最常见的三个原因:PI资质不够硬、研究方案写得不具体、没有说明伦理考量。后两个其实都可以通过“把方案当成写标书来写”解决。
我见过一份被拒的方案,通篇都是“我想看看基因和疾病的关系”,没有具体到哪个基因、哪种疾病、哪个队列、哪个统计模型。审阅人当然无从判断。相反,一份好方案会在两页内写清楚:研究背景、目标暴露与结局的Field编码、样本纳入排除标准、统计模型、敏感性和亚组分析、多重检验校正方法。再加上一句“本研究将遵循UKB的伦理框架和数据保护要求,结果以汇总统计形式发表”,基本就够了。
另外,主申请人如果是临床医生,最好邀请所在机构的医学统计或生物信息人员加入团队,在申请表中明确写上各自的协作分工。UKB审批方看到“临床+统计”组合时,通过率和审核速度都会明显提升。
4.2 数据合并时那些让人崩溃的时刻
数据下载到手后,你需要把“表型表”“基因型表”“随访记录表”通过eid合并。eid本身是加过密的样本编号,同一个个体在不同文件中必须保持一致。很多新手把同一个人的多行记录当成多个人,一个不留神就出现几十万条虚假样本。
另一个高频坑是Field里的“Instance”概念。UKB的很多字段在基线、第一次随访、第二次随访等多个时点都有记录,你选Instance 0和选Instance 1可能是两套完全不同的数据。比如Field 21003(年龄)在Instance 2时就代表了第二次随访时的年龄,而不是基线年龄。分析时一定要在AMS提取界面或Showcase里确认你要下载的是哪个Instance。
基因型数据本身也有格式坑。UKB同时提供bed/bim/fam格式、bgen格式和VCF格式。bed格式适合PLINK,bgen适合BOLT-LMM和regenie,VCF适合更底层的变异筛选工具。下载之前先确认自己的软件读哪种格式,别下错了版本还硬跑。热词里搜“mysql的数据库连接池”“数据库增删改查”的兄弟,放到UKB场景里其实是同一个道理:你要懂得主键、外键、多表连接、版本一致性。UKB不是MySQL,但在数据管理逻辑上,你需要拿出工程思维。
4.3 统计分析里最隐蔽的伪影
人群分层是UKB分析里的经典陷阱。UKB招募点遍布英国各地,不同地域的人群祖先成分比例差异明显。如果你不加入遗传主成分校正,很可能会把一个地域差异当成基因与疾病的关联。所以GWAS和PRS分析里加入Field 22009的10个PC是默认操作,不要为了省事跳过。
同样的坑还出现在“样本重叠”上。用UKB数据同时做发现和验证时,如果两个数据集有重叠,你得到的预测指标一定虚高。正确做法是将样本分成无重叠的训练集和测试集,流程上保证训练集和测试集分离后再计算AUC。交叉验证虽然也能用,但在审稿人眼里,“独立验证集”比“交叉验证”更有说服力。
多重检验校正也是临床人经常忽视的点。GWAS全基因组通常用5×10⁻⁸的阈值;影像衍生表型动辄几千个IDP,此时应该再乘以严格的Bonferroni校正系数,否则假阳性会成批出现。另一个稳妥的办法是用FDR做初步筛选,再做外部验证或功能信息辅助过滤。
还有表型误分类的问题。只看ICD-10住院记录会漏掉很多仅在初级保健中记录的患者;只看自报疾病又会混入主诉与诊断的偏差。比较稳妥的做法是把住院记录、死亡记录、癌症登记、初级保健记录和自报疾病结合成一个复合定义,并在敏感性分析中分别报告单一来源的结果。这样即使审稿人对表型定义持有异议,你也拿得出更稳健的替代分析。
4.4 合规使用与发表时的注意事项
UKB对个体数据有严格的使用协议。获批的研究方案之外,不得随意扩展到其他未批准的分析场景。如果你发表论文时的分析范围超出了当初申请的范围,必须在投稿前向UKB提交修正案(Amendment)。这里的红线是:原始个体数据不能重新发布或转交给未授权第三方,论文附件只能放汇总统计结果,不能把几十万人的基因型和表型CSV打包上传到补充材料。
论文方法部分和致谢部分必须写清楚UKB资源编号和应用号(Application Number),通常格式类似“This research has been conducted using the UK Biobank Resource under Application Number 12345.”。同时还要引用UKB核心综述文献,一般引用两篇:一篇描述队列设计,一篇描述基因型数据或者影像数据生产流程。投稿前把这些参考文献备好,能省不少来回修改的时间。
正确引用不仅是礼貌问题,也是可复现性的体现。审稿人看到应用号,就能追踪你的数据版本和分析范围,这对文章可信度加成很大。反过来,没有写应用号的UKB论文,基本可以断定作者踩了合规的坑。
5. 长期主义:UKB不只是一篇论文的素材库
很多临床人第一次接触UKB,目标就是“发一篇SCI”。但深入了解数据后会发现,它完全可以支撑一个系列化的研究方向。
举个例子,你如果对“睡眠与心血管疾病”感兴趣,第一篇文章可以先做一个大规模的观察性关联研究;第二篇可以用孟德尔随机化验证因果方向;第三篇可以基于多基因评分建立预测模型;第四篇还可以叠加影像数据看脑区结构的中介作用。同一个临床表型,一套完整逻辑下来就能形成一个小型的研究体系,比到处换题更高效。
从资源投入来看,申请一次获批后,你在该应用号下就可以持续获取更新数据,不必每次都重新走完整审批流程(当然新扩展还是需要修正案)。这意味着早一年申请UKB,相当于早一年拥有了一个可长期更新的科研数据底座。周围很多临床同行起初觉得UKB申请“门槛高”“文书麻烦”,真正批下来之后都觉得这个时间花得值。
如果你正准备开始,我个人的建议是:先不急着走正式申请,花几天时间在UKB Showcase上注册一个浏览账号,把感兴趣的研究方向的Field翻一翻,看一看每个字段的说明、单位和覆盖人数。这一步零门槛但价值极高,能帮你判断自己的题目到底可不可行,也能锻炼看数据字典的基本功。等你对字段编号和数据结构建立起直觉后再提交正式申请,被拒的概率会小很多。
最后再分享一个小技巧:在UKB相关社区里多看看别人发表的数据声明和算法定义。很多研究组会在论文补充材料里给出详细的Field编号清单,这些都是可以“偷师”的财富。照着成熟团队的做法搭建自己的表型算法和代码流程,足以让你的第一篇UKB论文少走三个月弯路。数据矿就在那里,剩下的事情,就看你能不能沉下心去挖了。