尝试使用MA规范化(http://en.wikipedia.org/wiki/MA_plot)对R中的两个变量x
和y
进行黄土处理,如下所示:
> x = rnorm(100) + 5
> y = x + 0.6 + rnorm(100)*0.8
> m = log2(x/y)
> a = 0.5*log(x*y)
我希望以平均m
为0的方式对x和y进行标准化,如标准MA标准化,然后反向计算正确的x和y值。首先在MA上运行黄土:
> l = loess(m ~ a)
那么获得更正m
值的方法是什么?这是对的吗?
> mc <- predict(l, a)
# original MA plot
> plot(a,m)
# corrected MA plot
> plot(a,m-mc)
我不清楚predict
在loess
个对象的情况下实际做了什么,以及它与l$residuals
在l
返回的对象loess
中的使用方式有何不同 - 有人可以解释一下吗?
最后,如何基于此更正来回计算新的x
和y
值?
答案 0 :(得分:0)
首先,是的,您提出的方法会获得更正的m
值。
关于预测函数:是的,l$residuals
,m - fitted(l)
和m -
predict(l)
都给出相同的结果:修正的m值。但是,predict
函数更通用:它将采用任何新值作为输入。如果您只想使用数据的一个子集来拟合黄土,然后预测数据的总体(例如,使用加标标准时),这将非常有用。
最后,如何根据此更正计算新的x
和y
值?如果您将数据转换为日志空间,则通过创建两个新变量x1 <- log2(x)
和y1 <- log2(y)
,可以更轻松地查看。由于我们处于对数空间,因此计算m
和a
更简单:
m <- x1 - y1
a <- (x1 + y1)/2
现在,要根据拟合的黄土模型更正数据,而不是通过m
更正更新mc
变量,您可以更新x1
和y1
。设置:
x1 <- x1 - mc / 2
y1 <- y1 + mc / 2
此更新与更新m <- m - mc
具有相同的效果(因为m
将重新计算为更新的x1
和y1
之间的差异,并且对此更新没有影响a
值。
要获取更正后的数据,请返回2^x1
和2^y1
进行转换。
这是affy包中normalize.loess函数的作者所使用的方法,如此处所述(并且包括循环查看所有变量对而不是在这种情况下单个对的能力): http://web.mit.edu/~r/current/arch/i386_linux26/lib/R/library/limma/html/normalizeCyclicLoess.html