如何在R中进行ma和loess归一化?

时间:2013-03-20 20:41:55

标签: r statistics normalization regression loess

尝试使用MA规范化(http://en.wikipedia.org/wiki/MA_plot)对R中的两个变量xy进行黄土处理,如下所示:

> 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)

我不清楚predictloess个对象的情况下实际做了什么,以及它与l$residualsl返回的对象loess中的使用方式有何不同 - 有人可以解释一下吗? 最后,如何基于此更正来回计算新的xy值?

1 个答案:

答案 0 :(得分:0)

首先,是的,您提出的方法会获得更正的m值。

关于预测函数:是的,l$residualsm - fitted(l)m - predict(l)都给出相同的结果:修正的m值。但是,predict函数更通用:它将采用任何新值作为输入。如果您只想使用数据的一个子集来拟合黄土,然后预测数据的总体(例如,使用加标标准时),这将非常有用。

最后,如何根据此更正计算新的xy值?如果您将数据转换为日志空间,则通过创建两个新变量x1 <- log2(x)y1 <- log2(y),可以更轻松地查看。由于我们处于对数空间,因此计算ma更简单:

  • m <- x1 - y1
  • a <- (x1 + y1)/2

现在,要根据拟合的黄土模型更正数据,而不是通过m更正更新mc变量,您可以更新x1y1 。设置:

  • x1 <- x1 - mc / 2
  • y1 <- y1 + mc / 2

此更新与更新m <- m - mc具有相同的效果(因为m将重新计算为更新的x1y1之间的差异,并且对此更新没有影响a值。

要获取更正后的数据,请返回2^x12^y1进行转换。

这是affy包中normalize.loess函数的作者所使用的方法,如此处所述(并且包括循环查看所有变量对而不是在这种情况下单个对的能力): http://web.mit.edu/~r/current/arch/i386_linux26/lib/R/library/limma/html/normalizeCyclicLoess.html