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

Ana*_*and 5 statistics r

我试图自动化最后一步模型构建.我想将两个独立模型的预测变量组合成一个最终模型.我玩过,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)
Run Code Online (Sandbox Code Playgroud)

这是我想在最终模型中使用的内容

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

我可以手动完成而没有任何问题,但我想自动化它,以使整个过程不那么繁琐.

任何帮助都感激不尽

chl*_*chl 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)
Run Code Online (Sandbox Code Playgroud)

为了解决这些想法,我们在这里

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

请参阅help(terms.object)以获取有关其返回内容的更多信息.随着你的榜样,你就需要更换lm1best.ngc_fitlm2best.fcst_fit.


Woj*_*ala 4

对于公式的更高级操作,您可以使用Formula包。

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

y ~ X1 + X2 + X3 + (X5 + X7)
Run Code Online (Sandbox Code Playgroud)