请考虑以下代码:
#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')”,但是怎么样?
答案 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)