有更快的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 个单独的数据集。 如果您只担心坡度。看起来您可以直接使用sd
和cor
计算它。看看这个post。斜率 = r*(sdy/sdx)
【参考方案1】:
是的,有:
R 本身有 lm.fit()
,它更简单:没有公式符号,结果集更简单
我们的几个Rcpp 相关包具有fastLm()
实现:RcppArmadillo、RcppEigen、RcppGSL。
我们在许多博客文章和演示文稿中描述了fastLm()
。如果你想要最快的方式,不要使用公式接口:解析公式和准备模型矩阵比实际回归需要更多的时间。
也就是说,如果您要在单个向量上回归单个向量,则可以简化此操作,因为不需要矩阵包。
【讨论】:
感谢您的建议。 还有一个speedglm
包,不过不知道它有多快(如果有的话)。【参考方案2】:
来自speedglm
的speedlm
应该这样做,因为它适用于大型数据集。
【讨论】:
【参考方案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语言使用lm函数拟合多元线性回归模型假定预测变量之间有交互作用R语言使用effects包的effect函数查看交互作用对于回归模型预测响应变量的影响
R语言使用lm函数拟合多元线性回归模型假定预测变量之间有交互作用R语言使用effects包的effect函数查看交互作用对于回归模型预测响应变量的影响
R语言使用lm函数拟合多元线性回归模型假定预测变量之间有交互作用(Multiple linear regression with interactions)