Как мы можем объединить предикторы из двух разных линейных моделей в одну? - PullRequest
5 голосов
/ 14 февраля 2012

Я пытался автоматизировать построение финальной модели.Я хотел бы объединить предикторы из двух отдельных моделей в одну окончательную модель.Я поиграл с update.formula(), но понял, что могу обновить старый вызов lmfit $ на новый, например, update.formula(lmfit$call,lmfitnew$call).здесь мне нужно выбрать переменные из обеих моделей и запустить окончательную

lmfit1 <- lm(y~ x1+x2+x3, data = modelready)
best.ngc_fit <- stepAIC(lmfit1, direction="backward")
best.ngc_fit$call

lm(formula = y~ x2+x3, data = modelready)

lmfit2 <- lm(y ~ a+b+c+d+f, data=fcstmodel)
best.fcst_fit <- stepAIC(lmfit2, direction ="backward")
best.fcst_fit$call

lm(formula = y~ a+c+d+f, data = fcstmodel)

Это то, что я хотел бы иметь в своей окончательной модели

best.full_fit <- lm(y~x2+x3+a+c+d+f, data = fullmodel) 

Я могу сделать это вручнуюбез проблем, но я хотел бы автоматизировать его, чтобы сделать весь процесс менее утомительным.

Любая помощь будет высоко ценится

Ответы [ 2 ]

5 голосов
/ 15 февраля 2012

Если это просто вопрос извлечения компонентов каждой модели и объединения их в новую матрицу проектирования, то должно работать следующее, независимо от того, какой вы использовали stepAIC:

dfrm <- data.frame(y=rnorm(100), replicate(7, rnorm(100)))
lm1 <- lm(y ~ X1+X2+X3, dfrm)
lm2 <- lm(y ~ X5+X7, dfrm)
lm1.fm <- attr(terms(lm1), "term.labels")
lm2.fm <- attr(terms(lm2), "term.labels")
lm3.fm <- as.formula(paste("y ~ ", paste(c(lm1.fm, lm2.fm), collapse= "+")))
lm3 <- lm(lm3.fm, dfrm)

Чтобы исправить идеи, здесь у нас есть

> names(dfrm)
[1] "y"  "X1" "X2" "X3" "X4" "X5" "X6" "X7"
> lm3.fm
y ~ X1 + X2 + X3 + X5 + X7

См. help(terms.object), чтобы получить больше информации о том, что он возвращает.В вашем примере вам нужно заменить lm1 на best.ngc_fit и lm2 на best.fcst_fit.

4 голосов
/ 21 февраля 2012

Для более сложных манипуляций с формулами вы можете использовать Формула пакет.

formula(as.Formula(terms(lm1),formula(Formula(terms(lm2)), lhs=0)), collapse=TRUE)

y ~ X1 + X2 + X3 + (X5 + X7)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...