Rev 6380 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
## Contributed by B.D. Ripley 97/07/17##plotcp <- function(x, minline = TRUE, lty = 3, col = 1,upper = c("size", "splits", "none"), ...){dots <- list(...)if (!inherits(x, "rpart")) stop("Not a legitimate \"rpart\" object")upper <- match.arg(upper)p.rpart <- x$cptableif (ncol(p.rpart) < 5L)stop("'cptable' does not contain cross-validation results")xstd <- p.rpart[, 5L]xerror <- p.rpart[, 4L]nsplit <- p.rpart[, 2L]ns <- seq_along(nsplit)cp0 <- p.rpart[, 1L]cp <- sqrt(cp0 * c(Inf, cp0[-length(cp0)]))if (! "ylim" %in% names(dots))dots$ylim <- c(min(xerror - xstd) - 0.1, max(xerror + xstd) + 0.1)do.call(plot, c(list(ns, xerror, axes = FALSE, xlab = "cp",ylab = "X-val Relative Error", type = "o"), dots))box()axis(2, ...)segments(ns, xerror - xstd, ns, xerror + xstd)axis(1L, at = ns, labels = as.character(signif(cp, 2L)), ...)switch(upper,size = {axis(3L, at = ns, labels = as.character(nsplit + 1), ...)mtext("size of tree", side = 3, line = 3)},splits = {axis(3L, at = ns, labels = as.character(nsplit), ...)mtext("number of splits", side = 3, line = 3)})minpos <- min(seq_along(xerror)[xerror == min(xerror)])if (minline) abline(h = (xerror + xstd)[minpos], lty = lty, col = col)invisible()}