首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中比lm()更快的函数

在R中比lm()更快的函数
EN

Stack Overflow用户
提问于 2022-03-30 19:23:03
回答 1查看 189关注 0票数 0

我试图在R中运行一个基本的回归模型,以前,我一直使用lm()函数,没有任何问题。但是,对于这个函数和我的计算机,我的数据帧现在太大了。在我的数据集上运行lm()函数30分钟而没有看到任何进展之后,我停止了该函数并使其崩溃了RStudio。我使用的计算机有24 am内存。

我的回归模型是:

代码语言:javascript
复制
lm(y~var1+var2+var3+var4, data = df)

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

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

代码语言:javascript
复制
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))调用系数才能工作,但我更喜欢完整的汇总表。

代码语言:javascript
复制
head(coef(fit))

我还看到了这个主题:Is there a faster lm function,其中讨论了函数lm.fit().lm.fit(),尽管这些函数中的语法和输入(矩阵)与其他函数不同。在我的示例中,来自speedglm包的函数speedglm返回一个错误。关于lm()glm()函数的替代方案的大多数主题也已经过时。

当前在大型数据集中运行lm()的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-01 10:18:50

显然,在10万个观测数据集上进行回归不应该是个问题。

在收到关于主帖子的有用评论之后,我发现回归输入中使用的一个自变量被编码为字符,方法是使用以下命令查找dataframe (Df)中每一列的数据类型:

代码语言:javascript
复制
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更改为因子变量:

代码语言:javascript
复制
df$var1 <- as.factor(df$var1)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71683011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档