【问题标题】:Is there a faster lm function有更快的lm函数吗
【发布时间】:2014-10-14 12:01:54
【问题描述】:

我想获得适合 1M 单独数据集的线性回归斜率(data.frame 为 1M * 50 行,数组为 1M * 50)。现在我正在使用lm() 函数,这需要很长时间(大约10 分钟)。

线性回归有更快的函数吗?

【问题讨论】:

  • 你在抱怨十分钟?难以置信。如果 1M 数据集是独立的,则并行计算。
  • 澄清一下,您指的是 1M 行的数据集还是 1M 单独的数据集?如果是后者,也许你应该首先考虑一下你正在做的事情对数据钓鱼的影响。
  • @duffymo 抱歉让您感到困惑。我的数据集约为 1 M * 54。我已经将它们与 16 个内核并行。我知道10分钟不是一个大问题。试着找到一种更快的线性回归方法。
  • @thelatemail 它是 1 M 个单独的数据集。
  • 如果您只担心坡度。看起来您可以直接使用sdcor 计算它。看看这个post。斜率 = r*(sdy/sdx)

标签: r lm


【解决方案1】:

是的,有:

  • R 本身有 lm.fit(),它更简单:没有公式符号,结果集更简单

  • 我们的几个Rcpp 相关包具有fastLm() 实现:RcppArmadillo、RcppEigen、RcppGSL。

我们在许多博客文章和演示文稿中描述了fastLm()。如果你想要最快的方式,不要使用公式接口:解析公式和准备模型矩阵比实际回归需要更多的时间。

也就是说,如果您要在单个向量上回归单个向量,则可以简化此操作,因为不需要矩阵包。

【讨论】:

  • 感谢您的建议。
  • 还有一个speedglm 包,不过不知道它有多快(如果有的话)。
【解决方案2】:

来自speedglmspeedlm 应该这样做,因为它适用于大型数据集。

【讨论】:

    【解决方案3】:

    从 3.1.0 开始有一个.lm.fit() 函数。这个函数应该比lm()lm.fit()快。

    已对其进行了描述,并将其性能与不同的 lm 函数进行了比较 - https://rpubs.com/maechler/fast_lm

    【讨论】:

    • 如果我想使用具有随机效应的模型怎么办?任何快速且能够处理大型数据集的东西? lme4 非常慢,需要大量内存。
    【解决方案4】:

    Rfast 包中的 lmfit 甚至比 .lm.fit 还要快。 唯一的缺点是当设计矩阵没有满秩时它不起作用。

    【讨论】:

      猜你喜欢
      • 2011-11-23
      • 2018-04-22
      • 2022-11-16
      • 1970-01-01
      • 2015-02-22
      • 2015-03-21
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      相关资源
      最近更新 更多