Rで分類木分析をしていたのですが、tree()で、 ”NAs introduced by coercion” エラーが発生してしまいます。
verclというデータセットに対して、"DH"、"SL"、"NO"の三種類に分かれている"class"という項目について、三項分類しようとしたものが、t1。
"DH"のとき"u"、"SL","NO"のとき"h"となるclass2という項目を新たに加えたデータセットvercolに対して、"u"と"h"の二項で分類しようとしたものがt2。
t1はうまく分類木が描けたのですが、t2は上記のエラーが出て動きません。
class2を、DHのとき0、SL,NOのとき1となるように作ると動くのですが、分類木ではなく回帰木となってしまい、その後の混合行列等の計算に差しさわりが出るため、u, hで分類木として動かしたいと思っています。
R
1library(tree) 2vercl =read.table("vertebralcolumn.dat",header = TRUE) 3vercol =mutate(vercl, class2 = if_else(condition = class=="NO", 4 true = "h", false = "u")) 5 6set.seed(123) 7n <- nrow(vercol) 8n1 <- round(n * 2/3) 9n2 <- n - n1 10permutation <- sample(1:n,n) 11 12training <- sort(permutation[1:n1]) 13vercol_train <- vercol[training, ] #training set 14vercol_test <- vercol[-training, ] #test set 15 16 17f2 <- as.formula(paste("class2 ~ ", paste(names(vercol)[1:6], 18 collapse = "+"), collapse = NULL)) 19t2<- tree(f2, data = vercol_train, 20 control = tree.control(nobs = 207, minsize = 2, mindev = 0)) 21t2 22plot(t2) 23text(t2) 24 25 26# class2~ でなく class ~ ならば問題なく動く 27f1 <- as.formula(paste("class ~ ", paste(names(vercol)[1:6], 28 collapse = "+"), collapse = NULL)) 29t1<- tree(f1, data = vercol_train) 30t1 31 32
データは下の通りで、310obsあります。
head(vercl)
pelvInc pelvTilt lumbLord SacrSl pelvRad degrS class
1 63.03 22.55 39.61 40.48 98.67 -0.25 DH
2 39.06 10.06 25.02 29.00 114.41 4.56 DH
3 68.83 22.22 50.09 46.61 105.99 -3.53 DH
4 69.30 24.65 44.31 44.64 101.87 11.21 DH
5 49.71 9.65 28.32 40.06 108.17 7.92 DH
6 40.25 13.92 25.12 26.33 130.33 2.23 DH
(class にはDHのほか、SL、NOがあります)
head(vercol)
pelvInc pelvTilt lumbLord SacrSl pelvRad degrS class class2
1 63.03 22.55 39.61 40.48 98.67 -0.25 DH u
2 39.06 10.06 25.02 29.00 114.41 4.56 DH u
3 68.83 22.22 50.09 46.61 105.99 -3.53 DH u
4 69.30 24.65 44.31 44.64 101.87 11.21 DH u
5 49.71 9.65 28.32 40.06 108.17 7.92 DH u
6 40.25 13.92 25.12 26.33 130.33 2.23 DH u
(class2は、DHのときu、SL,NOのときhとなるように作りました。二項比較がしたいため)
あなたの回答
tips
プレビュー