2016-12-06 10 views
1

Я использовал regsubsets для поиска моделей. Можно ли автоматически создать все lm из списка параметров?Получить все модели от прыжков 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                     

Теперь я бы вручную делать model_1 <- lm(y ~ x3) и так далее. Как это можно автоматизировать, чтобы иметь их в списке?

ответ

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) 

и вы получите коэффициенты и матрицу дисперсии-ковариации для всех моделей.