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

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

新規登録して質問してみよう
ただいま回答率
85.31%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

1回答

1789閲覧

R言語でCHAIDを行いたい

munemasa

総合スコア3

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2022/11/08 15:47

前提

R言語初心者です.
R言語を使って決定木アルゴリズムのCHAIDを利用したいのですが,うまくいきません.

発生している問題・エラーメッセージ

> treeModel <- chaid(data = Data)# CHAIDを実行 Error in step1internal(response, xvars[[i]], weights, indices[[i]], ctrl) : is.factor(x) は TRUE ではありません

該当のソースコード

R

1library(CHAID) # ライブラリを読み込み 2Data <- read.csv("E:/masato/study/lab/experiment/SQL/resurt/emp_type_pop.csv", header=T, stringsAsFactors=TRUE) # データを読み込み 3cls <- read.csv("E:/masato/study/lab/experiment/cpp/cls/cls001_class.csv", header=T, stringsAsFactors=TRUE) # クラスを読み込み 4cls <- cls[,colnames(cls) != "X"] 5#Data$city_code <- as.character(Data$city_code) 6cls$cls <- as.factor(cls$cls) 7Data <- merge(Data,cls,by="city_code") 8Data <- Data[,colnames(Data) != "city_code"] 9 10for (i in 1:ncol(Data)) { # ループの始まり。データの列数を数えて同じ回数繰り返す 11 if (class(Data[,i]) == "numeric") { # 条件分岐の始まり 12 Data[,i] <- droplevels(cut(Data[,i], breaks = 5,include.lowest = TRUE))# 5分割する場合。量的データは、質的データに変換する。 13 } # if文の処理の終わり 14} # ループの終わり 15treeModel <- chaid(cls ~ ., data = Data)# CHAIDを実行 16plot(treeModel) # グラフにする。

補足情報(FW/ツールのバージョンなど)

Dataの中身はこのようになっています.

str(Data)

'data.frame': 499 obs. of 5 variables:
$ unemp : int 67749 49825 100513 95749 69178 48446 23085 12335 99148 21399 ...
$ general : int 27805 22223 40515 40775 28988 19127 8089 5426 43399 8277 ...
$ short : int 13410 9497 17173 17330 12980 7995 3492 2335 15816 3368 ...
$ temporary: int 587 424 757 694 509 381 147 101 695 126 ...
$ cls : Factor w/ 5 levels "0","1","2","3",..: 5 5 5 5 5 5 5 4 5 5 ...

CHAIDのインストールはこのように行いました.
install.packages("CHAID",repos="http://R-Forge.R-project.org")

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

解決しました.
CHAIDを使う際には,説明変数もFactor型にする必要があるのですが,そこの処理がうまく行っていなかったようです.

R

1if (class(Data[,i]) == "numeric") { # 条件分岐の始まり

から

R

1if (class(Data[,i]) == "integer") { # 条件分岐の始まり

と変更したらうまくいきました.
どうやら説明変数の型がnumericではなくintegerだったのが問題だったようです.

投稿2022/11/10 10:40

munemasa

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問