【发布时间】:2023-01-03 15:21:57
【问题描述】:
正如标题所暗示的,我看到一些用户提到.lm.fit() 函数比常规的lm() 具有更快的速度优势,但是当我深入查看帮助中的.lm.fit() 时,它应该是一个更合适的函数,它返回一个列表集代替模型,这让我想到是否仍然可以提取 R 平方、Adj R 平方等组件,最后从中提取 predict()?
以下是示例数据和执行:
test_dat <- data.frame(y = rnorm(780, 20, 10))
for(b in 1:300){
name_var <- paste0("x",b)
test_dat[[name_var]] <- rnorm(780, 0.01 * b, 5)
}
tic()
obj_lm <- lm(y ~ ., data = test_dat)
print(class(obj_lm))
print(summary(obj_lm)$r.squared)
print(summary(obj_lm)$adj.r.squared)
predict(obj_lm)
toc() #approximately 0.4 seconds
tic()
datm <- as.matrix(test_dat)
obj_lm_fit <- .lm.fit(cbind(1,datm[,-1]), datm[,1])
print(class(obj_lm_fit))
toc() #approximately 0.2 seconds
【问题讨论】:
-
不是答案,但真实时间对
.lm.fit更有利,你也在计时as.matrix和cbind。