2016-05-20 5 views
1

私はいくつかのツリーを印刷していますが、それらは7ページの長さです。私はデータを再調整しなければならず、それらが意味を成すかどうかを確かめるために最も頻度の高いブランチを見る必要があります。異なるクラスタのキャンセル率を特定する必要があります。CHAIDツリーを歩くR - インスタンス数でソートする必要があります

私が必要とするデータが長すぎるとすれば、最大のブランチを持つことです。そして、210個のブランチを手動で調べるのではなく、それらを検証できます。私は木がたくさんあるので、重要な結果を見るためにこれを自動化する必要があります。

例コードに使用する:

library(CHAID) 
updatecars<-mtcars 
updatecars$cyl<-as.factor(updatecars$cyl) 
updatecars$vs<-as.factor(updatecars$vs) 
updatecars$am<-as.factor(updatecars$am) 
updatecars$gear<-as.factor(updatecars$gear) 
plot(carsChaid) 

carsChaid<-chaid(am~ cyl+vs+gear, data=updatecars) 
carsChaid 

このデータを印刷するとき、最初のグループのためのn = 15を参照してください。私はこの値を並べ替えることができるテーブルが必要です。

私が必要とするのは、ツリーからの各グループ内の変数値と数値を含む決定木テーブルです。これは正確にこの答えと同じではありませんWalk a tree それは番号を与えないので私はそれが方向にあると思うので。

できる人の助けを借り、
おかげで、
ジェームズ

答えて

0

これが、修正や改善が示唆されていることが、このworks.Obviously喜んを行うには良い方法があることを確認。

私が特に抱えていた問題は、すべての組み合わせのリストを作成することでした。 expand.gridが3つの要因を超えると、それは機能しなくなります。だから、私は完全なリストを作成するためにそれのループのontopを構築しなければならなかった。

All_canx_rates<-function(Var1,Var2,Var3,Var4,Var5,nametree){ 
    df1<-data.frame("CanxRate"=0,"Num_Canx"=0,"Num_Cust"=0) 
    pars<-as.list(match.call()[-1]) 
    a<-eval(pars$nametree)[,as.character(pars$Var1)] 
    b<-eval(pars$nametree)[,as.character(pars$Var2)] 
    c<-eval(pars$nametree)[,as.character(pars$Var3)] 
    d<-eval(pars$nametree)[,as.character(pars$Var4)] 
    e<-eval(pars$nametree)[,as.character(pars$Var5)] 

    allcombos<-expand.grid(levels(a),levels(b),levels(c)) 
    clean<- allcombos 
    allcombos$Var4<-d[1] 

    for (i in 2:length(levels(d))) { 
    clean$Var4<-levels(d)[i] 
    allcombos<-rbind(allcombos,clean) 
    } 

    #define a forloop 
    for (i in 1:nrow(allcombos)) { 
    #define values 
    f1<-allcombos[i,1] 
    f2<-allcombos[i,2] 
    f3<-allcombos[i,3] 
    f4<-allcombos[i,4] 

    y5<-nrow(nametree[(a %in% f1 & b %in% f2 & c %in% f3 & d %in% f4 & 
         e =='1'),]) 
    y4<-nrow(nametree[(a %in% f1 & b %in% f2 & c %in% f3 & d %in% f4),]) 
    df2<-data.frame("CanxRate"=y5/y4,"Num_Canx"=y5,"Num_Cust"=y4) 
    df1<-rbind(df1, df2) 

    } 
    #endforloop 
    #make the dataframe available for global viewing 
    df1<-df1[-1,] 
    output<<-cbind(allcombos,df1) 
    } 
0
あなたはdata.treeは、ソートgithubのから最新のリリースv0.3.7は、パーティクラスオブジェクトからの変換を持っている木、カスタムプロットなどを歩くようなパーティオブジェクト上で、さらに操作を行うために使用することができます

devtools::install_github("gluc/[email protected]") 
library(data.tree) 
tree <- as.Node(carsChaid) 

tree$fieldsAll 

最後のコマンドは、パーティクラスの変換されたフィールドの名前を示しています

[1] "data"  "fitted"  "nodeinfo" "partyinfo" "split"  "splitlevels" "splitname" "terms"  "splitLevel" 

あなたは、関数によって例えばを並べ替えることができます各ノード上のデータの行:

tree$Sort(attribute = function(node) nrow(node$data), decreasing = TRUE) 

print(tree, 
     "splitname", 
     count = function(node) nrow(node$data), 
     "splitLevel") 

この印刷物、例えば、これ等:

levelName splitname count splitLevel 
1  1   gear 32   
2  ¦--3    17  4, 5 
3  °--2    15   3 
関連する問題