0

rpart で CART を作成した後、partykit パッケージの as.party 関数を使用して、CART を party オブジェクトに変換します。次のエラーが表示されます。

as.party(tree.hunterpb1)

Error in partysplit(varid = which(rownames(obj$split)[j] == names(mf)),  : 
‘index’ has less than two elements

インデックスは因子に適用されるため、文献から理解したように、因子変数によって行われた分割を参照しているとしか思えません。私のツリーは次のようになります。

ツリー.hunterpb1 n= 354

node), split, n, deviance, yval
  * denotes terminal node

 1) root 354 244402.100 75.45134  
2) hr.11a14>=49.2125 19   3378.322 33.44274 *
3) hr.11a14< 49.2125 335 205592.400 77.83391  
 6) month=April,February,June,March,May 141  58656.390 68.57493 *
 7) month=August,December,January,July,November,October,September 194 126062.800 84.56338  
  14) presion.11a14>=800.925 91  74199.080 81.32755  
    28) month=January,November,October 16   9747.934 63.13394 *
    29) month=August,December,July,September 75  58025.190 85.20885 *
  15) presion.11a14< 800.925 103  50069.100 87.42223 *

トレースバックは、パーティ クラスへの最初のパーティションの変換が正しく行われたが、因子変数に基づく 2 番目の変換が失敗し、上記のエラーが発生したことを示しています。

以前は同様のデータを扱っていた場合、このエラーは発生しませんでした。as.party 関数がインデックスを見つけていないとしか思えません。これを解決する方法についてのアドバイスをいただければ幸いです。

4

1 に答える 1

0

おそらく、問題は次の状況によって引き起こされます。(同様の例を電子メールで送ってくれた Yan Tabachek に感謝します。) に渡されたパーティショニング変数の 1 つがrpart()変数である場合、 での変換ではなく、characterそれが要因であるかのように処理されます。簡単な例として、次の小さなデータ セットを考えてみましょう。rpart()as.party()

d <- data.frame(y = c(1:10, 101:110))
d$x <- rep(c("a", "b"), each = 10)

rpart()木をあてはめると、文字変数が要因として扱われxます。

library("rpart")
(rp <- rpart(y ~ x, data = d))

## n= 20 
## 
## node), split, n, deviance, yval
##       * denotes terminal node
## 
## 1) root 20 50165.0  55.5  
##   2) x=a 10    82.5   5.5 *
##   3) x=b 10    82.5 105.5 *

ただし、as.party()変換は機能しません。

library("partykit")
as.party(rp)

## Error in partysplit(varid = which(rownames(obj$split)[j] == names(mf)),  : 
##   'index' has less than two elements

最適な修正はx、因子変数に変換してツリーを再適合させることです。その後、変換もスムーズに機能します。

d$x <- factor(d$x)
rp <- rpart(y ~ x, data = d)
as.party(rp)

## Model formula:
## y ~ x
## 
## Fitted party:
## [1] root
## |   [2] x in a: 5.500 (n = 10, err = 82.5)
## |   [3] x in b: 105.500 (n = 10, err = 82.5)
## 
## Number of inner nodes:    1
## Number of terminal nodes: 2

partykitそもそも問題を回避するために、R-Forgeの開発版にも修正を加えました。これは、次の CRAN リリース (おそらくリリース日がまだスケジュールされていない 1.0-1) に含まれます。

于 2015-04-01T12:25:09.293 に答える