很多刚入行或者做生信分析的朋友,拿到GEO数据第一反应就是问:这数据是fpkm吗?其实这个问题背后,你真正想问的是:我该怎么处理这些原始数据,才能做出靠谱的差异表达分析?今天我就把这套逻辑掰开揉碎了讲,帮你省下熬夜调参的功夫。
先说结论,绝大多数情况下,GEO里的原始矩阵数据都不是fpkm,甚至连tpm都不是。你下载下来的那些密密麻麻的数字,大概率是raw counts(原始计数)或者经过标准化处理的log2转化值。
我见过太多新手,拿到数据直接拿fpkm的方法去算差异基因,结果跑出来的火山图乱七八糟,p值分布也不对劲。为什么?因为fpkm是用于样本间比较表达量高低的,它消除了基因长度和测序深度的影响,但它不适合做统计检验。差异表达分析的核心是看计数数据的离散程度,这得用负二项分布模型,比如DESeq2或者edgeR,这些工具底层依赖的是整数型的原始计数。
咱们来拆解一下常见的几种数据格式。第一种,也是最坑人的,就是直接下载的txt或csv矩阵。这时候你得去GEO官网看那个GPL平台的注释信息。如果平台是基于微阵列(Microarray)的,那数据通常是探针的荧光强度,这时候你要做的是background correction和normalization,比如用RMA算法,这时候根本不存在fpkm的概念,因为微阵列没有测序深度和基因长度的问题。
如果是RNA-seq数据,情况就复杂点了。有些上传者比较懒,直接上传了处理过的表达矩阵。这时候你要仔细看表头或者文档。如果数值是小数,且范围在0到几十之间,有可能是fpkm或tpm。但如果是整数,哪怕看起来像浮点数(比如100.0),那大概率是counts。这里有个小技巧,你看一下最大值,如果有个别基因数值特别大,比如几万甚至几十万,那绝对是counts。fpkm因为做了标准化,数值通常比较均匀,不会这么极端。
很多人纠结geo数据是fpkm吗,其实是因为他们想偷懒,不想自己重新做QC和标准化。但我要提醒你,用别人处理好的fpkm数据做差异分析,在统计学上是站不住脚的。FPKM忽略了基因长度差异带来的技术偏差,虽然它让不同基因间的表达量可比,但在样本间比较时,它无法准确反映生物学变异。
我有个客户,之前为了赶时间,直接拿论坛里下载的fpkm矩阵去跑DESeq2,结果被审稿人直接打回,理由是统计模型不匹配。后来我们重新从SRA下载原始fastq文件,自己比对、定量,用counts跑了一遍,虽然多花了一周时间,但结果稳稳当当,文章顺利接收。
所以,别纠结geo数据是fpkm吗,而是要问:这数据适合我的分析目的吗?如果手里只有fpkm,又非要算差异表达,那只能退而求其次,用limma-voom或者简单的t检验,但一定要在文章里注明局限性,承认这不够严谨。最好的做法,永远是去GEO里找Series Matrix File (.txt.gz),然后自己用R语言读取,检查数据分布。
最后给个实操建议。下载数据后,先画个PCA图。如果样本聚类清晰,说明数据质量还行。如果全是乱码或者分布极其异常,那大概率是数据格式不对,或者上传者处理有误。这时候别硬算,重新找数据源。
做生信分析,细节决定成败。别为了省那点预处理的时间,最后赔上整个项目的信誉。遇到拿不准的数据格式,多查几个文献,多问问同行,别盲目自信。
如果你手里正有一堆GEO数据不知道怎么处理,或者跑出来的结果总是不理想,欢迎来聊聊。咱们可以一起看看数据源头,说不定换个思路,问题就解决了。毕竟,这条路我走了七年,踩过的坑比吃过的米都多,希望能帮你少走弯路。