【R语言篇】pROC,ggroc绘制ROC曲线

主要目标:

1. 绘制ROC曲线

2. 计算ACU及置信区间

3. 找到最佳截断值


Code:

# 安装并加载包
library(pROC)
library(ggplot2)
# 创建模拟数据
set.seed(123) # 确保结果的可重复性
n <- 500 # 每组的样本数量
# 非糖尿病患者血糖水平(数据无实际意义)
non_diabetic_glucose <- rnorm(n, mean = 100, sd = 15)
# 糖尿病患者血糖水平(数据无实际意义)
diabetic_glucose <- rnorm(n, mean = 130, sd = 20)
# 创建血糖水平和标签
glucose_levels <- c(non_diabetic_glucose, diabetic_glucose)
diabetes_status <- c(rep(0, n), rep(1, n)) # 0代表非糖尿病,1代表糖尿病

# 创建ROC对象
roc_obj <- roc(diabetes_status, glucose_levels,smooth=F) # smooth可为T/F

# 绘制ROC曲线,计算AUC及其置信区间
plot(roc_obj,legacy.axes = TRUE,thresholds="best", # 基于约登指数选择roc曲线最佳阈值点
     print.thres="best")
auc_value <- auc(roc_obj) # 0.8786
auc_ci <- ci.auc(roc_obj) # 0.8575-0.8997 

# 用ggroc绘制
ggroc(roc_obj,legacy.axes = T,color="#B2533E",linewidth=0.8)+
  annotate(geom = "segment", x = 0, y = 0, xend =1, yend = 1,
           linetype="dashed",color="#186F65")+
  annotate("text",x=0.8,y=0.3,label="AUC = 0.879")+
  labs(x="1-Specificity",y="Sensitivity")+
  theme_bw()+
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())


当smooth = T

roc_obj <- roc(diabetes_status, glucose_levels,smooth=T) # smooth可为T/F
auc_value <- auc(roc_obj)
# 用ggroc绘制
ggroc(roc_obj,legacy.axes = T,color="#B2533E",linewidth=0.8)+
  annotate(geom = "segment", x = 0, y = 0, xend =1, yend = 1,
           linetype="dashed",color="#186F65")+
  annotate("text",x=0.8,y=0.3,label="AUC = 0.879")+
  labs(x="1-Specificity",y="Sensitivity")+
  theme_bw()+
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())

### 使用 pROCggroc 绘制回归模型的 ROC 曲线 为了在R中使用`pROC`和`ggroc`包绘制回归模型的ROC曲线,首先需要安装并加载这两个必要的库。值得注意的是,通常情况下,ROC曲线用于评估分类模型而非直接应用于回归模型上;然而,在某些场景下可以通过设定阈值将连续变量转换成二元类别来进行分析[^1]。 下面展示了一个具体的例子,假设有一个糖尿病数据集,并希望通过血糖水平预测患者是否有糖尿病(即通过设定某个血糖浓度作为临界点)。这里先创建一个简单的线性回归模型来估计血糖水平,再基于此建立二分类标签进而绘制ROC图: ```r # 安装所需软件包 (如果尚未安装的话) install.packages("pROC") install.packages("ggplot2") # 加载所需的库 library(pROC) library(ggplot2) # 假设 df 是包含 'glucose' 血糖测量值以及 'diabetes' 是否患有糖尿病(0/1)的数据框 set.seed(123456789) # 设置随机种子以便结果可重复 df <- data.frame(glucose=rnorm(n=100, mean=100, sd=20), diabetes=sample(c(0,1), size=100, replace=TRUE)) # 构建简单线性回归模型以预测血糖水平 model <- lm(glucose ~ . ,data=df) # 预测概率得分 predicted_probabilities <- predict(model,type="response") # 将预测的概率转化为二分决策边界处的结果,默认选择均值作为切割点 threshold <- mean(df$glucose[df$diabetes==1]) binary_predictions <- as.numeric(predicted_probabilities >= threshold)-1 # 计算ROC对象 roc_obj <- roc(df$diabetes,binary_predictions) # 利用ggroc函数画出图形 ggroc(roc_obj)+theme_minimal() ``` 上述代码片段展示了如何利用给定的数据集构建一个基本框架,实际应用时应根据具体情况进行调整优化。例如,可能需要更复杂的预处理步骤、特征工程或是采用其他更适合于特定问题类型的机器学习方法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值