ステップワイズ変数選択の際に ある変数だけは残っていてほしい場合の指定方法
- ステップワイズ変数選択を EZR で実行する方法
- ステップワイズ変数選択で ある変数だけは残しておきたい場合
- ステップワイズ変数選択で複数の変数を残したい場合
- ステップワイズ変数選択ではなく、減少法や増加法で行いたい場合
- まとめ
- 参考サイト
- おすすめ書籍
ステップワイズ変数選択を EZR で実行する方法
ステップワイズ変数選択を EZR で実行するには、データを読み込んだ後、例えば重回帰のメニューからステップワイズを選択する
実行すると、ステップワイズ変数選択は、以下のように実施される
> res <- stepwise(RegModel.1, direction="backward/forward", criterion="AIC") Direction: backward/forward Criterion: AIC Start: AIC=-147.32 LogCD34perBW ~ age + gender + Group + WBC.entry + Plt.entry + ApheresisVolume Df Sum of Sq RSS AIC - Plt.entry 1 0.00864 7.3280 -149.24 - gender 1 0.03892 7.3583 -148.95 - age 1 0.12298 7.4423 -148.14 <none> 7.3194 -147.32 - Group 1 0.25607 7.5754 -146.88 - ApheresisVolume 1 0.49402 7.8134 -144.69 - WBC.entry 1 0.80924 8.1286 -141.88 Step: AIC=-149.24 LogCD34perBW ~ age + gender + Group + WBC.entry + ApheresisVolume Df Sum of Sq RSS AIC - gender 1 0.03840 7.3664 -150.87 - age 1 0.11755 7.4455 -150.11 <none> 7.3280 -149.24 - Group 1 0.25043 7.5784 -148.85 + Plt.entry 1 0.00864 7.3194 -147.32 - ApheresisVolume 1 0.48539 7.8134 -146.69 - WBC.entry 1 0.96837 8.2964 -142.43 Step: AIC=-150.87 LogCD34perBW ~ age + Group + WBC.entry + ApheresisVolume Df Sum of Sq RSS AIC - age 1 0.12085 7.4872 -151.71 <none> 7.3664 -150.87 - Group 1 0.23941 7.6058 -150.60 + gender 1 0.03840 7.3280 -149.24 + Plt.entry 1 0.00811 7.3583 -148.95 - ApheresisVolume 1 0.66779 8.0342 -146.71 - WBC.entry 1 0.99045 8.3568 -143.91 Step: AIC=-151.71 LogCD34perBW ~ Group + WBC.entry + ApheresisVolume Df Sum of Sq RSS AIC - Group 1 0.19479 7.6820 -151.89 <none> 7.4872 -151.71 + age 1 0.12085 7.3664 -150.87 + gender 1 0.04170 7.4455 -150.11 + Plt.entry 1 0.00283 7.4844 -149.74 - ApheresisVolume 1 0.60062 8.0879 -148.23 - WBC.entry 1 1.08102 8.5683 -144.14 Step: AIC=-151.89 LogCD34perBW ~ WBC.entry + ApheresisVolume Df Sum of Sq RSS AIC <none> 7.6820 -151.89 + Group 1 0.19479 7.4872 -151.71 + age 1 0.07623 7.6058 -150.60 + gender 1 0.03050 7.6515 -150.17 + Plt.entry 1 0.00072 7.6813 -149.90 - ApheresisVolume 1 0.60501 8.2870 -148.51 - WBC.entry 1 0.99257 8.6746 -145.26 > summary(res) Call: lm(formula = LogCD34perBW ~ WBC.entry + ApheresisVolume, data = TempDF) Residuals: Min 1Q Median 3Q Max -0.76985 -0.22692 0.03478 0.20694 0.66902 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.90751397 0.32874553 -2.761 0.00741 ** WBC.entry 0.00009510 0.00003208 2.964 0.00418 ** ApheresisVolume 0.05761960 0.02489841 2.314 0.02369 * --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.3361 on 68 degrees of freedom Multiple R-squared: 0.1725, Adjusted R-squared: 0.1482 F-statistic: 7.09 on 2 and 68 DF, p-value: 0.001597
ステップワイズ変数選択で ある変数だけは残しておきたい場合
このとき、Groupは脱落してしまっているが、本当は Group はどうしても説明変数として残しておきたかったとする
その時はどうするかというと、step() という関数を使う
R スクリプト窓に以下のように書いて実行する
step(RegModel.1, scope=list(lower=~Group))
RegModel.1 は、EZR が自動で名付けた重回帰モデルオブジェクト
scope が、ステップワイズの適応範囲で、list() の中に、lower= で、チルダ ( ~ ) のあとに残したい変数名を書き入れる
このようにすると、下記のように Group を最後まで残せる
> step(RegModel.1, scope=list(lower=~Group)) Start: AIC=-147.32 LogCD34perBW ~ age + gender + Group + WBC.entry + Plt.entry + ApheresisVolume Df Sum of Sq RSS AIC - Plt.entry 1 0.00864 7.3280 -149.24 - gender 1 0.03892 7.3583 -148.95 - age 1 0.12298 7.4423 -148.14 <none> 7.3194 -147.32 - ApheresisVolume 1 0.49402 7.8134 -144.69 - WBC.entry 1 0.80924 8.1286 -141.88 Step: AIC=-149.24 LogCD34perBW ~ age + gender + Group + WBC.entry + ApheresisVolume Df Sum of Sq RSS AIC - gender 1 0.03840 7.3664 -150.87 - age 1 0.11755 7.4455 -150.11 <none> 7.3280 -149.24 - ApheresisVolume 1 0.48539 7.8134 -146.69 - WBC.entry 1 0.96837 8.2964 -142.43 Step: AIC=-150.87 LogCD34perBW ~ age + Group + WBC.entry + ApheresisVolume Df Sum of Sq RSS AIC - age 1 0.12085 7.4872 -151.71 <none> 7.3664 -150.87 - ApheresisVolume 1 0.66779 8.0342 -146.71 - WBC.entry 1 0.99045 8.3568 -143.91 Step: AIC=-151.71 LogCD34perBW ~ Group + WBC.entry + ApheresisVolume Df Sum of Sq RSS AIC <none> 7.4872 -151.71 - ApheresisVolume 1 0.60062 8.0879 -148.23 - WBC.entry 1 1.08102 8.5683 -144.14 Call: lm(formula = LogCD34perBW ~ Group + WBC.entry + ApheresisVolume, data = TempDF) Coefficients: (Intercept) Group WBC.entry ApheresisVolume -1.09045844 0.10552746 0.00009989 0.05741134
ステップワイズ変数選択で複数の変数を残したい場合
ステップワイズ変数選択で複数の変数を残したい場合は、プラスでつないで指定する
例えば、lower = ~Group + age + gender などとする
実行結果は以下の通り
> step(RegModel.1, scope=list(lower=~Group+age+gender)) Start: AIC=-147.32 LogCD34perBW ~ age + gender + Group + WBC.entry + Plt.entry + ApheresisVolume Df Sum of Sq RSS AIC - Plt.entry 1 0.00864 7.3280 -149.24 <none> 7.3194 -147.32 - ApheresisVolume 1 0.49402 7.8134 -144.69 - WBC.entry 1 0.80924 8.1286 -141.88 Step: AIC=-149.24 LogCD34perBW ~ age + gender + Group + WBC.entry + ApheresisVolume Df Sum of Sq RSS AIC <none> 7.3280 -149.24 - ApheresisVolume 1 0.48539 7.8134 -146.69 - WBC.entry 1 0.96837 8.2964 -142.43 Call: lm(formula = LogCD34perBW ~ age + gender + Group + WBC.entry + ApheresisVolume, data = GCSF_CD34) Coefficients: (Intercept) age gender[T.M] Group WBC.entry -0.96183059 -0.00308517 0.05025930 0.12130618 0.00009524 ApheresisVolume 0.05569276
ステップワイズ変数選択ではなく、減少法や増加法で行いたい場合
step() 関数の引数に direction= というのがあるので、これを使う
減少法の場合は、direction="backward" とする
増加法の場合は、direction="forward" とする
まとめ
ステップワイズ変数選択のときに、ある変数だけはどうしても残したいという場合の指定の仕方を解説した
モデルオブジェクトを作成した後、step() の引数として、scope=list(lower=~) のチルダの右に残したい変数を書き入れて step() を実行する
複数の変数を残したい場合はプラス記号で付け足す
参考サイト
[R] for parameter 'keep' in 'step'
r - Force step() to keep a certain valuable - Stack Overflow
おすすめ書籍
EZR公式マニュアル