R言語

【R言語】関数step・ステップワイズ法

  1. HOME >
  2. R言語 >

【R言語】関数step・ステップワイズ法

スポンサーリンク

今回はR言語でステップワイズ法を実行する方法を紹介します。

AIC(赤池情報量基準)に基づくステップワイズ法の実行方法や実際の解析例をまとめました。

この記事では重回帰分析や一般化線形モデルに対する変数選択の実行方法を紹介します。

重回帰分析や一般化線形モデルの実行方法については、それぞれ以下の記事で紹介しています。

【R言語】関数lmによる線形回帰 単回帰分析・重回帰分析 回帰分析で予測する

R言語の回帰分析の実行方法を紹介していきます。回帰分析の実行方法だけでなく、回帰分析により作ったモデルでテストデータの予測も行っていきます。 実行方法では、回帰分析の結果の見方やその抽出方法を詳しく解 ...

続きを見る

【R言語】一般化線形モデル 関数glmの使いかた

一般化線形モデルを行う方法を解説していきます。 R言語で回帰分析を行う方法については、以下の記事で紹介しています。 一般化線形モデルを用いることで、母分布が正規分布でなくても線形モデルを構築することが ...

続きを見る

この記事で紹介しているプログラミングコードは以下のRスクリプトに保存しています。

関数step

関数stepの使用法やその引数についてまとめました。実行例については、この後で紹介しています。

step(object, scope, scale = 0,
direction = c("both", "backward", "forward"),
trace = 1, keep = NULL, steps = 1000, k = 2, …)
関数stepの引数
object主にlmやglmによって作られるモデルを表すオブジェクト。ステップワイズ法を適用するの一番初めのモデルとして使われる。
scopeステップワイズ法において探索されるモデルの範囲を指定する。
scaleモデル選択においてAIC統計量の定義で用いられるスケール。
direction"both"で変数増減法、"backward"で変数減少法、"forward" で変数増加方を指定できる。デフォルトで"both"。
trace正(>0)の場合、stepを実行中にステップワイズの途中経過がコンソールにプリントされる。さらに大きい数の場合、より詳細な結果がプリントされる。
keep変数選択においてモデルに保持しておきたい変数。
steps最大ステップ数。この数を超えると実行が止まる。
kペナルティー項の自由度の指定に用いられる。

関数stepの使用例

重回帰分析

まず、重回帰分析における関数stepを実行例をみていきます。データセットとしてBostonの住宅価格のデータを用いたいので、次のパッケージMASSをインストールし、ライブラリに追加します。

上記を実行したら、以下のようにBostonの住宅価格のデータフレームが使用可能になります。

早速、住宅価格medvに関する重回帰分析を実行します。次のように、関数lmを用いてmedvをそれ以外の変数で予測します。

上記のようにregressionには重回帰分析の結果が入っており、切片パラメータを合わせると回帰係数が14個もあることが分かります。

重回帰分析の問題点

重回帰分析だけの場合、これらの回帰係数に関する検定\(H_0:\ \beta_i = 0,\ i = 0,\ldots ,13\)を行うと、合計14回も仮説検定を行うことになり、検定の多重性が問題になってきます。

これを回避するために、次のように関数stepを用いて変数選択を実行します。

実行するとコンソール上に上の結果が出力されることが分かります。長くなって分かりにくいですが、Step: AIC = . . .の部分を見るとわかるように2ステップ目のモデルのAICが最小であることが分かります。

次のようにstep.regを関数summaryによって変換し、summaryStep.regを参照すると上でAICが最小だったモデルが選択されていることが確認できます。

また、重回帰分析で関数lmから作られたオブジェクトと同様に、次のように回帰係数や決定係数など結果はリストの要素として格納されています。

以下のようにして、関数cbindを用いて回帰係数、決定係数、修正決定係数をデータフレームに格納しresultTableとし、関数write.csvを用いることで、ステップワイズ法で選択されたモデルの結果をcsvファイルへと出力することができます。

作業ディレクトリを確認すると、次の画像の結果が保存されていることが分かります。

ステップワイズ結果(重回帰分析)

一般化線形モデル

一般化線形モデルに対しても重回帰分析と同様に、ステップワイズ法により変数選択ができます。データセットとしDefaultを用いたいので次のパッケージLSLRをインストールしライブラリに追加します。

Defaultは以下の4つのデータdefaultstudentbalanceincomeから成ります。

一般化線形モデルで紹介したように、1列目のdefaultについてロジスティック回帰分析を行っていきます。まず準備として、defaultの水準"Yes"、"No"をそれぞれ1、0に変換しnumeric型に変換してあげます。

上を実行し終わったら、次のように関数glmを用いてdefaultについてのロジスティック回帰分析を行います。2行目を見ればわかるように、lmのときと同じようにして変数選択できます。

関数summaryglmのオブジェクトに適用すると、ステップワイズ法で選ばれたモデルの回帰係数や決定係数などの結果を得ることができます。

これらの結果をcsvファイルへ出力したい場合は、以下のようにデータフレームに結果を保存しwrite.csvでcsvファイルへと出力します。

ステップワイズ法の途中結果を得たい場合

最後に、ステップワイズ中の途中経過を取得する方法について解説します。

関数stepの引数traceについて

関数stepには引数としてtraceが用意されていますが、どれだけtraceの値を大きくしてもコンソールに表示される途中結果の詳細が増えるだけで、stepによって作られるオブジェクトが途中結果に関する回帰係数などの結果を持つようになるわけではありません。

ステップワイズ中の途中経過を得る方法を探しても具体的な例が無かったため、ここにまとめておきます。

データセットとして、再びつぎのBostonの住宅価格のデータを用います。重回帰分析のときと同様に以下のようにして重回帰分析を実行します

ステップワイズの途中結果を得るために次のように、関数capture.outputを用いてコンソール上にプリントされた結果を文字列のベクトルとして保存します。

次にstepResultsには各ステップのモデルの式(\(Y \sim X_1 + \cdots + X_k\))が保存されているため、各式に対応するインデックスをstartendとして抽出します。

最後に、for文を用いて各ステップのモデル式に関する重回帰分析を繰り返し実行することですべてのステップの結果を保存することが可能です。

作業ディレクトリを確認すると次の画像のような各ステップの重回帰分析の結果が保存されていることが分かります。

ステップワイズ途中結果

まとめ

R言語でステップワイズ法を実行する方法を紹介しました。

重回帰分析や一般化線形モデルで紹介した関数lm、glmで作られたオブジェクトに対し、関数stepを適用することで簡単にステップワイズ法による変数選択が可能です。

スポンサーリンク

  • この記事を書いた人
  • 最新記事

usagi-san

統計学とゲームとかをメインに解説していくよ。 数式とかプログラミングコードにミスがあったり質問があったりする場合はコメントで受け付けます。すぐに対応します。

-R言語
-, , ,