[R] Export chaid decision tree rules

Achim Zeileis Achim.Zeileis at uibk.ac.at
Sat Jan 3 21:58:26 CET 2015

```On Sat, 3 Jan 2015, David Winsemius wrote:

> On Jan 3, 2015, at 1:21 AM, Rodica Coderie via R-help wrote:
>
>> Hello,
>> Can the decisions tree rules be exported? Along with the probabilities associated with each node?For example, I've created a CHAID decision with a target variable RESPONSE (YES/NO). I have 17 inner nodes with 19 terminal nodes. How which terminal node has the highest probability of YES and which is the probability?
>> An example of a terminal node output is below:clicks_flag in YES: NO (n = 1142, err = 5.3%)
>> Thanks!Rodica
>> 	[[alternative HTML version deleted]]
>
> When posting on the weekends it is particularly important to follow the
> guidelines in the Posting Guide. Many of us who regularly monitor the
> list will ignore questions that do not have library calls to the
> packages needed and code to produce a reproducible example. (And you
> should learn to post in plain text rather than HTML.)

Yes, a reproducible example would have been good.

I assume you are talking about the "CHAID" package from R-Forge. We
haven't got a nice and ready to use function in "partykit" (which "CHAID"
is built upon) but we have an unexported .list.rules.party function
which does a good part of what you want to do.

## package and data
library("CHAID")
ucb <- ucb[rep(1:nrow(ucb), ucb\$Freq), 1:3]

## fit tree
ch <- chaid(Admit ~ Gender + Dept, data = ucb)
plot(ch)
print(ch)

## get rule path
partykit:::.list.rules.party(ch)

And with that information it is not too hard to set something up that is
close to what you want, I think:

format_rules <- function(object, ...) {
ft <- fitted(object)
ns <- tapply(ft[[2]], ft[[1]], length)
pr <- tapply(ft[[2]], ft[[1]], function(y)
min(prop.table(table(y))))
lb <- tapply(ft[[2]], ft[[1]], function(y)
names(sort(table(y), decreasing = TRUE))[1])
rl <- partykit:::.list.rules.party(object)
paste0(rl, ": ", lb, " (n = ", ns, ", ", round(100 * pr, 2), "%)")
}
writeLines(format_rules(ch))

hth,
Z

> --
>
> David Winsemius
> Alameda, CA, USA
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help