美文网首页R优质资源
如何使用R的sweep函数对表达矩阵进行标准化

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

作者: 生信交流平台 | 来源:发表于2021-05-08 22:01 被阅读0次

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

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

    除了中位数标准化之外,我们还可以使用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函数对表达矩阵进行标准化

        本文链接:https://www.haomeiwen.com/subject/odypdltx.html