データの読み込み
こちら(https://ides.hatenablog.com/entry/2024/06/21/235127)で使った心臓病のデータを使用する。
library(dplyr)
url <- "https://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/processed.cleveland.data"
column_names <- c("age", "sex", "cp", "trestbps", "chol", "fbs", "restecg", "thalach",
"exang", "oldpeak", "slope", "ca", "thal", "num")
heart_data <- read.csv(url, header = FALSE, col.names = column_names, na.strings = "?")
heart_data <- heart_data %>%
mutate(class = ifelse(num > 0, 1, 0)) %>% # num > 0 を心臓病ありとする
select(-num) %>% # 使用しない変数を除去
na.omit() # 欠損値を除去
Forward Stability
library(ModelPath)
# Forward Stabilityの実行
logit_fs <- full.select.gen(myframe = heart_data,
resp.name = 'class', depth = 3, r = 100,
model = "glm", fun.args =list(family = "binomial"),
condense = FALSE)
print(logit_fs)
build.tree(logit_fs) # グラフのプロット
結果。
[,1] [,2] [,3] [1,] "fbs" "chol" "restecg" [2,] "fbs" "chol" "trestbps" [3,] "fbs" "chol" "age" [4,] "fbs" "restecg" "chol" [5,] "fbs" "restecg" "trestbps" [6,] "fbs" "age" "trestbps" [7,] "fbs" "age" "chol" [8,] "fbs" "age" "restecg" [9,] "chol" "fbs" "restecg" [10,] "chol" "fbs" "trestbps" [11,] "chol" "restecg" "fbs" [12,] "chol" "restecg" "trestbps" [13,] "chol" "restecg" "age"

Model Path Selection (MPS)
logit_mps <- full.select.gen(myframe = heart_data,
resp.name = 'class', depth = 3, r = 100,
model = "glm", fun.args =list(family = "binomial"),
condense = TRUE)
print(logit_mps)
build.tree(logit_mps) # グラフのプロット
結果。
[,1] [,2] [,3] [1,] "fbs" "chol" "restecg" [2,] "fbs" "chol" "trestbps" [3,] "fbs" "chol" "age" [4,] "fbs" "restecg" "trestbps" [5,] "fbs" "age" "restecg" [6,] "fbs" "age" "trestbps" [7,] "chol" "restecg" "age" [8,] "chol" "trestbps" "restecg" [9,] "chol" "trestbps" "age"

ソースコード(https://github.com/nkissel/MPS/blob/main/kisselmentch2021/applications.R)をみるとbinomialの指定はmodel = "glm", fun.args = list(family = binomial())となっている。今回はmodel = "glm", fun.args =list(family = "binomial")を使ったがどちらでも走るようではある。argementの記法としてはlist(family = "binomial")の方が使われることが多いと思うが、どちらでも走るのでどうでもよいことかもしれない。