2012-02-14 9 views
5

私は最終ステップモデルの構築を自動化しようとしていました。 2つの別々のモデルからの予測子を1つの最終モデルに結合したいと思います。私はupdate.formula()で遊んだが、古いlmfit $コールを新しいものに更新することができることを認識した。たとえばupdate.formula(lmfit$call,lmfitnew$call)。ここで私は、私は問題なく、手動でそれを行うことができます両方のモデルから変数を選択し、これは私が私の最終的なモデルを持っているために2つの異なる線形モデルの予測子をどのように組み合わせて1つにすることができますか?

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

を希望するもので、最終的な1

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) 

を実行桜に必要私はプロセス全体をあまり退屈にするために自動化したいと思います。これは、各モデルの成分を抽出し、新しいデザイン行列にそれらを組み合わせただけの問題であれば

すべてのヘルプははるかに

+0

なぜデータを結合して全体モデルを作成してみませんか? x1、x2、x3 = 0と設定すると、a、b、c、d、f> 0であり、逆になる。つまり、変数x1、x2、x3、x4、a、b、c、d、fを含むdata.frameを使用します。 –

+0

Brandon、入力いただきありがとうございます、このモデルはもともとSASで書かれています。モデルが構築される方法は、2つのベストモデルを組み合わせることです。第1位モデルの予測変数は、物価指数(住宅価格指数など)に関連するマクロ経済変数から得られ、第2次モデルからの予測変数は、失業率などの労働指数と関連している。モデルへのデータフローの基本構造を変更する自由はありません。もしそうすれば、これを上級管理職に売ることはできません。私はアメリカの銀行のリーダーのために働いています。私たちがやることの多くは私たちには意味を持たず、一般にもそうです。 – Anand

答えて

4

詳細な操作のために、の式パッケージを使用することができます。

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

y ~ X1 + X2 + X3 + (X5 + X7) 
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) 

は、ここで我々は義和の詳細情報を取得するhelp(terms.object)を参照してください

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

持って、アイデアを修正するにはそれが返されます。あなたの例では、lm1best.ngc_fitlm2と置き換えて、best.fcst_fitとする必要があります。

+0

クリストフ、ありがとうございました。それは非常にうまくいって、lm()によって作成されたオブジェクトを深く掘り下げて学習するのに役立ちました。あなたのウェブサイトを訪れ、Rクラッシュクラスを提供する素晴らしい教師であることを理解しました。オンラインクラスがあれば教えてください。もう一度ありがとうございます。 – Anand

+0

これを聞いてうれしいことは、Rオブジェクトを深く理解するのに役立ちます。私はRのオンラインヘルプを見て、関数から返されたものを確認するだけでなく、Rプロンプトとして単純な 'str(your.object)'を発行することをお勧めします。私のコースにあなたのコメントをお寄せいただきありがとうございます(最近のスライドはこちらです)、これはフランス語で書かれています;他の良い/良いチュートリアルがたくさんあります。グーグルでちょっとグーグル:-) – chl

関連する問題