質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.77%

分類木分析で”NAs introduced by coercion” エラー発生

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 1,176

kotoraemon

score 19

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で分類木として動かしたいと思っています。 

library(tree)
vercl =read.table("vertebralcolumn.dat",header = TRUE)
vercol =mutate(vercl, class2 = if_else(condition = class=="NO", 
                                       true = "h", false = "u"))

set.seed(123)
n <- nrow(vercol)
n1 <- round(n * 2/3) 
n2 <- n - n1
permutation <- sample(1:n,n)

training <- sort(permutation[1:n1]) 
vercol_train <- vercol[training, ]   #training set  
vercol_test <- vercol[-training, ]   #test set


f2 <- as.formula(paste("class2 ~ ", paste(names(vercol)[1:6], 
                                        collapse = "+"), collapse = NULL))
t2<- tree(f2, data = vercol_train,
         control = tree.control(nobs = 207, minsize = 2, mindev = 0))
t2
plot(t2)
text(t2)


# class2~ でなく class ~ ならば問題なく動く
f1 <- as.formula(paste("class ~ ", paste(names(vercol)[1:6], 
                                          collapse = "+"), collapse = NULL))
t1<- tree(f1, data = vercol_train) 
t1


データは下の通りで、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となるように作りました。二項比較がしたいため) 

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る