比 R 中的 lm() 更快的函数
Faster functions than lm() in R
我正在尝试 运行 R 中的基本回归模型。以前,我总是使用 lm()
函数而没有任何问题。但是,我的数据框现在对于这个函数和我的电脑来说太大了。在 运行 在我的数据集上使用 lm()
函数 30 分钟后没有看到任何进展,我停止了该函数并使 RStudio 崩溃。我使用的电脑有 24GB 内存。
我的回归模型是:
lm(y~var1+var2+var3+var4, data = df)
我尝试 运行 lm() 函数的数据是:
n=100000
,有 4 个自变量(一个 numeric
,三个 factor
)且呈正态分布。
我发现使用 glm4()
函数(来自 MatrixModels 包)要快得多,并且在我的情况下不会使 R 崩溃。但是,此函数在调用时不会生成摘要 table:
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))
调用系数才有效,但是,我更喜欢完整的摘要 table。
head(coef(fit))
我也看到了这个话题:
Is there a faster lm function,其中讨论了函数 lm.fit()
和 .lm.fit()
,尽管这些函数中的语法和输入(矩阵)与其他函数不同。 speedglm
包 returns 中的函数 speedglm
在我的例子中是一个错误。大多数关于替代 lm()
和 glm()
函数的主题也已过时。
目前在大型数据集上 运行 lm()
的最佳方法是什么?
显然,运行 对约 100,000 个观测值的数据集进行回归应该不是问题。
在主post上收到有用的评论后,我发现回归输入中使用的自变量之一被编码为字符,通过使用以下命令查找数据类型数据框中的每一列 (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 更改为因子变量后,回归确实在几秒钟内 运行s。
我正在尝试 运行 R 中的基本回归模型。以前,我总是使用 lm()
函数而没有任何问题。但是,我的数据框现在对于这个函数和我的电脑来说太大了。在 运行 在我的数据集上使用 lm()
函数 30 分钟后没有看到任何进展,我停止了该函数并使 RStudio 崩溃。我使用的电脑有 24GB 内存。
我的回归模型是:
lm(y~var1+var2+var3+var4, data = df)
我尝试 运行 lm() 函数的数据是:
n=100000
,有 4 个自变量(一个 numeric
,三个 factor
)且呈正态分布。
我发现使用 glm4()
函数(来自 MatrixModels 包)要快得多,并且在我的情况下不会使 R 崩溃。但是,此函数在调用时不会生成摘要 table:
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))
调用系数才有效,但是,我更喜欢完整的摘要 table。
head(coef(fit))
我也看到了这个话题:
Is there a faster lm function,其中讨论了函数 lm.fit()
和 .lm.fit()
,尽管这些函数中的语法和输入(矩阵)与其他函数不同。 speedglm
包 returns 中的函数 speedglm
在我的例子中是一个错误。大多数关于替代 lm()
和 glm()
函数的主题也已过时。
目前在大型数据集上 运行 lm()
的最佳方法是什么?
显然,运行 对约 100,000 个观测值的数据集进行回归应该不是问题。
在主post上收到有用的评论后,我发现回归输入中使用的自变量之一被编码为字符,通过使用以下命令查找数据类型数据框中的每一列 (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 更改为因子变量后,回归确实在几秒钟内 运行s。