R中比lm()更快的函数



我正在尝试在R中运行一个基本的回归模型。以前,我总是使用lm()函数,没有任何问题。然而,我的数据帧现在太大了,无法使用此功能和我的计算机。在我的数据集上运行lm()函数30分钟后,没有看到任何进展,我停止了该函数,它导致RStudio崩溃。我正在使用的计算机有24GB的RAM。

我的回归模型是:

lm(y~var1+var2+var3+var4, data = df)

我试图运行lm((函数的数据是:n=100000,有4个自变量(一个numeric,三个factor(,正态分布。

我发现使用glm4()函数(来自MatrixModels包(要快得多,而且在我的情况下不会使R崩溃。但是,此函数在调用时不会生成摘要表:

library(MatrixModels)
fit <- glm4(y~var1+var2+var3+var4, data = df, sparse = TRUE, family = gaussian)
summary(fit)
Length    Class     Mode 
1 glpModel       S4

只有使用head(coef(fit))调用系数才有效,不过,我更喜欢完整的汇总表。

head(coef(fit))

我也看到了这个话题:是否有一个更快的lm函数,其中讨论了函数lm.fit().lm.fit(),尽管这些函数中的语法和输入(矩阵(与其他函数不同。在我的情况下,speedglm包中的函数speedglm返回一个错误。关于lm()glm()函数的替代方案的大多数主题也已经过时。

目前在大型数据集上运行lm()的最佳方式是什么?

显然,在约100000个观测值的数据集上运行回归应该不是问题。

在收到主帖子上有用的评论后,我发现回归输入中使用的一个自变量被编码为字符,通过使用以下命令来查找数据帧(df(中每一列的数据类型:

str(df)
$ var1           : chr  "x1" "x2" "x1" "x1"
$ var2           : Factor w/ 2 levels "factor1" "factor2": 1 1 1 0
$ var3           : Factor w/ 2 levels "factorx" "factory": 0 1 1 0
$ var4           : num 1 8 3 2

将var1更改为因子变量:

df$var1 <- as.factor(df$var1)

将var1更改为因子变量后,回归确实会在几秒钟内运行。

相关内容

最新更新