✴️前言:我们从GEO数据库下载得到表达矩阵,在进行各种分析之前,首先要做的就是对数据进行标准化。
但并不是所有数据都需要进行标准化,GEO中有些数据是已经标准化了的,有些则没有,需要我们进行一个判断,判断的方法,我在后文会讲到。
众所周知,GEO数据分为芯片数据和测序数据。这两种数据他们所采用的标准化方法是不同的,下面分别进行介绍:
这种数据有明显的几个特征:👇
一般这种数据都是经过log2
转化后的标准化矩阵,不需要再进行标准化步骤,可以直接用于差异分析。
这种数据也有明显的几个特征:👇
这种数据就是没经过log2
转化后的矩阵,我们需要对它进行转换。转换方法也很简单,直接log2(exp)
即可
log2转换是将数据转换为以2为底的对数。这个方法可以将基因表达量转换为“fold change”,即相对于参考样本的基因表达量的增长或减少的倍数。这对于比较不同样本间的差异很有用,因为它考虑了基因表达量的相对大小。
除了用肉眼判断,其实还有一种更可靠的方法,就是用R代码来进行判断:
ex <- exprSet #把需要判断的矩阵命名为ex
qx <- as.numeric(quantile(ex, c(0., 0.25, 0.5, 0.75, 0.99, 1.0), na.rm=T))
LogC <- (qx[5] > 100) ||
(qx[6]-qx[1] > 50 && qx[2] > 0) ||
(qx[2] > 0 && qx[2] < 1 && qx[4] > 1 && qx[4] < 2)
if (LogC) { ex[which(ex <= 0)] <- NaN
exprSet <- log2(ex)
print("log2 transform finished")}else{print("log2 transform not needed")}
将以上代码复制粘贴进R语言中,把ex
赋值成自己的表达矩阵,然后可以直接运行进行判断。
如果你的矩阵不需要进行log2转换,则会返回
[1] "log2 transform not needed"`
如果你的矩阵需要进行log2转换,这个代码会自动为你进行log2转换,然后返回
[1] "log2 transform finished"`
这种数据的几个特征:👇
这种数据我们不能用log2转换,因为log的底数不能为0,因此我们要用另一种标准化方法——Z-score标准化
Z-score标准化是将数据转换为其均值为0,标准差为1的形式。这个方法可以消除不同基因的绝对大小的差异,并使得数据在相同的尺度上。这对于研究基因表达量的变化趋势很有用。 对每个基因,你需要计算这个基因在所有样本中的均值和标准差,然后将每个样本的表达量减去均值,再除以标准差。
测序数据的标准化方法无非就是,TPM、RPKM/FPKM
这三者(准确来说是两者) 的区别目前的讨论还较多,没有人能给出一个准确且清晰的定义,以及使用情况。缺少有力的参考资料和推算过程来说明他们的区别。
🤔后记:
我查阅了大量关于基因芯片和RNA-seq标准化的资料,目前中文网站上很少有相关的资料,甚至外文网站对于标准化的适用情况的描述都是很模糊的,各执一词,可见标准化在实际操作中其实是非常混乱的。😓很多科研人员自己也搞不清楚的,都是一个模仿另一个这么来做。
如果有人对于标准化有更加深刻的理解,欢迎在我的公众号留言,或者私聊,我们一起探讨。😁
所有文章均为markdown制作,MD源文件可以在微信公众号后台回复相应暗号后得到下载链接。
-此篇文章的暗号为1909。
*我也准备了两份标准化代码,分别是log2标准化和Z-score标准化,后台回复log2和Z可获得R代码下载链接。