如何使用ggplot为resample类创建一个点图等效图表

时间:2016-09-14 08:43:00

标签: r ggplot2 r-caret

请考虑以下代码:

#Load Data
set.seed(42)
require(mlbench)
data(BostonHousing)
y <- BostonHousing[,14]
X <- BostonHousing[,1:13]

#Use the same CV-folds for each model
require(caret)
myControl <- trainControl(method='cv', number=10, index=createFolds(y, k=10))

#Fit models
model_rpart <- train(X, y, method='rpart', trControl=myControl)
model_ctree <- train(X, y, method='ctree', trControl=myControl)
model_rf <- train(X, y, method='rf', trControl=myControl)

#Plot
resamples <- resamples(list(
rpart=model_rpart,
ctree=model_ctree,
model_rf=model_rf
))

dotplot(resamples, metric='RMSE')

我想创建一个ggplot版本的“dotplot(resamples,metric ='RMSE')”,但是怎么样?

1 个答案:

答案 0 :(得分:2)

您需要的大部分内容都在caret:::dotplot.resamples中,但在此处:

library(reshape2) 
plotData <- melt(resamples$values, id.vars = "Resample")
tmp <- strsplit(as.character(plotData$variable), "~", fixed = TRUE)
plotData$Model <- unlist(lapply(tmp, function(x) x[1]))
plotData$Metric <- unlist(lapply(tmp, function(x) x[2]))
plotData <- subset(plotData, Metric == model_rpart$metric)
plotData$variable <- factor(as.character(plotData$variable))
plotData <- split(plotData, plotData$variable)
results <- lapply(plotData, function(x, cl) {
  ttest <- try(t.test(x$value, conf.level = cl), silent = TRUE)
  if (class(ttest)[1] == "htest") {
    out <- c(ttest$conf.int, ttest$estimate)
    names(out) <- c("LowerLimit", "UpperLimit", "Estimate")
  }
  else out <- rep(NA, 3)
  out
}, cl = 0.95)
results <- as.data.frame(do.call("rbind", results))
tmp <- strsplit(rownames(results), "~", fixed = TRUE)
results$Model <- unlist(lapply(tmp, function(x) x[1]))

ggplot(results, aes(x = Model, y = Estimate)) + 
  geom_point() + 
  geom_errorbar(aes(ymin = LowerLimit, ymax = UpperLimit), width = .1) + 
  xlab(model_rpart$metric)