微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算微阵列中的全局中值归一化

如何解决计算微阵列中的全局中值归一化

我想提取 4 个数组的 Cy5 前景/背景并从前景值中减去背景,然后对这些值进行 log2 转换。然后,我想使用减去背景的 Cy5 值来计算这 4 个数组的全局中值归一化。每个数组的中位数将用于缩放。归一化后,所有数组的中位数应为 1。

但是,我下面的代码将中值计算为 0 而不是 1。为什么?我应该改变什么才能获得 1 的中位数?

library(limma)
library(marray)


for(i in 1:4){
  name <- paste("sample",i,sep = ".")
  bg <- maRb(dat[,i])
  fg <- maRf(dat[,i])
  diff <- fg - bg
  diff[diff < 0] <- NA
  assign(name,log2(diff))
} 

data.prenorm <- cbind(sample.1,sample.2,sample.3,sample.4)
data.median  <- apply(data.prenorm,2,median,na.rm = T)
data.norm    <- sweep(data.prenorm,data.median)

colnames(data.norm) <- c("Array 1","Array 2","Array 3","Array 4")

median(data.norm[,1],na.rm = T) 
median(data.norm[,2],na.rm = T)
median(data.norm[,3],4],na.rm = T)

数据:

> dput(data.norm[1:4,1:4])
structure(c(0.335603031784438,0.192645077942395,0.280107919192734,4.59067615191555,-0.362570079384708,6.14068778021722,-0.192645077942395,-0.263034405833793,3.4262647547021,-0.231325546106455,-0.754887502163468,6.13689620105484),.Dim = c(4L,4L),.Dimnames = list(NULL,c("Array 1","Array 4")))

解决方法

我不是微阵列处理方面的专家,所以我只能对您想要达到的目标提供一些公认的猜测。

你看,一个中值归一化数组的中值是 0。要看到这一点,假设你有一个 x 的排序数据数组和一个用 中值填充的等长数组>x,称之为yx 的中位数在其中心位置,(xy) 的中位数也将在中心位置,因为对 的每个元素减去一个常数>x 不会改变它们的相对大小。 (x-y) 的中心位置根据定义是中值(x)-中值(x),即0。

在这一点上也有一些很好的 documentation

现在回到你的观点。我怀疑您要处理的内容应该在日志空间中。这会给你中值归一化数据的中值 0。然后在将归一化数据转换回原始空间后,中值将为 1。

这是使用一些虚拟数据的快速检查:

dat = matrix(1:16,nrow = 4)
ldat = log2(dat)
ldat_norm = sweep(ldat,2,apply(ldat,median))
dat_norm = 2^ldat

median = apply(ldat,median)

> median
[1] 1.020621 1.002972 1.001136 1.000595

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。