Alex
Alex

Reputation: 1994

R: get nodes from root to leaves of a tree model?

I'm using R to make a regression tree model:

 library(party)
 mydata = read.csv(“data.csv”)
 TreeModel = ctree(price ~., data = mydata)

I would like to extract the nodes of the tree from the root to any of the leaves. but I couldn't find any function to do that. For example if the tree is like below: regression tree I want to get the path from root to any leaves. So for the fist leaf from right< i want to get a path like (Koc, AirDecat, OTW, OTW, AirDecay) and for the left most leaf , it should be (Koc, AirDecay).Any hint is really appreciated.

Upvotes: 0

Views: 1351

Answers (1)

Christoph Glur
Christoph Glur

Reputation: 1244

As MrFlick noted, you should provide a reproducible example.

This might get you started on how to find the path of a BinaryTree object of the party package:

library(data.tree)
library(party)

airq <- subset(airquality, !is.na(Ozone))
airct <- ctree(Ozone ~ ., data = airq, 
               controls = ctree_control(maxsurrogate = 3))


CreateNodeFromParty <- function(splitNode) {
  node <- Node$new(splitNode$nodeID,
                   weights = splitNode$weights,
                   criterion = splitNode$criterion,
                   psplit = splitNode$psplit)
  if (!splitNode$terminal) {
    node$AddChildNode( CreateNodeFromParty(splitNode$left) )
    node$AddChildNode( CreateNodeFromParty(splitNode$right) )
  }
  return (node)
}


tree <- CreateNodeFromParty(airct@tree)

tree

This will give you the data.tree structure:

      levelName
1 1            
2  ¦--2        
3  ¦   ¦--3    
4  ¦   °--4    
5  ¦       ¦--5
6  ¦       °--6
7  °--7        
8      ¦--8    
9      °--9  

To find a specific node, do:

tree$FindNode(6)$path

Which will give you:

[1] "1" "2" "4" "6"

Upvotes: 2

Related Questions