ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

GEO数据库表达谱出现负值?别慌,这可能是你没注意到的预处理陷阱

GEO数据库表达谱出现负值?别慌,这可能是你没注意到的预处理陷阱

是不是刚下完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见负值,那是事故,回去查代码。

记住,数据分析不玄学,逻辑理顺了,负值也就是个数字而已。

别被它吓住,更别试图去强行修正它,那样才是真的把自己坑进去了。

返回列表