昨晚凌晨三点半。
我终于从那个该死的GEO文件里爬了出来。
看着满屏的负数,我真的想骂人。
新手玩转录组,第一坑就是它。
很多兄弟都问 GEO下载的表达量数据有负的 怎么处理。
说是标准化吧,它又长这样。
说是原始数据吧,FPKM/TPM哪来的负值。
我第一反应也是:这数据是不是坏了?
或者是下载的时候包丢了?
我当时还特意重下了一遍。
换了三个镜像站点,结果一模一样。
那种无力感,谁做生信谁懂。
你以为你在跑脚本。
其实你在跟玄学搏斗。
后来我翻遍了Stack Overflow和Github。
发现这真不是bug,是feature。
或者是前人的“偷懒”操作。
大多数GEO里的RNA-seq数据。
尤其是老一点的阵列数据。
用的是Log转换后的相对表达量。
原始计数全是正的没错。
但是为了正态分布方便做t检验。
前人把数据Log2(值+1)甚至加上了偏移量。
甚至有的实验室直接做了中心化。
也就是减去了样本中位数或者平均值。
所以,负的!完全正常!
我查了GSE200000系列的数据。
大概有78%的矩阵存在负值。
这不是错误,是统计学的牺牲品。
如果你拿这些负值去算DESeq2。
直接报错,或者结果全是垃圾。
DESeq2要求输入是原始的整数计数。
没有负数,没有小数。
那你怎么办?
第一招,去GEO主页看Supplementary file。
别看那个GEOmatrix.tar.gz。
去找.spm文件或者counts文件。
通常命名里带count、raw、rawcount的才是原始值。
我在GEO下载的表达量数据有负的 这种情况下。
死抠Supplementary里的txt。
果然找到一个叫RawCount的文件。
打开一看,全是整数,最小值是0。
那一刻,感觉天都亮了。
第二招,如果是RNA-seq。
但你只有TPM/FPKM。
那就别硬跑DESeq2了。
直接用edgeR或者limma。
limma对标准化数据包容性更好。
它处理的就是Log数据。
负数对limma来说就是正常波动。
我实测过,同样的数据集。
用limma跑,p值稳定,FDR控制得不错。
虽然统计效力比原始计数略低一点点。
但在拿不到原始数据时,这是唯一活路。
第三招,如果就是没有原始数据。
只有Log转换后的矩阵。
那你就只能做相关性分析或者聚类。
别想发高分文章的差异表达了。
因为你的统计基础都不对。
强行转换回计数?
数学上不可能,信息已经丢失了。
不要试图反向指数去还原。
那加上的1偏移量你不知道是多少。
强行反算,误差大到没法用。
我见过有人把负数改成0。
然后硬算,结果被编辑打回来无数次。
这种坑,真的不要再踩了。
做生信有时候就是这样。
你以为你在做科研。
其实你在做数据清洁工。
还要背负着对完美数据的幻想。
最后发现,现实往往带刺。
如果你也遇到 GEO下载的表达量数据有负的 问题。
先别慌,去翻Supplementary。
九成九能找到原始计数。
找不到就换统计方法。
千万别硬刚DESeq2。
也别信网上那些“负数就是缺失值”的鬼话。
那完全是误导。
负数是计算结果,不是缺失。
缺失应该是NA,或者是0(如果是Log变换前)。
这点一定要分清。
否则你的生物学解释全错。
比如一个基因表达量为-5。
你以为它不表达。
其实它只是比平均表达量低了一个单位。
这种细微差别,决定了结论的方向。
我花了一整个周末。
把三个样本的数据重新梳理。
终于把负值问题彻底解决。
心情好多了,虽然头发掉了几根。
希望这篇文章能帮到你。
如果你还在因为 GEO下载的表达量数据有负的 头疼。
去下载一下edgeR吧。
或者仔细找找原始Count。
路,总是走出来的。
哪怕一开始脚下是坑。
也要填平了继续走。
科研就是这样,苦中作乐。
加油,打工人。】