MENU

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

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

↑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をコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

統計解析が趣味

コメント

コメント一覧 (3件)

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

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

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

コメントする

目次