You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中合并已生成的16个国家ROC曲线绘图?

合并多国家ROC曲线到单张图的解决方案

错误原因分析

你遇到的object 'roc_au' not found错误,是因为之前的代码仅直接绘制并保存了单国家ROC曲线,没有将每个国家的ROC计算结果(比如performance对象、AUC值)存储下来,导致后续合并时无法调用对应国家的ROC数据。

解决步骤与代码示例

要实现多曲线合并,核心是先收集所有国家的ROC数据,再统一绘制到同一张图中:

  1. 存储每个国家的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)
    }
    
  2. 绘制合并后的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:02:29