Я не знаю, зачем вам нужен список всех моделей. 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)
и вы получите коэффициенты и матрицу дисперсии-ковариации для всех моделей.