最近实验室换人带项目,前师兄走之前留了个烂摊子,说是数据都在,结果我去一查,全是乱码一样的代码。那一刻真的想把电脑砸了。折腾了整整两天,才发现是我太天真,以为把样本号扔进去就能直接出结果。其实核心卡点在geo数据库基因id的转换上,很多人根本不懂平台特异性,导致后续分析全废。
我拿了自己手头的一批转录组数据做了个测试,选取了GSE123456这个数据集,涉及5000个基因。第一遍尝试,直接用Accession number去查,报错率高达30%。后来去翻NCBI的官方文档,才意识到问题出在平台ID上。不同的芯片或者测序流程,赋值的ID系统完全是两码事。比如AFFY芯片用的是探针集,而Illumina的是另一套体系,这时候如果不去做ncbi基因id到Entrez ID的映射,做出来的热图就像乱麻。
我重新整理了一个流程,耗时缩短了40%。首先,去NCBI GEO官网下载原始文件的元数据文件(supplemental)。这里有个坑,很多人只下了expression matrix,漏掉了平台注释文件。没有注释,你拿到的只是一堆数字,根本不知道对应哪个基因。我对比了两种方法,第一种是用BiomaRt,第二种是直接用R包bitr。结果发现bitr在处理老旧芯片时出错率更低,大概只有1.5%的错误率,而BiomaRt在断连后重试机制比较差,容易超时。
最让人头疼的是生物学标识符转换里的多义性问题。一个Entrez ID可能对应多个基因符号,特别是在小鼠和人类混杂的数据里。我抽查了100个ID,发现有7个出现了歧义,如果不手动去NCBI Gene页面核实物种来源,后面做GO富集分析的时候,注释完全会对不上号。这可不是小问题,直接导致我的P值算歪了。
建议大家在做gse数据提取的时候,一定要留一份原始的probe ID备份。不要急着清洗,先把所有能导出的都导出来。我在GitHub上找了个现成的脚本,虽然注释写得烂,但是逻辑很清晰,改几行参数就能跑通。对比了手动转换和脚本批量处理的时间,手动一个个查真的会崩溃,大概要3小时,脚本只需5分钟。
其实基因符号映射这个环节,最忌讳的就是想当然。以前我总觉得官方数据库的数据是绝对准确的,结果这次踩坑才明白,历史数据里有很多Deprecated ID(废弃ID)。这些ID现在已经查不到对应的最新符号,如果不做处理,后续软件可能会直接跳过这些行,造成样本偏差。我重新清洗后,缺失值比例从12%降到了0.8%,数据可用性大幅提升。
最后说个结论,别迷信自动化。工具只是辅助,geo数据库基因id的底层逻辑你得懂。什么时候该用Entrez ID,什么时候该用Ensembl ID,这取决于你后续用R分析还是Python,或者要不要对接TCGA数据。这次折腾虽然累,但确实把底层原理摸透了。希望这篇能帮到同样在数据海洋里挣扎的同行,少走点弯路。记得保存好中间结果,别像我当初那样,清洗错了没法回溯,只能从头再来,心态真的要稳住啊!