前提・実現したいこと
約2000名分のデータを使って、ランダムフォレストの結果を部分従属プロットにしたいです。
しかし、partial_dependence関数を使うと以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Error in `[.data.frame`(data, , !apply(data, 2, function(x) all(x == fit$y))) : undefined columns selected
該当のソースコード
R
1#書いたコードをすべて加筆しました 2n <- ncol(alldata) 3ix <- 1:n 4data1 <- lapply(alldata[ix], as.numeric) #alldataが元データの名前です 5data1$SEX <-as.character(data1$SEX) #性別をcharacterにする 6 7data1 <-as.data.frame(data1) 8is.data.frame(data1) 9 10data1$変数A <- rowMeans(data1[,c("A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","A11","A12","A13")],na.rm = T) 11data1$変数B <- rowMeans(data1[,c("B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","B11","B12")],na.rm = T) 12data1$変数Ca <- rowSums(data1[,c("C1","C3","C6","C7","C9","C13","C14")],na.rm = T) 13data1$変数Cb <- rowSums(data1[,c("C2","C4","C11","C12","C17")],na.rm = T) 14data1$変数Da <- rowMeans(data1[,c("D1","D2","D3","D4","D5","D6","D7","D8")],na.rm = T) 15data1$変数Db <- rowMeans(data1[,c("D9","D10","D11","D12","D13","D14","D15")],na.rm = T) 16data1$変数Dc <- rowMeans(data1[,c("D16","D17","D18","D19","D20")],na.rm = T) 17data1$変数Dd <- rowMeans(data1[,c("D21","D22","D23","D24","D25","D26","D27")],na.rm = T) 18data1$変数De <-rowMeans(data1[,c("D28","D29")],na.rm = T) 19 20#クラスタの作成 21library(dplyr) 22ABC_s <- data1 %>% select(変数Da,変数Db,変数Dc,変数Dd,変数De) 23distance <- dist(ABC_s) 24hc <- hclust(distance, method="ward.D2") 25plot(hc) 26cluster <- cutree(hc, k=4) #クラスタ数の指定 27cluster 28cluster <- as.factor(cluster) #Factor型に変更 29data1$cluster <- cluster 30class(data1$cluster) 31 32df <- data1 33df <- mutate(df,cluster_N = if_else(cluster == 3,true = 1,false = 0)) 34data1$cluster_N <- df$cluster_N 35data1$cluster_N <- as.factor(data1$cluster_N) 36 37#最後の行を実行するとエラーが出ます-------------- 38 39library(randomForest) 40set.seed(1) 41df.rows = nrow(data1) 42train.rate = 0.6 43train.index <- sample(df.rows,df.rows * train.rate) 44df.train = data1[train.index,] #訓練データ 45df.test = data1[-train.index,] #テストデータ 46cat("train =",nrow(df.train),"test= ",nrow(df.test)) 47 48#分類モデルの作成 49model.rf <- randomForest(ABC ~ 変数A + 変数B + 変数Ca + 変数Cb, data = df.train) 50#分類モデルの確認 51model.rf 52 53library(edarf) 54pd <- partial_dependence(model.rf,vars = c("変数A","変数B","変数C","変数D"),data = as.data.frame(df.train))
試したこと
①partial_dependenceの引数dataはdata.tableではなく、data.frameでなければならないのでdf.trainをdata.frameにして実行してみましたがエラーがでてしまいます(上記のコードはすでに修正したものです)
②df.trainの行数が列数よりもかなり大きいこと、そして、NAの欄がかなりあることが何か問題を引き起こしている可能性があるのかな…?と思ったのですが調べてもわかりませんでした。すみません…。
③他のデータ(300名ほどのデータ、NAがわずか)で実行するとエラーがでませんでした。
回答1件
あなたの回答
tips
プレビュー