我不知道你爲什麼要一個所有型號的列表。 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)
你會得到所有模型的係數和方差 - 協方差矩陣。