我试图自动化最后一步模型构建。我想将两个独立模型的预测变量组合成一个最终模型。我和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)
我可以手动完成而没有任何问题,但我想自动化它,以使整个过程不那么繁琐。
非常感谢任何帮助
答案 0 :(得分:5)
如果这只是提取每个模型的组件并将它们组合成一个新的设计矩阵,那么无论您使用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
。
答案 1 :(得分:4)
对于公式的更高级操作,您可以使用 Formula 包。
formula(as.Formula(terms(lm1),formula(Formula(terms(lm2)), lhs=0)), collapse=TRUE)
y ~ X1 + X2 + X3 + (X5 + X7)