Rの段階的回帰-仕組み


15

step関数を使用して、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」が指定されない限り、ステップワイズ選択は逆方向として機能します。しかし、ステップワイズ選択の出力には、+ dispが追加されます2番目のステップ。ステップワイズ選択で再度+ dispを追加して達成しようとしている機能は何ですか?結果が後方選択と同じ(AIC値とモデル選択値)なのに、Rが2番目のステップで+ dispを追加するのはなぜですか。段階的な選択でRは正確にどのように機能しますか?

この関数がRでどのように機能するかを本当に理解したいと思います。助けてくれてありがとう!

回答:


16

おそらく、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を追加することで達成しようとしている関数は何ですか?」、この場合、それは実際には何もしません。cosは15モデルすべてでモデル11です。 、すなわちlm(mpg〜wt + drat + qsec)。

ただし、解決するために多数のステップを必要とする多数の予測変数を持つ複雑なモデルでは、最初に削除された用語を追加し直すことは、用語を比較する最も包括的な方法を提供するために重要です。

これが何らかの形で役立つことを願っています。


6
「AICの値が小さいほどTRUTHモデルに似ている可能性が高いため」というのは誤りです。ステップワイズモデルの構築は、他の多くの問題の中でも、真の予測子を拒否するのと同様に、誤った予測子を保持する可能性がほぼ同じです。 stats.stackexchange.com/questions/115843/...
アレクシス

2
明らかにそれは嘘です。そのため、単一の基準(ステップワイズ回帰など)に基づいたモデル選択がややナイーブです。
アダムクエック

@Alexisは、リンクの回答であなたの推奨事項を気に入っています。
アダムクエック

3

ここで簡単な応答。まず、両方の手順は、特定のモデルのAICを削減しようとしますが、異なる方法で削減します。次に、基本的な違いは、後方選択手順では、任意のステップでモデルから変数のみを破棄できるのに対し、ステップワイズ選択では、モデルに変数を追加できることです。

段階的選択の出力については、一般に、出力にはAICを削減するための代替品が注文されているため、任意のステップの最初の行が最適なオプションです。次に、+disp3番目の行にがあります。これは、その変数をモデルに追加することが、AICを減らすための3番目に最適なオプションになるためです。しかし、明らかに、最良の選択肢はであり<none>、これは何もしないことを意味し、手順は停止し、後方選択の場合と同じ結果が得られます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.