Keyword: ステップワイズ, 変数選択, 線形回帰
概要
本サンプルはステップワイズ回帰分析を行うサンプルプログラムです。 本サンプルは以下に示される13個の観測値とそれぞれ4個の説明変数についてステップワイズ変数選択による回帰分析を行い、フィッティングされた回帰モデルの切片及び説明変数の係数の推定値と標準誤差、R2統計量、そして残差の平均平方を出力します。
※本サンプルはnAG Toolbox for MATLAB®が提供する関数 g02ef() のExampleコードです。実行にはMATLAB®本体(他社製品)とnAG Toolbox for MATLAB®が必要です。
本サンプル及び関数の詳細情報は g02ef のマニュアルページをご参照ください。
Mファイル g02ef_monfun.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
function [user] = g02ef_monfun(flag, var, val, user) switch flag case 'C' fprintf('\nVariable %d aliased\n', var); case 'S' fprintf('\nStarting Stepwise Selection\n'); case 'F' fprintf('\nForward Selection\n'); case 'V' fprintf('Variable %d Variance ratio = %12.3f\n', var, val); case 'A' fprintf('\nAdding variable %d to model\n', var); case 'B' fprintf('\nBackward Selection\n'); case 'D' fprintf('\nDropping variable %d from model\n', var); case 'K' fprintf('\nKeeping all current variables\n'); case 'X' fprintf('\nFinished Stepwise Selection\n'); end;
- このMファイルでは関数"g02ef_monfun"を定義しています。この関数はflagの値により、該当する文字列や変数の値を出力します。
入力データ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
function [user] = g02ef_monfun(flag, var, val, user) switch flag case 'C' fprintf('\nVariable %d aliased\n', var); case 'S' fprintf('\nStarting Stepwise Selection\n'); case 'F' fprintf('\nForward Selection\n'); case 'V' fprintf('Variable %d Variance ratio = %12.3f\n', var, val); case 'A' fprintf('\nAdding variable %d to model\n', var); case 'B' fprintf('\nBackward Selection\n'); case 'D' fprintf('\nDropping variable %d from model\n', var); case 'K' fprintf('\nKeeping all current variables\n'); case 'X' fprintf('\nFinished Stepwise Selection\n'); end; n = int32(13); wmean = [7.461538461538462; 48.15384615384615; 11.76923076923077; 30; 95.42307692307693]; c = [415.2307692307692; 251.0769230769231; 2905.692307692308; -372.6153846153845; -166.5384615384615; 492.3076923076923; -290; -3041; 37.99999999999986; 3362; 775.9615384615385; 2292.953846153846; -618.2307692307694; -2481.699999999999; 2715.763076923076]; sw = 13; isx = [int32(1);1;1;1]; monlev = int32(1); [isxOut, b, se, rsq, rms, df, user, ifail] = ... g02ef(n, wmean, c, sw, isx, monlev, 'g02ef_monfun')
- n に観測値の数を指定しています。
- wmean は計画行列の平均を指定しています。
- c は計画行列の列で圧縮された上三角分散共分散行列を指定しています。
- sw はc の計算の際に重みを使用する場合は重みの合計を指定します。そうでない場合は観測値の数を指定します。
- isx は説明変数がステップワイズ変数選択を実行するのに使用されるかどうかを指定しています。
- monlev はモデルの選択プロセスを観察するのにサブ関数がユーザにより提供される場合は"1"を指定します。
- 最後に本関数を呼び出す構文を指定しています。
出力結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
Starting Stepwise Selection Forward Selection Variable 1 Variance ratio = 12.603 Variable 2 Variance ratio = 21.961 Variable 3 Variance ratio = 4.403 Variable 4 Variance ratio = 22.799 Adding variable 4 to model Backward Selection Variable 4 Variance ratio = 22.799 Keeping all current variables Forward Selection Variable 1 Variance ratio = 108.224 Variable 2 Variance ratio = 0.172 Variable 3 Variance ratio = 40.295 Adding variable 1 to model Backward Selection Variable 1 Variance ratio = 108.224 Variable 4 Variance ratio = 159.295 Keeping all current variables Forward Selection Variable 2 Variance ratio = 5.026 Variable 3 Variance ratio = 4.236 Adding variable 2 to model Backward Selection Variable 1 Variance ratio = 154.008 Variable 2 Variance ratio = 5.026 Variable 4 Variance ratio = 1.863 Dropping variable 4 from model Forward Selection Variable 3 Variance ratio = 1.832 Variable 4 Variance ratio = 1.863 Finished Stepwise Selection isxOut = 1 1 0 0 b = 52.5773 1.4683 0.6623 0 0 se = 2.2943 0.1213 0.0459 0 0 rsq = 0.9787 rms = 5.7904 df = 10 user = 0 ifail = 0
- 1~46行目はステップワイズ変数選択による説明変数の選択(増減)とその係数の分散比が出力されています。
- isxOutはステップワイズ変数選択により説明変数1と説明変数2が選択されたことを示しています。
- b の53行目はフィッティングされた回帰モデルの切片の推定値を示し、54~55行目は説明変数の係数の推定値を示しています。
- se は上記の推定値の標準誤差を示しています。
- rsq はフィッティングされた回帰モデルのR2統計量を示しています。
- rms はフィッティングされた回帰モデルの残差の平均平方を示しています。
- df は残差の平方和の自由度を示しています。
- user は関数を呼び出すuser(MATLABオブジェクト)を示しています。
- ifail は関数がエラーを検知しなければ"0"を出力します。