如何在R中合并已生成的16个国家ROC曲线绘图?
合并多国家ROC曲线到单张图的解决方案
错误原因分析
你遇到的object 'roc_au' not found错误,是因为之前的代码仅直接绘制并保存了单国家ROC曲线,没有将每个国家的ROC计算结果(比如performance对象、AUC值)存储下来,导致后续合并时无法调用对应国家的ROC数据。
解决步骤与代码示例
要实现多曲线合并,核心是先收集所有国家的ROC数据,再统一绘制到同一张图中:
存储每个国家的ROC数据
先通过循环遍历所有国家,将每个国家的performance对象和AUC值存入列表,方便后续调用:# 假设你有16个国家的代码列表 countries <- c("au", "us", "uk", ...) # 补充完整你的国家代码 roc_list <- list() # 初始化存储列表 for (country in countries) { # 这里放入你计算当前国家rent.preds和colAUC的代码 # 例如: # rent.preds <- prediction(...) # 根据你的模型生成预测结果 # colAUC <- as.numeric(performance(rent.preds, "auc")@y.values) # 计算ROC曲线的performance对象并存储 perf <- performance(rent.preds, "tpr", "fpr") roc_list[[country]] <- list(perf = perf, auc = colAUC) }绘制合并后的ROC曲线
以第一个国家的曲线为基础,通过add=TRUE参数将其他国家的曲线叠加到同一张图上,最后添加图例和对角线:pdf("combined_roc_curves.pdf") # 绘制第一条曲线作为基础图 plot(roc_list[[1]]$perf, lwd = 2, col = 1, xlab = "False Positives Rate", ylab = "True Positive Rate", main = "Combined ROC Curves for 16 Countries") # 添加参考对角线 abline(a = 0, b = 1, lwd = 3, lty = 3, col = "grey") # 叠加剩余国家的曲线 for (i in 2:length(countries)) { country <- countries[i] plot(roc_list[[country]]$perf, lwd = 2, col = i, add = TRUE) # 关键参数:将曲线添加到已有图中 } # 添加图例,包含国家名称和对应AUC值 legend("bottomright", legend = paste0(toupper(countries), " (AUC=", round(sapply(roc_list, function(x) x$auc), 3), ")"), col = 1:length(countries), lwd = 2, cex = 0.7) dev.off()
关键注意点
- 确保循环中每个国家的
rent.preds和colAUC计算逻辑正确,这是生成ROC曲线的基础 - 必须存储每个国家的
performance对象,否则合并时无法调用对应数据 - 使用
add=TRUE是实现多曲线叠加的核心参数
内容的提问来源于stack exchange,提问作者Hannah
相关产品推荐
相关产品推荐

