ステップワイズ変数選択の際に ある変数だけは残っていてほしい場合の指定方法
ステップワイズ変数選択を 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公式マニュアル
コメント
コメント一覧 (3件)
早速のお返事まことに有難うございます。
大変参考になりました。複数の変数を残したい場合には、scopeの引数としてどのように記載するべきかご存知でしたら教えていただけないでしょうか。
どうぞよろしくお願いします。
複数の変数を残したい場合は、プラスで追加します
記事を更新しましたので、ご参照ください
ありがとうございます! 解決しました!! 今後ともどうぞよろしくお願いします!!