Ich weiß nicht, warum Sie eine Liste aller Modelle wollen. summary
und coef
Methoden sollten Ihnen gut dienen. Aber ich werde Ihre Frage zuerst aus einem reinen Programmieraspekt beantworten und dann zu diesem Punkt zurückkehren.
Ein einfacher Weg, dies zu tun ist über reformulate
:
reformulate(termlabels, response = NULL, intercept = TRUE)
Hier ist, wie:
## 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)
}
Es besteht keine Notwendigkeit für eine *apply
Lösung. lm
ist teuer, so for
Schleife hat überhaupt keinen Overhead.
Ein schneller Weg ist, eine Modellmatrix, die alle Kovariaten einzurichten, und ihre Spalten auswählen dynamisch (assign
Attribute der Modellmatrix verwenden, insbesondere dann, wenn Sie Faktor Variablen). Die Montage erfolgt dann über .lm.fit
. Sie werden jedoch Schwierigkeiten haben, Modellzusammenfassung/Vorhersage mit der Rohausgabe von .lm.fit
zu erstellen, es sei denn, Sie sind ein linearer Modellguru, aber ich denke, summary(leaps)
sollten Sie verschiedene nützliche Statistiken bereits zurückgeben.
leaps:::coef.regsubsets
Funktion ist eine Äquivalenz dieser .lm.fit
Route. Einfach tun:
coef(leaps, 1:dim(X)[1], TRUE)
und Sie erhalten Koeffizienten und Varianz-Kovarianz-Matrix für alle Modelle.