r语言ggplot画两条曲线_第五十讲 R语言课堂 ROC曲线

5ac3d5ef9580b59dd5de76e4e50f2020.png

在第四十九讲中,我们为大家介绍了分类预测模型及诊断性试验性能指标的理论知识及相关计算方法。但是,细心的朋友可能会发现,我们在之前的实例中,在选择抑郁评分切点定义自杀高位人群时,我们选择了6,但是6真的是最好的切点吗?如何选择最好的切点呢?我们就需要用到ROC曲线来帮助大家找到最好的诊断切点,用以定义诊断试验/预测模型的最佳状态。

1. ROC曲线

ROC曲线receiver operating characteristics curve,接收器操作特性曲线)是一种坐标图式的分析工具,用于选择最佳的预测模型、舍弃次佳的模型,以及在同一模型中设定最佳阈值切点。

同一模型中每个阈值切点的假阳性率(FPR,1-specificity)和真阳性率(TPR,即敏感度,sensitivity)在座标上画出,即可获得特定模型的ROC曲线。即在每个选定的阈值切点下,都可以计算出一个FPR和敏感度,然后将该FPR(x轴)和敏感度(y轴)绘制在一个向量图中。例如在上一讲的例子中,我们使用切点6计算了其相应的FPR和敏感度。(第四十九讲 R-分类预测模型及诊断性试验性能指标)

比较不同预测模型下,ROC曲线的实际形状不同。

在同一个预测模型下,切点的不同设定对ROC曲线的影响,有一定规律:

  • 当阈值设定为最高时,亦即所有样本都被预测为阴性,没有样本被预测为阳性,此时在假阳性率 FPR = FP / ( FP + TN ) 算式中的 FP = 0,所以 FPR = 0%。同时在真阳性率(TPR,敏感度)算式中, TPR = TP / ( TP + FN ) 算式中的 TP = 0,所以 TPR = 0%

当阈值设定为最高时,必得出ROC座标系左下角的点 (0, 0)。

  • 当阈值设定为最低时,亦即所有样本都被预测为阳性,没有样本被预测为阴性,此时在假阳性率FPR = FP / ( FP + TN ) 算式中的 TN = 0,所以 FPR = 100%。同时在真阳性率 TPR(敏感度) = TP / ( TP + FN ) 算式中的 FN = 0,所以 TPR=100%

当阈值设定为最低时,必得出ROC座标系右上角的点 (1, 1)。

  • 因为TP、FP、TN、FN都是累积次数,TN和FN随着阈值切点调低而减少(或持平),TP和FP随着阈值切点调低而增加(或持平),所以FPR和TPR皆必随着阈值切点调低而增加(或持平)。

随着阈值切点调低,ROC点 往右上(或右/或上)移动,或不动;但绝不会往左下(或左/或下)移动

2. 曲线下面积(AUC)

曲线下面积(Area under the Curve of ROC (AUC ROC))总结了预测模型的整体性能,在比较不同的分类模型时,可以将每个模型的ROC曲线都画出来,比较曲线下面积做为模型优劣的指标。它表示预测模型区分事件与非事件的能力。

对于一个好的模型,ROC曲线应该陡峭地上升,这表明随着概率阈值的降低,真阳性率(y轴)的增长要快于假阳性率(x轴)。

因此,“理想点”是图形的左上角,即假阳性率为零,而真实阳性率为1。虽然这不是很现实,但这仍然意味着AUC越大,预测模型越好。

AUC指标在0.50(随机模型,即随机状态下,例如抛硬币正反面)和1.00之间变化。高于0.80的值表明预测模型预测能力良好。

9122d5da7e9f44df5fe747500332b9f9.png

3. 计算和绘制ROC曲线

使用pROC包可以轻松绘制ROC曲线。

我们依然以上讲中提到的suicide数据集为例。

3.1 导入数据集

(第四十九讲 R-分类预测模型及诊断性试验性能指标)

library(cutpointr)
data("suicide")
summary(suicide)
      age           gender         dsi          suicide  
 Min.   :18.00   female:392   Min.   : 0.0000   no :496  
 1st Qu.:24.00   male  :140   1st Qu.: 0.0000   yes: 36  
 Median :28.00                Median : 0.0000            
 Mean   :34.13                Mean   : 0.9211            
 3rd Qu.:41.25                3rd Qu.: 1.0000            
 Max.   :83.00                Max.   :11.0000       

library(pROC)
res.roc<-roc(suicide$suicide,suicide$dsi)
Setting levels: control = no, case = yes
Setting direction: controls < cases

Call:
roc.default(response = suicide$suicide, predictor = suicide$dsi)

Data: suicide$dsi in 496 controls (suicide$suicide no) < 36 cases (suicide$suicide yes).
Area under the curve: 0.9238
plot.roc(res.roc, print.auc = TRUE)

e5610a68f97cb172dc2581e934518247.png

灰色对角线代表随机模型情况,即AUC = 0.5的情况。

高效能的分类器的ROC会急剧上升到左上角,也就是说,它将正确地识别出很多阳性,而不会将很多阴性归错类为阳性。

在我们的示例中,AUC为0.924,接近最大值(max = 1)。因此,我们的分类器(即预测模型,即抑郁评分)可以被认为是非常好的。当我们在一个测试集(无样本用于模型训练集)中对模型进行测试时,如果AUC > 0.5, 表示该分类器/预测模型优于随机模型。

如果我们想要一个特异度至少为80%的预测模型,那么灵敏度这个时候为多少呢?相应阈值切点又是多少呢?

可以提取如下:

# 提取感兴趣内容
roc.data <- data_frame(
  thresholds = res.roc$thresholds,
  sensitivity = res.roc$sensitivities,
  specificity = res.roc$specificities
)
# 将特异度设置为0.8,显示特异度大于0.8度情况下对敏感度及阈值切点。
roc.data %>% 
filter(specificity >= 0.8)
# A tibble: 11 x 3
   thresholds sensitivity specificity
        <dbl>       <dbl>       <dbl>
 1        1.5      0.889        0.863
 2        2.5      0.806        0.887
 3        3.5      0.778        0.911
 4        4.5      0.556        0.968
 5        5.5      0.444        0.988
 6        6.5      0.194        0.998
 7        7.5      0.111        0.998
 8        8.5      0.0833       0.998
 9        9.5      0.0556       0.998
10       10.5      0.0278       1    
11      Inf        0            1

最高灵敏度和特异性的最佳阈值可以在图中显示。

plot.roc(res.roc, print.auc = TRUE, print.thres = "best")

8c94e99b997be3cbdf74a9ba35f444d7.png

此处,抑郁评分的最佳阈值切点为1.5,这可以使预测模型的特异度达到0.863,敏感度达到0.889。

参考内容:

1. 维基百科:ROC曲线

0c1bfdfa1ee3687c3134e2c00dc257c8.png

优惠详情请点击这篇文章或扫描页面最上方的二维码添加客服咨询:

投必得论文编译:投必得2020年终预存款大优惠!10万现金红包享不停​zhuanlan.zhihu.com
01fc8295f3f8857d38aa67c8a21583b5.png

这里是投必得——全专业顶级论文润色专家,有关于论文润色发表的问题都可以和我讨论,我们下一篇文章再见~

投必得SCI写作神器大集合!

  1. 参加培训写SCI,7000元值得吗?
  2. 有哪些好的科研习惯?
  3. 撰写 SCI 论文时,有什么好用的软件或者技巧吗?
  4. 我有一篇论文写好了,去哪可以找到合适的期刊呢?
  5. sci-hub所有的网址都已经挂掉了,不能用!像我这种每天都要看文献,公司又没有买数据库的该怎么办!?
  6. 怎样有效率地进行外文文献检索?
  7. 该如何学习 R 语言?

如果您觉得我说的还有点意思,请点赞让我感到您的支持,您的支持是我写作最大的动力~
ijournal:高颜值的期刊检索网站,助您快速找到理想目标期刊(weixin小程序也上线了哦)
投必得:全专业中英文论文润色编辑助力您的论文快速发表,点击了解业务详情

04546c78e24750dc39df77910c5e948b.png

专栏传送门:
投必得科研软件安装使用手册;投必得:SCI期刊介绍与选择;投必得,教你写论文;投必得统计分析大讲堂;投必得科研生活解忧杂货店

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值