我们如何将两种不同线性模型的预测变量合二为一?

时间:2012-02-14 19:39:12

标签: r statistics

我试图自动化最后一步模型构建。我想将两个独立模型的预测变量组合成一个最终模型。我和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 个答案:

答案 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)