ROC曲线

ROC曲线,也称受试者工作特征曲线,感受性曲线;ROC曲线最初是运用在军事上,当前在医学领域使用非常广泛,用于研究X对于Y的预测准确率情况。

雷达兵的任务在于监视雷达,观察是否有敌机来袭,当然如果有飞鸟来袭,也会出现信号,如果过于谨慎有信号就报告,会增加误报风险,但如果过于大胆,凡是信号都认为是飞鸟这会出现很大风险。ROC曲线正是解决此类问题,即用于尽最大可能研究敌机信号和飞鸟信号之间的区别,以增加预报准确性。核心在于研究漏报和误报之间的概率分布情况,横坐标表示飞鸟信息不报告的概率,纵坐标表示敌机信息报告的概率即正确报告的概率,将对应的点连成曲线,这条曲线就是ROC曲线。

专业上称横坐标X轴为 1 – 特异性(特异性指飞鸟信息但不报告的概率, 1 - 特异性即为飞鸟信息报告的概率即误报率);纵坐标Y轴称为敏感度,即敌机信息进行报告的概率。

横坐标X轴越小,意味着误报率越低;纵坐标Y轴越大,意味着敏感度越高。因而ROC曲线越靠左上角,意味着误报率(特异性)越低,并且敏感度越高(即正确报告的概率越高)。ROC曲线下面可以计算面积,即称为AUC,该值表示预测准确性,AUC值越高说明预测准确率越高,反之越小说明预测准确率越低。

ROC曲线最初运用于军事上,当前ROC曲线在医学领域有着广泛的使用。医学上更多称为“阳性”(比如敌机)或“阴性”(比如飞鸟),对应着X轴即1-特异性也称为假阳性率(误报率),该值越小越好;Y轴敏感度也称为真阳性率(敏感度),该值越大越好。

关于ROC曲线涉及的几个术语名词进行概括如下:

名词 说明
特异性 阴性人群中,检测出阴性的几率。也称真阴性率
1 – 特异性 阴性人群中,检测为阳率的几率。也称假阳性率(误报率)
敏感度 阳性人群中,检测出阳性的几率。也称真阳性率(敏感度)
假阴性率 阳性人群中,检测为阴性的几率,也称假阴性率
ROC曲线 以1-特异性(误报率)为X轴,敏感度为Y轴,绘制的曲线。
AUC ROC曲线下的面积,表示预测准确率。越大越好。

由于在医学“金标准”中,关注点在于“阳性”,因而更多关注于特异性和敏感度指标。而ROC曲线正是以1 - 特异性为X轴,以特异性作为Y轴而建立的折线图。

  • 特别提示
  • 软件并不知道状态变量是什么,因而需要进行设置,即通过切割点进行设置,等于切割点为“阳性”,不等于切割点为“阴性”。默认切割点为数字1(即等于数字1为“阳性”,其它为“阴性”),此处通常情况下需要进行设置。

SPSSAU操作示例如下:

ROC曲线案例

  • 1、背景

    当前进行一项影响“低出生体重儿”的研究,希望研究产妇年龄,产妇体重对于“低出生体重儿”的预测准确率。针对“低出生体重儿”列,数字1表示低出生体重儿,0表示不是低出生体重。此处“低出生体重儿”默认为两类,1代表“阳性”,0代表“阴性”,即“金标准”为1。数据格式如下:

    备注:非真实收集数据仅作案例使用

  • 2、理论

    ROC曲线当前在医学领域使用非常广泛,用于研究X(检验变量)对于Y(状态变量)的预测准确率情况。比如本案例中产妇年龄,产妇体重这两项对于“低出生体重儿”的预测准确率。此处两个X分别是产妇年龄,产妇体重;Y为“低出生体重儿”。Y需要进行“金标准”设置,即告诉SPSSAU如何划分“阳性”或“阴性”。

    • 特别提示
    • SPSSAU提供状态变量设置,事实上将Y拆分成两组,等于切割点为“阳性”,不等于切割点为“阴性”。默认切割点为数字1,此处通常情况下需要进行设置。

    ROC曲线是以1 - 特异性即误报率为X轴,以特异性(敏感度)作为Y轴而建立的折线图。ROC曲线以下的面积值代表着预测的准确率情况,称其为AUC值。显然,AUC越大,意味着预测准确率越高,反之说明预测准确率越低。AUC值介于0到1之间,关于AUC值的判断说明如下:

    AUC<0.5:不符合实际情况, 预测诊断比随机性猜测还差,实际情况中不应该出现;

    AUC=0.5:说明完全无预测诊断价值,预测准确率和猜测效果一样;

    0.5< AUC <0.7:预测诊断价值很低,此种情况相对较常见;

    0.7<=AUC<0.9:预测诊断价值高,此种情况较常见;

    AUC>=0.9:说明预测诊断价值高,此种情况较好;

    AUC = 1,是完美预测没有瑕疵,绝大多数情况下,不存在完美的预测诊断。

    • 特别提示
    • 针对出现AUC小于0.5时,通常原因在于“阳性”和“阴性”的区分有问题,SPSSAU以等于切割点作为“阳性”,不等于切割点作为“阴性”,默认切割点为数字1。请确认设置是否有问题,如果“阳性”或“阴性”设置有误,可重新设置,或者重新上传正确的数据。

    针对ROC曲线的X(检验变量)和Y(状态变量)的进一步说明,X(检验变量)和Y(状态变量)可为任意数据类型(定量和定类数据均可);有以下两点需要特别提示:

    可能问题原因 可能“异常”结果
    X(检验变量)为定类数据 ROC曲线的折线会很少
    Y(状态变量)金标准设置,即切割点设置有误 导致ROC曲线下面积即AUC值小于0.5
  • 3、操作

    本案例研究产妇年龄,产妇体重这两项对于“低出生体重儿”的预测准确率,针对“低出生体重儿”列,数字1表示低出生体重儿,0表示不是低出生体重。数字1表示“阳性”,数字0表示“阴性”,因此切割点设置为1,SPSSAU操作截图如下:

  • 4、SPSSAU输出结果

    分析样本处理
    低出生体重儿 频数 百分比
    阳性 130 68.78%
    阴性 59 31.22%
    总计 189 100%

    从上表可知,针对产妇年龄, 产妇体重共2项构造ROC曲线,用于判断其对于“低出生体重儿”的诊断预测价值,首先进行状态变量的设置。以数字1作为切割点, 1为阳性,0作为阴性。最终从上表可可以看出:阳性(此处即为“低出生体重儿”)比例为68.78%,阴性(此处即为“非低出生体重儿”)比例为31.22%。

    ROC结果AUC汇总
    标题 AUC 标准误 p 95% CI(LL) 95% CI(UL)
    产妇年龄 0.549 0.044 0.262 0.463 0.635
    产妇体重 0.601 0.045 0.025* 0.513 0.690
    * p <0.05 ** p <0.01

    从上表可知,针对产妇年龄, 产妇体重共2项构造ROC曲线,用于判断它们对于低出生体重儿的诊断价值,从上表可以看出:

    产妇年龄对应的AUC值为0.549,意味着产妇年龄对于低出生体重儿的诊断价值比较低。产妇体重对应的AUC值为0.601,并且呈现出0.05水平的显著性(p =0.025 <0.05)意味着产妇体重对于低出生体重儿的诊断价值明显高于0.5,但诊断价值依旧比较低。

    总结可知:产妇年龄, 产妇体重共2项的对就看AUC值均低于0.7,意味着它们对于低出生体重儿的诊断价值较低。

    ROC最佳界值结果
    标题 AUC 最佳界值 敏感度 特异度
    产妇年龄 0.549 0.158 0.277 0.881
    产妇体重 0.601 0.191 0.785 0.407

    上表展示最佳界值,即尤登指数的最大值(尤登指数=敏感度 + 特异度 – 1);最佳界值的意义为ROC曲线最靠近左上角的点,即敏感度和误报率组合的相对最优值。

    针对产妇年龄,其最佳界值出现在敏感度为0.277,特异度为0.881(1-特异度为0.119)时,即在该点时,最靠近左上角(此时整体最优),可通过ROC曲线图更进一步查看;

    针对产妇体重,其最佳界值出现在敏感度为0.785,特异度为0.407(1-特异度为0.593)时,即在该点时,最靠近左上角(此时整体最优),可通过ROC曲线图更进一步查看。

    上图为ROC曲线图,可通过ROC曲线图大概查看最佳界面,以及曲线走势情况。特别提示,如果X(检验变量)为定类数据时,此时曲线很可能比较“难看”,原因在于点很少,因而ROC曲线会较“简单”,类似下图(是否患有高血压为定类数据,产妇在妊娠期间是否吸烟为定类数据):

    最后,如果需要对比两项的AUC面积是否存在着显著性差异,比如本案例中产妇年龄, 产妇体重这两项的AUC面积是否呈现出显著性差异,则可手工录入四个数字,包括两个AUC值和两个标准误SE值。对应会生成AUC差值,z 值和p 值。上图显示,产妇年龄, 产妇体重这两项的AUC值并没有显著性差异(z =-0.8357,p =0.4033>0.05)。

  • 5、文字分析

    具体文字分析例子如下:

    针对产妇年龄, 产妇体重共2项构造ROC曲线,用于判断其对于“低出生体重儿”的诊断预测价值,首先进行状态变量的设置。以数字1作为切割点, 1为阳性,0作为阴性。最终从上表可可以看出:阳性(此处即为“低出生体重儿”)比例为68.78%,阴性(此处即为“非低出生体重儿”)比例为31.22%。

    分析显示:产妇年龄对应的AUC值为0.549,意味着产妇年龄对于低出生体重儿的诊断价值比较低。产妇体重对应的AUC值为0.601,并且呈现出0.05水平的显著性(p =0.025 <0.05)意味着产妇体重对于低出生体重儿的诊断价值明显高于0.5,但诊断价值依旧比较低。产妇年龄, 产妇体重共2项的对就看AUC值均低于0.7,意味着它们对于低出生体重儿的诊断价值较低。

    针对产妇年龄,其最佳界值出现在敏感度为0.277,特异度为0.881(1-特异度为0.119)时,即在该点时,最靠近左上角(此时整体最优),针对产妇体重,其最佳界值出现在敏感度为0.785,特异度为0.407(1-特异度为0.593)时,即在该点时,最靠近左上角(此时整体最优)。

    最后针对产妇年龄, 产妇体重这两项的AUC面积是否呈现出显著性差异进行检验,最终显示产妇年龄, 产妇体重这两项的AUC值并没有显著性差异(z =-0.8357,p =0.4033>0.05)。

  • 6、剖析

    • 特别提示
    • SPSSAU提供状态变量设置,事实上将Y拆分成两组,等于切割点为“阳性”,不等于切割点为“阴性”。默认切割点为数字1,此处通常情况下需要进行设置。

    • 特别提示
    • 针对出现AUC小于0.5时,通常原因在于“阳性”和“阴性”的区分有问题,SPSSAU以等于切割点作为“阳性”,不等于切割点作为“阴性”,默认切割点为数字1。请确认设置是否有问题,如果“阳性”或“阴性”设置有误,可重新设置,或者重新上传正确的数据。

    • 针对ROC曲线的X(检验变量)和Y(状态变量)的进一步说明,X(检验变量)和Y(状态变量)可为任意数据类型(定量和定类数据均可);有以下两点需要特别提示:

    可能问题原因 可能“异常”结果
    X(检验变量)为定类数据 ROC曲线的折线会很少
    Y(状态变量)金标准设置,即切割点设置有误 导致ROC曲线下面积即AUC值小于0.5

疑难解惑

  • Cut-off值?
  • Cut-off值是由SPSSAU自动计算得到,某分析项在此界值(cut-off值)时可得到最大的尤登指数。

  • ROC联合诊断问题?
  • 如果希望进行联合诊断,通常做法是先使用‘进阶方法里面的二元Logit回归’,并且分析时‘保存残差和预测值’;接着使用‘生成的预测值’进行ROC分析(名称通常为:“BinaryLogit_Prediction_****”),此时得到的AUC即为联合诊断结果。

  • 与此同时,在开始分析按钮处选中‘联合诊断’,SPSSAU会自动进行联合诊断分析。

  • SPSSAU如何做delong检验对比?
  • SPSSAU进行ROC分析时,开始分析按钮右侧选中参数‘delong对比’即可输出delong检验两两配对比较结果,与此同时,SPSSAU直接可进行Hanley JA, McNeil BJ检验。通常情况下使用Delong检验较多。

  • 最佳界值和cut-off值的区别是什么?
  • SPSSAU系统下:Cut-off指在该值时可得到最大的尤登指数,最佳临界值指尤登指数的最大值(尤登指数=敏感度 + 特异度 – 1)。二者是不同的名词,通常情况下使用最佳临界值较多。

  • SPSSAU平台中ROC曲线时标准误差值与SPSS不一致?
  • SPSSAU平台ROC曲线时提供的标准误差值基于非参数检验得到,该计算公式与SPSS保持一致,但在特殊情况比如有结ties时,边界处理上可能不是绝对一致,因而导致该值计算出现gap,标准误差值计算原理、公式和详细过程可参考此文献:吕邦泰,杨昌国.用Excel软件制作ROC曲线评价系统[J].浙江检验医学,2003,02(v.1):43-44+46.另SPSSAU提供p值时也是基于非参数检验计算得到(p值计算于2023.03.31进行升级,在之前基于正态分布计算得到,二者通常非常接近,但非参数检验方式相对更准确)。

  • ROC进行多个模型优劣对比?
  • 如果涉及多个模型预测能力绘制ROC曲线,用于多个模型预测能力对比。建议按以下步骤进行:第1步是得到各个模型(比如神经网络模型、随机森林模型、二元logistic回归模型等)的预测值标题,该预测值可通过SPSSAU中‘保存预测值’参数选中后得到;第2步是将得到的预测值作为ROC曲线时的‘检验变量X’。此时绘制出来的ROC曲线则会有多条,分别表示各模型的预测值。与此同时,ROC曲线时的‘状态变量Y’为实际真实情况上的Y数据,并且该数据正常情况下为二分类(即仅包括2个数字即两个类别)。

  • ROC曲线需要把联合诊断也放入图中,如何处理它?
  • ROC时,如果选中联合诊断,其意义是只做联合诊断,并不做其它分析。如果需要将联合诊断与其它X均画入同一个ROC曲线中,原理上需要首先得到‘联合诊断’标题,得到该标题后,将其与其它X全部纳入分析框中然后分析即可。关于‘联合诊断’标题的获取的原理是:使用‘进阶方法里面的二元Logit回归’,并且分析时‘保存残差和预测值’,此时新生成的标题(名称类似为:“BinaryLogit_Prediction_****”)即为‘联合诊断’标题。

  • ROC时,提示‘切割点设置有误无法进行联合诊断!’
  • 联合诊断的原理是进行二元logit回归并且得到二元logit回归的预测值后,将该预测值进行ROC曲线。因而放入的状态变量需要为01变量。