StatsBeginner: 初学者の統計学習ノート

統計学およびR、Pythonでのプログラミングの勉強の過程をメモっていくノート。たまにMacの話題。

ステップワイズ法で特定の変数を残したい場合

私が住んでいる町では、「ステップワイズ法で、ただし特定の変数は残るようにした上で、最良のモデルを選択してほしい」と言われ、手法の妥当性を説明するのが難しいので気が進まないものの、やらざるを得ないことがあります。
ここにやり方が載っていて、


以下、ロジスティック回帰の例でやってみます。

library(dplyr)
d <- iris 

# 従属変数を2カテゴリにして、値を0,1に変換しておきます(しなくてもいいけど)
d <- d %>%
  mutate(Species = as.numeric(Species)-2) %>% 
  filter(Species != -1)

# まず、すべての変数を入れたロジスティック回帰
full.model <- glm(Species ~., family = binomial(logit), data = d, )
summary(full.model)

# AIC最小となるベストのモデルを探索
best.model.1 <- step(full.model)
summary(best.model.1)

# 特定の変数を残したい場合は、scopeの中でlowerに最小限モデルを設定する
#  (今回は結果的にフルモデルと同じものが採択される)
best.model.2 <- step(full.model, scope=list(lower=Species ~ Sepal.Length, upper=full.model))
summary(best.model.2)