
ステップワイズ法は、統計的な基準(主にAIC)に基づいて、変数を自動的に追加または削除し、最適な変数の組み合わせを探索する手法です。
予測モデルの精度を高めるために「どの変数(特徴量)を使うか」を決定する際に有用ですし。Exploratoryの標準の機能では、ステップワイズ法はサポートされていないため、「ノート」機能にてRパッケージであるMASSを使うことで、ステップワイズ法による変数選択を実行できます。
ステップワイズ法には主に3つのアプローチがあります。今回使用するRスクリプトは「両方向(Both)」を採用しています。
まず、ステップワイズ法を実行するためのパッケージをインストールします。
プロジェクトメニューから「Rパッケージの管理」を選択します。

Rパッケージの管理のダイアログが表示されるため、パッケージをインストールをクリックしてから「MASS」パッケージをインストールしてください。

レポートのプラスボタンから「ノートを作成」を選択します。

ノートのウィンドウが開けたら、左上のプラスボタンから「Rコード」ボタンをクリックします。

Rスクリプトを記述するためのコードブロックが追加されました。

以下のRスクリプトを使用します。
library(MASS) # stepAIC関数のため
# データセットの読み込み
data(従業員データ)
# 最大モデル(全変数を含むモデル)の定義
full.model <- lm(給料 ~ ., data = 従業員データ)
# 最小モデル(インターセプトのみのモデル)の定義
null.model <- lm(給料 ~ 1, data = 従業員データ)
# ステップワイズ法によるモデル選択(前向き選択、後退削除、両方向選択が可能)
# direction = “both” は両方向選択(前向き選択と後退削除の組み合わせ)
step.model <- stepAIC(null.model, scope = list(lower = null.model, upper = full.model), direction = “both”, trace = 0)
# 最適なモデルの要約
summary(step.model)
このRスクリプトを実行すると、最終的に選ばれたモデルのサマリー(係数、P値、決定係数など)が表示されます。
Call:
lm(formula = 給料 ~ 職位 + 職種 + 勤続年数 + 教育分野,
data = 従業員データ)
Residuals:
Min 1Q Median 3Q Max
-3842.9 -680.4 -1.4 660.5 4244.5
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -24.231 205.510 -0.118 0.906156
職位 2770.404 66.897 41.413 < 2e-16 ***
職種マネージャー 4120.067 179.364 22.970 < 2e-16 ***
職種ラボ技術者 -589.197 137.949 -4.271 2.07e-05 ***
職種リサーチサイエンティスト -493.202 137.062 -3.598 0.000331 ***
職種リサーチディレクター 4027.325 179.575 22.427 < 2e-16 ***
職種人事 -302.437 219.961 -1.375 0.169356
職種営業幹部 -85.282 124.543 -0.685 0.493601
職種営業担当 -663.596 177.870 -3.731 0.000198 ***
職種製造ディレクター -109.317 135.826 -0.805 0.421049
勤続年数 43.609 6.261 6.965 4.96e-12 ***
教育分野マーケティング 120.506 163.598 0.737 0.461485
教育分野ライフサイエンス 86.670 132.646 0.653 0.513609
教育分野人事 128.264 288.996 0.444 0.657235
教育分野医療 80.312 135.095 0.594 0.552278
教育分野技術系 171.836 158.894 1.081 0.279677
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1125 on 1454 degrees of freedom
Multiple R-squared: 0.9435, Adjusted R-squared: 0.9429
F-statistic: 1618 on 15 and 1454 DF, p-value: < 2.2e-16
上記のサンプルコードを自分のデータに適用する際は、以下の箇所を変更してください。
変更箇所:
lm()関数のdataパラメータ
# 例:データフレーム名が「従業員データ」の場合
full.model <- lm(給料 ~ ., data = 従業員データ)
null.model <- lm(給料 ~ 1, data = 従業員データ)
# 例:データフレーム名が「売上データ」の場合
full.model <- lm(売上 ~ ., data = 売上データ)
null.model <- lm(売上 ~ 1, data = 売上データ)
変更箇所:
lm()関数の式の左辺(チルダ~の左側)
# 例:目的変数が「給料」の場合
full.model <- lm(給料 ~ ., data = 従業員データ)
null.model <- lm(給料 ~ 1, data = 従業員データ)
# 例:目的変数が「売上」の場合
full.model <- lm(売上 ~ ., data = 売上データ)
null.model <- lm(売上 ~ 1, data = 売上データ)
変更箇所:
stepAIC()関数のtraceパラメータ
# 選択過程を詳細に表示
trace = 1
# 選択過程を表示しない(結果のみ)
trace = 0
ステップワイズ法を実行した
summary()の結果には以下の情報が含まれます。
Call:
lm(formula = 給料 ~ 職位 + 職種 + 勤続年数 + 教育分野,
data = 従業員データ)
Residuals:
Min 1Q Median 3Q Max
-3842.9 -680.4 -1.4 660.5 4244.5
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -24.231 205.510 -0.118 0.906156
職位 2770.404 66.897 41.413 < 2e-16 ***
職種マネージャー 4120.067 179.364 22.970 < 2e-16 ***
職種ラボ技術者 -589.197 137.949 -4.271 2.07e-05 ***
職種リサーチサイエンティスト -493.202 137.062 -3.598 0.000331 ***
職種リサーチディレクター 4027.325 179.575 22.427 < 2e-16 ***
職種人事 -302.437 219.961 -1.375 0.169356
職種営業幹部 -85.282 124.543 -0.685 0.493601
職種営業担当 -663.596 177.870 -3.731 0.000198 ***
職種製造ディレクター -109.317 135.826 -0.805 0.421049
勤続年数 43.609 6.261 6.965 4.96e-12 ***
教育分野マーケティング 120.506 163.598 0.737 0.461485
教育分野ライフサイエンス 86.670 132.646 0.653 0.513609
教育分野人事 128.264 288.996 0.444 0.657235
教育分野医療 80.312 135.095 0.594 0.552278
教育分野技術系 171.836 158.894 1.081 0.279677
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1125 on 1454 degrees of freedom
Multiple R-squared: 0.9435, Adjusted R-squared: 0.9429
F-statistic: 1618 on 15 and 1454 DF, p-value: < 2.2e-16
このCall: lm(formula = 給料 ~ 職位 + 職種 + 勤続年数 + 教育分野, data = 従業員データ)
の部分がステップワイズ法を使ってAIC(赤池情報量基準)が最小になる最適な変数だと言えます。
MASSパッケージがインストールされていないステップワイズ法は、統計的な基準(AIC)に基づいて予測モデルに含める変数を自動的に選択する手法です。ExploratoryのUIには直接的なステップワイズ法のメニューはありませんが、ノート機能でRのMASSパッケージを使用することで実行が可能です。
この方法により、Exploratory上で最適な変数選択を自動的に行うことが可能です。