ステップ関数を使用して、Rのステップワイズ回帰とバックワード回帰の基本的な違いを理解しようとしています。ステップワイズ回帰では、次のコマンドを使用しました
step(lm(mpg~wt+drat+disp+qsec,data=mtcars),direction="both")
上記のコードに対して以下の出力が得られました。
後方変数の選択には、次のコマンドを使用しました
step(lm(mpg~wt+drat+disp+qsec,data=mtcars),direction="backward")
そして以下の出力を後方に取得しました
私が理解しているように、パラメーターが指定されていない場合、Rでパラメーター「upper」と「lower」が指定されていない限り、ステップワイズ選択は逆方向として機能します。ただし、ステップワイズ選択の出力では、 2番目のステップで追加される+ dispがあります。ステップワイズ選択で+ dispを再度追加することによって達成しようとしている関数は何ですか?結果が後方選択と同じ(AIC値とモデル選択値)であるのに、Rが2番目のステップで+ dispを追加するのはなぜですか。 Rは段階的選択でどのように正確に機能していますか?
この関数がRでどのように機能するかを本当に理解したいのですが、よろしくお願いします。
回答
15の可能なlmモデルすべてを調べることで、ステップワイズ回帰がどのように行われているかを理解しやすくなるでしょう。
ここでは、15の組み合わせすべての数式をすばやく生成できます。
library(leaps) tmp<-regsubsets(mpg ~ wt + drat + disp + qsec, data=mtcars, nbest=1000, really.big=T, intercept=F) all.mods <- summary(tmp)[[1]] all.mods <- lapply(1:nrow(all.mods, function(x)as.formula(paste("mpg~", paste(names(which(all.mods[x,])), collapse="+")))) head(all.mods) [[1]] mpg ~ drat <environment: 0x0000000013a678d8> [[2]] mpg ~ qsec <environment: 0x0000000013a6b3b0> [[3]] mpg ~ wt <environment: 0x0000000013a6df28> [[4]] mpg ~ disp <environment: 0x0000000013a70aa0> [[5]] mpg ~ wt + qsec <environment: 0x0000000013a74540> [[6]] mpg ~ drat + disp <environment: 0x0000000013a76f68>
各モデルのAIC値は次のように抽出されます:
all.lm<-lapply(all.mods, lm, mtcars) sapply(all.lm, extractAIC)[2,] [1] 97.98786 111.77605 73.21736 77.39732 63.90843 77.92493 74.15591 79.02978 91.24052 71.35572 [11] 63.89108 65.90826 78.68074 72.97352 65.62733
ステップワイズ回帰に戻りましょう。 lm(mpg〜wt + drat + disp + qsec)のextractAIC値は65.63です(上記のリストのモデル15と同等)。
モデルがdisp(-disp)を削除する場合、lm(mpg〜wt + drat + qsec)は63.891(またはリスト内のモデル11)です。
モデルが削除する場合何も削除しない(なし)場合、AICは65.63のままです
モデルがqsec(-qsec)を削除する場合、lm(mpg〜wt + drat + disp)は65.908(モデル12)です。
など
基本的に、要約では、完全なモデルから1項を段階的に削除する可能性をすべて明らかにし、extractAIC値を昇順でリストして比較します。 AIC値が小さいほど、TRUTHモデルに似ている可能性が高いため、ステップ1で(-disp)モデルを保持します。
このプロセスが再度繰り返されますが、開始点として保持された(-disp)モデルが使用されます。モデルの比較を可能にするために、項は減算(「逆方向」)または減算/加算(「両方」)されます。比較して最も低いAIC値は依然として(-disp)モデルであるため、プロセス停止と結果のモデルが指定されます。
クエリに関して:「+ dispを再度追加することで達成しようとしている関数は何ですか。ステップワイズ選択では?」、この場合、「実際には何もしません。15のモデルすべての中で最良のモデルはモデル11、つまりlm(mpg〜wt + drat + qsec)です。
ただし、解決するために多数の手順を必要とする多数の予測子を含む複雑なモデルでは、最初に削除された用語を追加し直すことが、用語を比較する最も徹底的な方法を提供するために重要です。
このヘルプを期待してください
コメント
- " AIC値が小さいほど、に似ている可能性が高いためです。 TRUTHモデル"は真っ直ぐな偽です。段階的なモデル構築は、真の予測子を拒否するのとほぼ同じように偽の予測子を保持する可能性があります…他の多くの問題の中でも:stats.stackexchange.com/questions/115843/ …
- 明らかに'サリー。そのため、'単一の基準(ステップワイズ回帰など)に基づくモデル選択が少しナイーブである理由です。
- @Alexisは、リンクの回答にある推奨事項を気に入っています。
回答
簡単な回答です。まず、両方の手順で特定のモデルのAICを削減しようとしますが、その方法は異なります。次に、基本的な違いは、後方選択手順では、どのステップでもモデルから変数を破棄できるのに対し、段階的選択では、モデルに変数を追加できることです。
段階的出力について選択すると、一般に、出力にはAICを減らすために注文した代替案が表示されるため、任意のステップの最初の行が最良のオプションです。次に、3行目に+disp
があります。これは、その変数をモデルに追加することが、AICを減らすための3番目に良いオプションになるためです。しかし、明らかに、最善の選択肢は<none>
であるため、何もしないことを意味します。手順は停止し、後方選択と同じ結果が得られます。