我使用regsubsets搜索模型。是否可以从参数选择列表中自动创建所有lm
?
library(leaps)
leaps<-regsubsets(y ~ x1 + x2 + x3, data, nbest=1, method="exhaustive")
summary(leaps)$which
(Intercept) x1 x2 x3
1 TRUE FALSE FALSE TRUE
2 TRUE FALSE TRUE TRUE
3 TRUE TRUE TRUE TRUE
现在我会手动执行model_1 <- lm(y ~ x3)
等等。如何自动将它们列入清单?
答案 0 :(得分:3)
我不知道为什么要列出所有型号的列表。 summary
和coef
方法可以为您提供良好的服务。但我将首先从纯编程方面回答你的问题,然后回到这一点。
一种简单的方法是通过reformulate
:
reformulate(termlabels, response = NULL, intercept = TRUE)
以下是:
## you are masking `leaps` and `data` function!!
leaps <- regsubsets(y ~ x1 + x2 + x3, data, nbest = 1, method = "exhaustive")
X <- summary(leaps)$which
xvars <- dimnames(X)[[2]][-1] ## column names (all covariates except intercept)
responsevar <- "y" ## name of response
lst <- vector("list", dim(X)[1]) ## set up an empty model list
## loop through all rows / model specifications
for (i in 1:dim(X)[1]) {
id <- X[i, ]
form <- reformulate(xvars[which(id[-1])], responsevar, id[1])
lst[[i]] <- lm(form, data)
}
无需*apply
解决方案。 lm
代价很高,因此for
循环根本没有开销。
更快的方法是设置包含所有协变量的模型矩阵,并动态选择其列(使用模型矩阵的assign
属性;尤其是当您有因子变量时)。然后通过.lm.fit
进行模型拟合。但是,除非您是线性模型大师,否则您将难以使用.lm.fit
的原始输出生成模型摘要/预测,但我认为summary(leaps)
应该会返回各种有用的统计信息。
leaps:::coef.regsubsets
函数是此.lm.fit
路由的等效项。只需:
coef(leaps, 1:dim(X)[1], TRUE)
您将获得所有模型的系数和方差 - 协方差矩阵。