如何使用R的sweep函数对表达矩阵进行标准化

我们知道一般做表达谱数据分析之前,第一步就是对我们的表达矩阵进行标准化(归一化),去除由于测序深度,或者荧光强度不均一等原因造成的表达差异。否则后续差异表达分析得到的差异基因,很可能并不是真正生物学意义上的差异,而是由于前面提到的这些原因造成的。

做归一化的方法也很多,有根据中位数进行归一化,即将每个样本中所有基因的表达值的中值转换到同一水平。如下图所示

除了中位数标准化之外,我们还可以使用z-score的方法来对表达谱数据进行标准化:

z-score=(表达量-均值)/标准差

那么下面小编就给大家演示一下如何使用前面讲到的☞R中的sweep函数,使用z-score的方法来对表达谱矩阵进行标准化

#为了保证随机数保持一致,这里设置一下种子序列
set.seed(123)
#随机生成100个数,构造一个10X10的矩阵
data=matrix(runif(100,1,10),nrow=10)
#设置行名是gene1到gene10
rownames(data)=paste0("gene",1:10)
#设置列明是sample1到sample10
colnames(data)=paste0("sample",1:10)

#计算每一行的均值
rowmean=apply(data,1,mean)
#计算每一行的标准差
rowsd=apply(data,1,sd)
#每一行基因表达值减去这一行的均值
data1=sweep(data,1,rowmean)
#每一行基因表达值除以这一行的标准差
data2=sweep(data1,1,rowsd,'/')
data2

得到的结果如下

如果对R里面scale这个函数比较熟悉的小伙伴,可能已经发现了,scale这个函数就能完成z-score的计算,我们来看看这个函数的说明

我们来看看scale这个函数的效果

#因为scale默认对列做操作,所以这里先用t对表达矩阵做一个转置
#计算完再用t转置回来
data3=t(scale(t(data)))
data3

得到的结果如下,有兴趣的小伙伴可以去对比一下跟使用sweep函数得到的结果。(应该是一样的!!!)

如何使用R的sweep函数对表达矩阵进行标准化

你可能感兴趣的:(如何使用R的sweep函数对表达矩阵进行标准化)