做数据库挖掘的朋友,大概都遇到过这个让人头秃的问题。打开GEO数据库,想找个基因的数据下载。结果一看,天哪,怎么这一行基因名字,旁边对了好几个探针ID?有的甚至对应十几个。这时候你该留哪个?还是把多个都算进去?这直接决定了你后面结果的靠谱程度。
首先咱们得搞清楚,为什么会出现这种情况。人类基因组计划完成得早,那时候的技术,一个基因对应一个转录本比较理想。但后来测序技术越来越精妙,你会发现同一个基因,能剪切成好几种不同的mRNA。这就是所谓的选择性剪。不同的探针,设计的位置不一样。有的打在共同外显子上,有的打在特异外显子上。
如果你随便选一个探针,可能只测到了其中一种亚型。但你真正关心的,可能是那个导致疾病的关键亚型,却被你漏掉了。这就叫探针偏差。
我记得有个做肿瘤生物信息的学生,之前找导师帮忙看数据。他用的探针ID是从早期芯片直接下来的,没做过映射更新。结果发现,几个临床样本里,关键基因表达量巨高。后来我让他去查了那个探针现在的注释信息。好家伙,那个探针对应的基因ID,竟然被重新分配了。原来的基因在芯片设计年代被认为是新发现的,后来发现跟已知基因是重叠或者同源的。这要是直接拿去发文章,Reviewer肯定要把他喷死。
所以,解决geo多个探针对应一个基因的核心思路,不是“选”,而是“合并”或者“重映射”。
第一种方法,重映射到新标准。现在GEO的数据虽然历史悠久,但生物信息学工具很强大。你可以把探针ID,通过最新的注释文件(比如HG-Microarray平台的最新Anno),重新映射到Gene Symbol上。这一步能解决很多旧探针失效的问题。但注意,映射过程可能会有多对多的情况,处理起来要小心。
第二种方法,取平均值。如果多个探针都稳定对应同一个基因,而且都表达,你可以把这些探针的值取个均值。这样能平滑掉个别探针噪音过大带来的干扰。比如三个探针都显示上调,那上调的趋势是实锤的。
第三种方法,保留高变异的那个。有些时候,我们就是想看基因的不同亚型差异。这时候,你要看哪个探针的方差大,或者哪个探针在两组对比中P值最小。但这需要你有明确的生物学假设,不能盲目选。
这里有个真实的小细节。之前我们组帮一家公司做数据清洗,他们之前跑出来的差异基因列表特别长,很多都没法重复。后来我把所有探针重新做了一套映射。把那些对应不上去的,或者一对应的都挑出来,单独拎出来看。结果发现,很多所谓的“差异表达”,其实是探针交叉杂交或者设计缺陷造成的假阳性。清洗之后,剩下的有效基因少了一半,但可信度提升不止一倍。
大家一定要避免一个误区,就是觉得数据越多越好。在bioinfo领域,准确优于数量。一个精心挑选、验证过的探针,胜过十个混乱叠加的信号。
还有,别忽略平台版本。不同版本的芯片,甚至同一芯片的不同批次,探针覆盖度都不一样。下载数据时,看清平台ID(GPL)。如果可能,尽量用最新注释文件。
最后给点实在建议。如果你刚入门,别自己手写代码去手动查映射表。太慢且容易出错。用R语言的Bioconductor包,比如oligo或者affy,里面自带了很好的映射功能。或者用在线工具,如Brainarray,它提供了重定义芯片的功能,专门解决geo多个探针对应一个基因的问题。虽然稍微学习成本高点,但一劳永逸。
别为了赶进度,拿过时的注释糊弄自己。生物数据是有时效性的。今天的标准,明天可能就过时了。保持对数据的敬畏,多做一步验证,你的结果才站得住脚。如果实在搞不定复杂的映射关系,或者遇到特别边缘的探针不知道怎么处理,不妨找专业人士问问。别因为一个小探针,毁了整个项目。