做生信分析,卡壳最久的往往不是模型,而是那个看起来人畜无害的原始数据文件。
GEO里下来的表达矩阵,那些长得像乱码的Probe ID根本没法直接跑后续差异分析。
这篇文章把从GEO拿数据到把ID变成人类可读基因名的路,给你走一遍。
很多新手第一步就错了,直接把Excel里的ID拿去NCBI搜。
结果就是搜出几百个无关基因,甚至是一片空白,心态瞬间崩了。
核心问题在于,你手里拿的“钥匙”和数据库里的“锁”不匹配,芯片不同,ID编码规则就不同。
想搞清楚这批数据,第一步得看GEO记录页面上的平台(Platform)部分。
如果标题写着GSE开头,再看Sample类型,是RNA-seq还是Affymetrix微阵列。
这俩的处理逻辑完全不同,搞混了后面全是白费功夫,别急着跑代码,先搞清楚数据源。
假设你拿到的是最常见的Affymetrix芯片数据,比如HG-U133_Plus_2。
这种芯片的Probe ID通常是“1557357_at”这种格式,纯数字加后缀,毫无生物意义。
这时候你需要对应的Annotation软件包,R语言里Bioconductor的annoiat包是标配。
注意是annoiat,不是annota,拼写错了代码会报错,新手常在这里卡半天。
安装完软件包,用getAnnotation函数提取ID映射表。
这时候你可能会发现,一个Probe对应两个Gene Symbol,或者对应Entrez ID列表里有逗号分隔的多个ID。
这时候需要做决策,通常取Entrez ID作为中间桥梁,因为它在全基因组层面更稳定,跨物种通用性也比Symbol强。
如果做RNA-seq测序数据,情况稍微乐观点,因为ID往往就是Gene Name或者Ensembl ID。
但GEO里有些早期数据,ID列头可能标的是“gene”,实际内容是Ensembl的ENST...编号。
这时候要用biomaart包去映射成Homo sapiens的Symbol或Entrez ID。
生物信息学里,工具链永远比单一脚本更有价值,掌握biomaart能解决80%的ID映射问题。
这里有个坑,必须单独拎出来说,那就是版本问题。
NCBI的Gene ID数据库每年都在更新,2018年的Entrez ID可能在今年已经变成了别名。
如果你拿旧的映射表去对应新的注释,会出现大量NA或者错误的基因名。
建议每次分析前,都用最新的RefSeq版本重新跑一遍ID转换,别偷懒复用去年的脚本。
还有一点容易被忽略,就是Species的一致性。
很多数据集混入了细胞系、肿瘤组织、甚至异种移植的数据,ID可能指向不同物种的同名基因。
必须在GEO页面的“Sample Characteristics”里反复确认Species是不是你要的研究物种。
如果拿大鼠的数据ID去对小鼠的基因注释,结果出来看着挺美,发文章时被审稿人一问,直接露馅。
对于批量下载的数据,建议写一个循环脚本,逐条GSE记录进行检查。
不要人工一个个复制粘贴ID,手误概率太高,而且效率极低。
把清洗好的表达矩阵和ID映射表分开保存,保留中间的中间文件,方便日后回溯。
最终交付物应该是一个干净的TSV文件,第一列是Gene Symbol或Entrez ID,后续列才是表达量。
如果你做的是非人源模式生物,比如小鼠、斑马鱼,映射难度会增加,需要依赖Species Specific的包。
这时候不要硬套人类的注释规则,去NCBI的Gene数据库查该物种的官方注释页面。
最后总结一下,Geo数据库基因注释不是简单的翻译,而是一个数据治理的过程。
从识别平台类型,到选择正确的Annotation包,再到处理ID歧义和版本迭代,每一步都有坑。
做好这三步,你的差异分析结果才能站得住脚,别在起跑线上就摔了跟头。