书到用时方恨少,今天来学习一下英国生物数据库中用于表型关联分析的工具,以下主要内容是对截图所示文章的翻译。
摘要
动机:流病队列常常包含不同类型的表型数据,自动化扫描表型组并不简单,需要非常异质化(highly heterogeneous)的模型。因此,到目前为止,表型组扫描往往使用统一的方法,分析一部分同质的表型。我们开发了PHESANT(PHEnome Scan ANalysis Tool),用于整合扫描UK生物库中的表型组。
一般特性:PHESANT检验特定性状,与UK生物库或特定子集中,所有连续型、整型和分类变量的关联。PHESANT使用基于规则的新算法来确定如何恰当地检验每一个性状,然后执行分析,输出图和描述性表格。
实现:PHESANT的表型组扫描部分是用R实现的,整体包括基于Javascript D3.js 的可视化,以及相应的Java代码(可将表型组扫描分析结果转化为需要的JavaScript Object Notation (JSON) 格式)。
可用性:PHESANT已托管至GitHub[https://github.com/MRCIEU/PHESANT]。
导言
表型组扫描检验某个性状与一系列表型(即表型)的关联。表型组扫描大致分为全表型组关联研究(phenome-wide association studies,pheWAS),孟德尔随机化pheWAS(Mendelian randomization-pheWAS,MR-pheWAS)和全环境关联分析(environment-wide association studies,EnWAS)。PheWAS致力于研究某个遗传变异与一系列表型化的性状的关联。最近,pheWAS的研究进一步扩大,MR-pheWAS,在pheWAS的框架下使用孟德尔随机化搜索特定暴露因素的因果效应。EnWAS致力于检验某个性状和其他表型的关联。
流病队列通常包含大量不同的表型,因此无法简单地自动化检验这些表型与另一个性状的关联。因此,研究者们若想做表型组分析,往往会指定一些同类型的性状,以便统一地自动化分析这些性状中的关联。比如,pheWAS起初用统一的检验方法,分析电子医疗档案中的国际疾病分类(international classification of disease,ICD)编号,将每种疾病编码视为二分类变量。然而,仅研究一部分表型只能看到一部分与某个表型的关联,减少了发现新关联的可能。
本文提供PHESANT(PHEnome Scan ANalysis Tool),一个可平行化地用于UK生物库——来自英国约500,000名37至73岁的男性和女性的前瞻性队列——表型组扫描的工具。该队列包括遗传数据和大量不同类型的数据,分别来自血液、尿和唾液的检测、临床评估,记录链接(record linkage,整合不同的数据源中来自同一实体的数据集)以及健康和生活调查问卷。利用丰富且大量的数据,研究者通过表型组扫描,更有可能发现新的关联。
实现
PHESANT是用R实现的,需要以下R包:optparse, MASS, lmtest,nnet,forestplot和 data.table。PHESANT的输入是包含一组表型、需研究的性状(依研究类型而定,如pheWAS、MR-pheWAS或EnWAS,输入分别是SNP、遗传评分或表型化的性状)以及混淆因素(需研究的性状和混淆因素也可以分不同文件)。PHESANT还需利用两个数据文件,收集了UK生物库队列中变量相关的信息:(i)数据编码信息;和(ii)变量信息。接下来的例子中将提及这些文件,稍作修改即可用于特定的表型组扫描。更多相关数据和信息文件,可在GitHub中查看。最后,将介绍PHESANT中的变量处理流程(variable processing flow)。
确定变量编码的自动化处理流程
为了自动化检验特定性状与一系列不同类型的表型的关联,我们开发了基于规则确定每个变量合适的编码和相应的关联检验的系统(见图1)。决定规则从UK生物库指定的变量字段类型(variable field type,见http://biobank.ctsu.ox.ac.uk/showcase/list.cgi)开始,要么连续型、整型、分类型(单)或分类型(多),再将这些变量分类为以下四种数据类型:连续型、有序分类型、无序分类型和二分类型。分类型(单)字段类型指的是分类字段(包括二分类型),其中每个参与者只能有一个值。比如,问卷中,参与者被问到“如何描述你通常的步行速度?”,选项包含“慢”、“平均”和“快”(字段ID是924)。相比之下,分类型(多)字段对每个参与者而言,有多个值。比如,问卷中,参与者被问到前一天早上吃什么面包(字段ID是20091),可能同时选白和全麦。当某字段在多个时间点测量,仅保留首次出现的值。连续型和整型变量可能在第一个测量时间点有多个测量值(常常是为了提升测量的估计精确度)。比如,一段时间内,肺活量会测两到三次,以字段3062[http://biobank.ctsu.ox.ac.uk/showcase/field.cgi?id=3062]为例。遇到这类情形,取均值。
连续型字段类型中的变量通常被归为连续型数据类型。在这种情况下,变量将通过inverse normal rank transformation转换为正态分布。在少数情况下,连续型字段将被归为有序分类型数据类型(如果仅含两种不同的值,则转为二分类型)。比如,字段100022包含估计饮酒量,基于问卷“回忆24小时内的饮食”中的回复。大部分参与者在此字段是零值,因为他们不饮酒。不能inverse normal rank transform此变量,因为大部分参与者具有相同的值,转换中随机排序,将给数据增加噪音。相反,我们将此变量转换为三类,每类的人数大致相同(在不同值之间设置分割点),然后当作有序分类变量(见附件S3中的算法)。整型字段类型的变量通常和连续型变量一样处理。在少数情况下,不同的取值少于或等于20个,我们将此变量当作有序分类型(或二分类型如果只有两个不同取值)。
分类型(单)变量可能被归为二分类、有序分类或无序分类数据类型。UK生物库将负数归为表示缺失的类别(比如“不想回答”和“不知道”),因此将负数重编码为“NA”。UK生物库定义了一个或多个字段归类后的“数据编码”(defines 'data codes' to which one or more fields are assigned),并且为这些字段及其数值定义了一系列分类值。PHESANT数据编码信息文件确定了分类型(单)字段的数据编码,说明它是一个有序或者无序的分类结构,然后用此信息将每个非二分类型(单)字段归为有序型或无序型分类数据类型。
每个分类型(多)变量被转换为一系列二分类变量,说明该参与者是否具有此类指定值。比如,对于描述昨天吃的面包变量(字段ID为20091),值为“白”、“混合”、“全麦”、“多籽”和“其它”,将产生五个二分类变量:白={真,假},全麦={真,假}等。如果有人在此字段上没有值,那么分类型(多)字段将更复杂,这可能是因为:(i)该字段值不全——未包含所有可能的值(如,某个参与者不吃面包不会选以上任何一个选项);或(ii)由于数据缺失(比如,参与者没答此题)。这将影响如何赋值,比如,当白=假,要么是:(i)所有选择除“白”以外选项的人;(ii)所有回复了问卷,但未选“白”的人;或是(iii)未选择“白”的人,且包括那些未回复问卷的人(见补充图3示意)。在这种情况下,第二个选项更好,比较那些吃白面包的人和回复了问卷但是不吃白面包的人。因此需针对每个变量单独分析,在PHESANT变量信息文件中可以指定。补充材料S1有更多细节。
一些分类型(多)字段包括负值,代表缺失(比如“不知道”)。因为无法确定他们是否与该二分类变量的真值有关,需从转换出的二分类变量为假的人群中排除该分类型(多)字段存在缺失的参与者。以字段41228[http://biobank.ctsu.ox.ac.uk/showcase/field.cgi?id=41228]为例,描述的参与者接生医生的类型,比如某个参与者曾有两次生育,在此项选择“助产士”和“不知道”。在助产士的二分类变量这一项,符合助产士=真(midwife=true)的参与者集合包括该参与者,因为至少有一次助产士为其接生。然而,不能肯定某个住院医生没有为该参与者接生,因为“不知道”可能指的是“住院医生”。因此,在“住院医生”的二分类变量这一项,符合住院医生=假(hospital_doctor = false)的参与者集合就不包括该参与者, 因为此项未知。
检验某个性状的关联
在恰当地将每个表型编码并归类为四种数据类型之一后(连续型、有序分类型、无序分类型和二分类型)后,将检验需研究性状和所有表型的关联,具体如下。表型和该性状分别为回归的自变量和因变量。所有的回归都校正招募时的年龄和性别(如果该性状具有遗传性,再加上基因型),或者如果指定了混淆文件(confounder file),则校正混淆文件中的所有变量。对转换后的连续型数据类型,用线性回归(R函数lm)检验关联。对有序分类型、无序分类型和二分类型变量,分别用有序逻辑斯蒂回归(R函数polr)、多项式逻辑斯蒂回归(R函数multinom)和二项式回归(R函数glm,family参数设为binomial)。当样本量低于500时,不检验该变量,这种情况通常出现在对子人群进一步提问的少部分字段(比如,字段22148[http://biobank.ctsu.ox.ac.uk/showcase/field.cgi?id=22148])。当分类变量的类别多于1000种(超过multinom函数的默认最大值),也不检验,在下文使用说明中有一个例子(字段132[http://biobank.ctsu.ox.ac.uk/showcase/field.cgi?id=132])。
用PHESANT做个性化表型组扫描分析
PHESANT允许研究者通过简单修改数据编码和变量信息文件,实现个性化表型组扫描分析。具体如下:
•改变变量的数值型取值(比如将取值再编码为缺失)或者有序分类变量的取值顺序;
•当分类型(单)变量存在表意不明的取值时,赋予缺省值(见补充部分S1);
•将分类型(单)字段改为分类型(多)字段类型,这对一部分字段可能比较合适;
•指定哪个变量在表型组扫描前应该被剔除;
•指定表型组数据中哪些字段基本上与需研究的性状一致[比如,体重、身高体重指数(BMI)],这样在表型组扫描分析后,字段与性状之间关联的结果将仅用于验证,不在结果中,避免不必要的多重检验。
以下两种方式可以进一步帮助实现个性化分析:
i.用户可以在运行之前调整数据,比如,用中位数而不是均值整合连续型数值,或者整合某字段多个时间点的数据。
ii.用户可以保存PHESANT处理好的表型,进一步用这些变量做个性化分析。
结果输出
PHESANT对结果中的p值排序,输出结果文件、QQ图,对连续型、有序分类型和二分类型中低于Bonferroni校正阈值的结果绘制森林图[无法保证无序分类型结果中的森林图,因为并没有这些模型整体的预估(和置信区间),模型p值来源于似然比例检验]。
其余部分是关于PHESANT-viz如何网页可视化表型组扫描结果、案例展示和使用说明和讨论,暂时不译,未完待续。