Определите все различные переменные в партийном ctree nodel

Я использую функцию ctree в пакете party R. Я хотел бы идентифицировать все предикторы, которые используются в дереве, чтобы уменьшить размер data.frame, используемый для дальнейшего анализа. Например:

library(ctree)
data(ozone)
myModel<-ctree(Ozone~., data=na.omit(airquality))
plot(myModel)

Я хотел бы, чтобы функция получала myModel и возвращала Temp, Wind и Ozone


person Giorgio Spedicato    schedule 11.02.2015    source источник


Ответы (2)


Вы можете попробовать использовать это:

getUsefulPredictors<-function(x){
  flatTree<-unlist(x@tree)
  pred<-unique(flatTree[grepl("*variableName",names(flatTree))])
  return(pred)
}

Он выравнивает деревья и ищет элементы, в названии которых есть variableName.

Запустите свою модель, она вернет:

getUsefulPredictors(myModel)
#[1] "Temp" "Wind"
person NicE    schedule 11.02.2015

Для полноты: ответ NicE относится к реализации ctree() в пакете party. Если кто-то хочет сделать то же самое на основе новой (и рекомендованной) реализации в пакете partykit, тогда необходима другая функция, потому что внутреннее представление полностью изменилось.

getUsefulPredictors <- function(x) {
  varid <- nodeapply(x, ids = nodeids(x),
    FUN = function(n) split_node(n)$varid)
  varid <- unique(unlist(varid))
  names(data_party(x))[varid]
}

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

library("partykit")
myModel <- ctree(Ozone ~ ., data = na.omit(airquality))
getUsefulPredictors(myModel)    
## [1] "Temp" "Wind"
person Achim Zeileis    schedule 01.04.2015