Как получить все терминальные узлы - прогноз веса и ответа 'ctree' в r

Вот что я могу использовать, чтобы перечислить вес для всех терминальных узлов: но как я могу добавить некоторый код, чтобы получить прогноз ответа, а также вес по каждому идентификатору терминального узла:

скажу, что я хочу, чтобы мой вывод выглядел так

- Вот ниже, что у меня есть, чтобы получить вес

nodes(airct, unique(where(airct))) 

Спасибо

2 ответа

Решение

Двоичное дерево - это большой объект S4, поэтому иногда бывает трудно извлечь данные.

Но у метода plot для объекта BinaryTree есть дополнительная функция панели функции формы (узла), отображающая конечные узлы. Поэтому, когда вы строите график, вы можете получить всю информацию об этом узле.

здесь я использую функцию заговора, чтобы извлечь информацию и еще лучше я использую gridExtra и пакет для изменения формы конечного узла в виде таблицы

library(party)
library(gridExtra)
set.seed(100)
lls <- data.frame(N = gl(3, 50, labels = c("A", "B", "C")), 
                  a = rnorm(150) + rep(c(1, 0,150)),
                  b = runif(150))
pond= sample(1:5,150,replace=TRUE)
tt <- ctree(formula=N~a+b, data=lls,weights = pond)
output.df <- data.frame()
innerWeights <- function(node){

 dat <- data.frame (x=node$nodeID,
                    y=sum(node$weights),
                    z=paste(round(node$prediction,2),collapse='  '))
  grid.table(dat,
             cols = c('ID','Weights','Prediction'),
             h.even.alpha=1, 
             h.odd.alpha=1,  
             v.even.alpha=0.5, 
             v.odd.alpha=1)
   output.df <<- rbind(output.df,dat)  # note the use of <<-

}

plot(tt, type='simple', terminal_panel = innerWeights)


data
  ID Weights       Prediction
1  4      24  0.42  0.5  0.08
2  5      17 0.06  0.24  0.71
3  6      24    0.08  0  0.92
4  7     388 0.37  0.37  0.26

Вот что я нашел, он отлично работает с немного дополнительной информацией. Но я просто хочу опубликовать это здесь на случай, если кому-то они понадобятся в будущем.

y <- do.call(rbind, nodes(tt, unique(where(tt))))
write.table(y, 'clipboard', sep='\t') 

@agstudy, дай мне знать, что ты думаешь.

Другие вопросы по тегам