有更快的lm函数吗

Posted

技术标签:

【中文标题】有更快的lm函数吗【英文标题】:Is there a faster lm function 【发布时间】: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) 【参考方案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 还要快。 唯一的缺点是当设计矩阵没有满秩时它不起作用。

【讨论】:

以上是关于有更快的lm函数吗的主要内容,如果未能解决你的问题,请参考以下文章

线性模型函数 lm() 错误:外部函数调用中的 NA/NaN/Inf (arg 1)

R语言optim函数进行函数优化实战(和lm函数进行对比)

R语言使用lm函数拟合多元线性回归模型假定预测变量之间有交互作用R语言使用effects包的effect函数查看交互作用对于回归模型预测响应变量的影响

R语言使用lm函数拟合多元线性回归模型假定预测变量之间有交互作用R语言使用effects包的effect函数查看交互作用对于回归模型预测响应变量的影响

R语言使用lm函数拟合多元线性回归模型假定预测变量之间有交互作用(Multiple linear regression with interactions)

为啥内置的 lm 函数在 R 中这么慢?