MENU

【無料プレゼント付き】学会発表・論文投稿に必要な統計を最短で学ぶことができる無料メルマガ

EZR でステップワイズ変数選択を行うときにある変数だけは必ず選択されるようにする方法

ステップワイズ変数選択の際に ある変数だけは残っていてほしい場合の指定方法

>>もう統計で悩むのを終わりにしませんか?


↑1万人以上の医療従事者が購読中

目次

ステップワイズ変数選択を 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

>>もう統計で悩むのを終わりにしませんか?


↑1万人以上の医療従事者が購読中

ステップワイズ変数選択で複数の変数を残したい場合

ステップワイズ変数選択で複数の変数を残したい場合は、プラスでつないで指定する

例えば、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公式マニュアル

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

統計解析が趣味

コメント

コメント一覧 (3件)

  • 早速のお返事まことに有難うございます。
    大変参考になりました。複数の変数を残したい場合には、scopeの引数としてどのように記載するべきかご存知でしたら教えていただけないでしょうか。
    どうぞよろしくお願いします。

  • 複数の変数を残したい場合は、プラスで追加します
    記事を更新しましたので、ご参照ください

  • ありがとうございます! 解決しました!! 今後ともどうぞよろしくお願いします!!

コメントする

目次