Topic 16. 临床预测模型之接收者操作特征曲线 (ROC)

您所在的位置:网站首页 roc曲线特异度太低 Topic 16. 临床预测模型之接收者操作特征曲线 (ROC)

Topic 16. 临床预测模型之接收者操作特征曲线 (ROC)

2023-03-09 15:19| 来源: 网络整理| 查看: 265

点击关注,桓峰基因

桓峰基因 生物信息分析,SCI文章撰写及生物信息基础知识学习:R语言学习,perl基础编程,linux系统命令,Python遇见更好的你 67篇原创内容 --> 公众号

全网总结最全的 ROC 绘制方法,总有一款适合您!前言

ROC(receiver operating characteristic curve)接收者操作特征曲线,是由二战中的电子工程师和雷达工程师发明用来侦测战场上敌军载具(飞机、船舰)的指标,属于信号检测理论。ROC曲线的横坐标是伪阳性率(也叫假正类率,False Positive Rate),纵坐标是真阳性率(真正类率,True Positive Rate),相应的还有真阴性率(真负类率,True Negative Rate)和伪阴性率(假负类率,False Negative Rate)。这四类指标的计算方法如下:

(1)伪阳性率(FPR):判定为正例却不是真正例的概率,即真负例中判为正例的概率

(2)真阳性率(TPR):判定为正例也是真正例的概率,即真正例中判为正例的概率(也即正例召回率)

(3)伪阴性率(FNR):判定为负例却不是真负例的概率,即真正例中判为负例的概率。

(4)真阴性率(TNR):判定为负例也是真负例的概率,即真负例中判为负例的概率。

原理

ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。该曲线最早应用于雷达信号检测领域,用于区分信号与噪声。后来人们将其用于评价模型的预测能力,ROC曲线是基于混淆矩阵得出的。一个二分类模型的阈值可能设定为高或低,每种阈值的设定会得出不同的 FPR 和 TPR ,将同一模型每个阈值的 (FPR, TPR) 坐标都画在 ROC 空间里,就成为特定模型的ROC曲线。ROC曲线横坐标为假正率(FPR),纵坐标为真正率(TPR)。

主要作用

1.ROC曲线能很容易的查出任意阈值对学习器的泛化性能影响。

2.有助于选择最佳的阈值。ROC曲线越靠近左上角,模型的准确性就越高。最靠近左上角的ROC曲线上的点是分类错误最少的最好阈值,其假正例和假反例总数最少。

3.可以对不同的学习器比较性能。将各个学习器的ROC曲线绘制到同一坐标中,直观地鉴别优劣,靠近左上角的ROC曲所代表的学习器准确性最高。

优点

该方法简单、直观、通过图示可观察分析学习器的准确性,并可用肉眼作出判断。ROC曲线将真正例率和假正例率以图示方法结合在一起,可准确反映某种学习器真正例率和假正例率的关系,是检测准确性的综合代表。ROC曲线不固定阈值,允许中间状态的存在,利于使用者结合专业知识,权衡漏诊与误诊的影响,选择一个更加的阈值作为诊断参考值。AUC(Area Under Curve)被定义为ROC曲线下的面积。我们往往使用AUC值作为模型的评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。其中,ROC曲线全称为受试者工作特征曲线 (receiver operating characteristic curve),它是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(敏感性)为纵坐标,假阳性率(1-特异性)为横坐标绘制的曲线。

AUC就是衡量学习器优劣的一种性能指标。从定义可知,AUC可通过对ROC曲线下各部分的面积求和而得.AUC就是曲线下面积,在比较不同的分类模型时,可以将每个模型的ROC曲线都画出来,比较曲线下面积做为模型优劣的指标。ROC 曲线下方的面积(Area under the Curve),其意义是:(1)因为是在1x1的方格里求面积,AUC必在0~1之间。

(2)假设阈值以上是阳性,以下是阴性;

(3)若随机抽取一个阳性样本和一个阴性样本,分类器正确判断阳性样本的值高于阴性样本的概率 = AUC 。

(4)简单说:AUC值越大的分类器,正确率越高。

从AUC 判断分类器(预测模型)优劣的标准:

AUC = 1,是完美分类器。

AUC = [0.85, 0.95], 效果很好

AUC = [0.7, 0.85], 效果一般

AUC = [0.5, 0.7],效果较低,但用于预测股票已经很不错了

AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。

AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

如果两条ROC曲线没有相交,我们可以根据哪条曲线最靠近左上角哪条曲线代表的学习器性能就最好。但是,实际任务中,情况很复杂,如果两条ROC曲线发生了交叉,则很难一般性地断言谁优谁劣。在很多实际应用中,我们往往希望把学习器性能分出个高低来。在此引入AUC面积。在进行学习器的比较时,若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者;若两个学习器的ROC曲线发生交叉,则难以一般性的断言两者孰优孰劣。此时如果一定要进行比较,则比较合理的判断依据是比较ROC曲线下的面积,即AUC(Area Under ROC Curve)。

实例解析

这期我们总结了几种实现方法,方便大家选择性使用,但是最终目的是一样,实现最后的结果也是一致的。

1. 软件安装并加载

这里介绍几个R软件包的实现方法,安装并加载这些软件包,如下:

if (!require(survivalROC)) { install.packages("survivalROC")}if (!require(pROC)) { install.packages("pROC")}if (!require(ROCR)) { install.packages("ROCR")}## Warning: 程辑包'ROCR'是用R版本4.1.3 来建造的if (!require(AUC)) { install.packages("AUC")}## Warning: 程辑包'AUC'是用R版本4.1.3 来建造的if (!require(timeROC)) { install.packages("timeROC")}## Warning: 程辑包'timeROC'是用R版本4.1.3 来建造的if (!require(plotROC)) { install.packages("plotROC")}## Warning: 程辑包'plotROC'是用R版本4.1.3 来建造的

library(survivalROC)library(pROC)library(ROCR)library(AUC)library(timeROC)library(plotROC)library(survival)

2. 数据读取

我们选择Mayo PBC 数据集带有生存信息,在 survivalROC 软件包中,如下:

FormatA data frame with 312 observations and 4 variables: time (event time/censoring time), censor (censoring indicator), mayoscore4, mayoscore5. The two scores are derived from 4 and 5 covariates respectively.

读取数据,如下:

library(survivalROC)data(mayo)str(mayo)## 'data.frame': 312 obs. of 4 variables:## $ time : int 41 179 334 400 130 223 51 549 216 859 ...## $ censor : int 1 1 1 1 1 1 1 1 1 1 ...## $ mayoscore5: num 11.25 10.14 10.1 10.19 9.77 ...## $ mayoscore4: num 10.63 10.19 9.42 9.57 9.04 ...head(mayo)## time censor mayoscore5 mayoscore4## 1 41 1 11.251850 10.629450## 2 179 1 10.136070 10.185220## 3 334 1 10.095740 9.422995## 4 400 1 10.189150 9.567799## 5 130 1 9.770148 9.039419## 6 223 1 9.226429 9.0333883. 绘制AUC曲线

这里我们选择五种方式绘制AUC曲线,每种方式略有不同,但是其结果应该是一致的。

1.survivalROC{survivalROC}

SurvivalROC包绘制时间依赖的ROC曲线.假设我们有删失的生存数据与基线marker值,我们希望看到marker如何预测数据集中的受试者的存活时间。特别是,假设我们有几天的生存时间,我们想看看标记如何预测一年的存活(predict.time=365)。该功能roc.km.calc()返回感兴趣的时间点的唯一标记值、TP(真阳性)、FP(假阳性)、对应于感兴趣时间点(predict.time)和AUC(ROC)曲线下面积的Kaplan-Meier生存估计。survivalROC返回值说明如下:

cut.values:由于计算TP和FP的marker值 TP: 根据cutoff 判断的TRUE postive 真阳性 FP: 根据cutoff判断的假阳性 predict.time: 感兴趣的时间截点:可以为5年,3年等等 Survival: kaplan-Meier法的预估生存时间 AUC: Area under ROC,在时间截点的曲线下面积

根据返回值我们可以计算cutoff阈值,ROC的最佳阈值(cutoff)一般来说,对于一个biomarker或者简单的说诊断指标/试剂,我们使用ROC曲线计算出AUC值后,还会根据ROC曲线的最佳阈值来确定其灵敏度和特异度,有时在研究中,还会用于KM曲线的分类指标确定阈值的方法很多(可参考:ROC Curve或者One ROC Curve and Cutoff Analysis),一般会用最常见的约登指数(Youden index),即敏感度+特异性-1;有时也会考虑用其他确定阈值的方法,比如Minimum ROC distance, Misclassification Cost Term等等(参考:ROC)

对于上述timeROC的结果,如3年ROC曲线的约登指数(因为TP代表的是True Positive fraction,即sensitivity;而FP代表的是False Positive fraction,即1-specificity),通过换算之后即为即sensitivity-specificity取最大值的那个mayoscore4作为最佳阈值(cutoff)为5.756277

library(RColorBrewer)rocCol=brewer.pal(8,"Set1")aucText=c()

roc=survivalROC(Stime=mayo$time, ##生存时间 status=mayo$censor, ## 终止事件 marker = mayo$mayoscore4, ## risk score predict.time =1068, ## 预测时间截点 method="KM")#span = 0.25*nobs^(-0.20))##span,NNE法的namda)roc$AUC## [1] 0.8561212

plot(roc$FP, roc$TP, type="l", xlim=c(0,1), ylim=c(0,1),col=rocCol[3], xlab="False positive rate", ylab="True positive rate", lwd = 2, cex.main=1, cex.lab=1.2, cex.axis=1.2, font=1.2, main=paste0("Mayo,n=",nrow(mayo)))

roc=survivalROC(Stime=mayo$time, status=mayo$censor, marker = mayo$mayoscore4, predict.time =1780, method="KM")aucText=c(aucText,paste0("3 years survival"," (AUC=",sprintf("%.3f",roc$AUC),")"))abline(0,1)aucText=c(aucText,paste0("5 years survival"," (AUC=",sprintf("%.3f",roc$AUC),")"))lines(roc$FP, roc$TP, type="l", xlim=c(0,1), ylim=c(0,1),col=rocCol[4],lwd = 2)legend("bottomright", aucText,lwd=2,bty="n",col=rocCol[c(3,4)],cex = 0.7)

根据返回值我们可以计算cutoff阈值,ROC的最佳阈值(cutoff)一般来说,对于一个biomarker或者简单的说诊断指标/试剂,我们使用ROC曲线计算出AUC值后,还会根据ROC曲线的最佳阈值来确定其灵敏度和特异度,有时在研究中,还会用于KM曲线的分类指标确定阈值的方法很多(可参考:ROC Curve或者One ROC Curve and Cutoff Analysis),一般会用最常见的约登指数(Youden index),即敏感度+特异性-1;有时也会考虑用其他确定阈值的方法,比如Minimum ROC distance, Misclassification Cost Term等等(参考:ROC)

对于上述survivalROC的结果,如5年ROC曲线的约登指数(因为TP代表的是True Positive fraction,即sensitivity;而FP代表的是False Positive fraction,即1-specificity),通过换算之后即为即sensitivity-specificity取最大值的那个mayoscore4作为最佳阈值(cutoff)为6.834187

roc_res


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3