2016-12-06 1 views
1

Ich habe Regsubsets verwendet, um nach Modellen zu suchen. Ist es möglich, automatisch alle lm aus der Liste der Parameterauswahl zu erstellen?Holen Sie sich alle Modelle von Sprüngen Regsubsets

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                     

Jetzt würde ich manuell tun model_1 <- lm(y ~ x3) und so weiter. Wie kann dies automatisiert werden, um sie in einer Liste zu haben?

Antwort

3

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.

Verwandte Themen