是不是刚下完GEO数据,一画图就发现全是负数?心里是不是咯噔一下,怀疑自己算错了?
别急,这情况在生信分析里太常见了,尤其是刚上手的小白,经常因为没搞懂底层逻辑而卡壳。
今天咱们就掰开了揉碎了说说,这负值到底从哪来的,又该怎么治。
先说个扎心的大实话:绝大多数情况,这负值不是你算错了,而是数据本身就是这么“调皮”。
很多人有个误区,觉得基因表达量必须是个正整数,或者至少是正的实数。
错了,大错特错。
如果你看的是Raw Counts(原始计数),那它肯定是非负的,因为是测序_reads_计数嘛,不可能数出负数条。
但一旦你看到了Log2转换后的数据,或者是经过RMA等算法探针集值,负值就是合理的存在。
举个最常见的例子,比如Affymetrix芯片。
这种芯片处理流程里,最后一步往往是减去Background,然后做Log2转换。
如果某个探针的表达量极低,低于背景噪声,减去背景后可能就变成负数或者0。
这时候如果你直接Log2,那就炸了,或者出现负无穷。
所以平台通常会加一个极小值偏移,比如log2(表达量+1)。
这样一来,原本小于1的正数,经过Log2后就会变成负数。
比如表达量是0.5,Log2(0.5+1) = Log2(1.5) ≈ 0.58(正)。
但如果是RMA算法,它内部有复杂的归一化和反卷积,输出的Probe Set Level往往已经是Log2尺度了。
在这个尺度上,中位数可能在0附近,那自然有一半的数据是负的。
这就是为什么你在GEO下载Processed Data时,看到的是满屏的负数。
这时候千万别去问“负值代表基因不表达吗?”
答案是:不一定。
Log2尺度下的0,代表的是表达的基线水平,而不是0表达。
负值,说明表达量低于这个基线,可能是检测限以下,或者真的表达很低。
那问题来了,如果是RNA-Seq数据,出现负值正常吗?
这就得看你下的是哪种数据了。
如果是Count Matrix,绝对不该有负值。
如果你下的是TPM或者FPKM,也是正数。
唯独一种情况,你会在RNA-Seq里看到负值:那就是DESeq2或者limma-voom分析后,输出的log2FoldChange或者Adjusted P-Value相关的统计量,或者某些标准化后的矩阵(如Z-score)。
如果你发现RNA-Seq的FPKM表里有负数,那十有八九是你预处理代码写挂了,或者是下载错了文件,拿到了差异分析的结果表而不是表达谱表。
遇到这种情况,第一步,检查你的文件类型。
看一眼GEO DataSets页面的文件列表,找带有.rma.txt或者.counts.txt后缀的。
第二步,打开文件头,看看有没有Log2或者Normalized的字样。
如果有Log2,那负值正常,直接用,别折腾。
第三步,如果你用的是RNA-Seq数据,且看到负值,赶紧回去检查是不是混入了差异分析的输出文件,比如table.csv里混入了p.adjust列,有些工具会把统计量拼进去,但这列通常不是表达谱主体。
还有一种极少见的情况,就是QC过程中的样本标准化异常,导致整个矩阵平移。
但这概率低得像被雷劈,一般新手接触不到。
所以,总结一句心法:看到负值,先看数据来源。
芯片数据Log2后见负值,那是常态,别慌,该做聚类做聚类,该做PCA做PCA。
测序数据Count/FPKM见负值,那是事故,回去查代码。
记住,数据分析不玄学,逻辑理顺了,负值也就是个数字而已。
别被它吓住,更别试图去强行修正它,那样才是真的把自己坑进去了。