【问题标题】:How to do ma and loess normalization in R?如何在 R 中进行 ma 和 loess 归一化?
【发布时间】:2013-03-10 04:21:12
【问题描述】:

尝试在 R 中使用 MA 归一化 (http://en.wikipedia.org/wiki/MA_plot) 对两个变量 xy 进行 loess,如下所示:

> x = rnorm(100) + 5
> y = x + 0.6 + rnorm(100)*0.8
> m = log2(x/y)
> a = 0.5*log(x*y)

我想对 x 和 y 进行归一化,使平均 m 为 0,就像在标准 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 对象的情况下实际上做了什么,以及它与在 loess 返回的对象 l 中使用 l$residuals 有何不同 - 有人可以解释一下吗? 最后,我怎样才能根据这个更正计算新的xy 值?

【问题讨论】:

  • gogling 将我带到library(affy),它包含normalize.loessma.plot 函数。为什么不使用这个包来控制你的结果呢?
  • @agstudy:这很好,但这很简单,应该可以用loess 实现,不需要额外包的开销。我想了解 loess 拟合在 R 中是如何工作的,而不依赖于包

标签: r statistics normalization regression loess


【解决方案1】:

首先,是的,您提出的方法得到了正确的 m 值。

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

最后,您如何根据此更正计算新的xy 值?如果您将数据转换为日志空间,通过创建两个新变量x1 &lt;- log2(x)y1 &lt;- log2(y),它会变得更容易查看。由于我们在日志空间中,计算 ma 更简单:

  • m &lt;- x1 - y1
  • a &lt;- (x1 + y1)/2

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

  • x1 &lt;- x1 - mc / 2
  • y1 &lt;- y1 + mc / 2

此更新与更新m &lt;- 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

【讨论】:

    猜你喜欢
    • 2017-07-04
    • 2021-10-22
    • 2018-05-21
    • 1970-01-01
    • 2014-10-01
    • 2013-02-26
    • 2013-06-19
    • 1970-01-01
    • 2018-03-27
    相关资源
    最近更新 更多