ROC简介

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2010年08月29日星期日16:09
ROC曲线介绍
作者:Dr.H
周日, 11 5月2008 16:05
前言
近年可以看到愈来愈多的医学文献以「ROC curve」做为标题或关键词,常用的医学文献查询系统
--MEDLINE已经把它列为「医学标题」(Medical Subject Heading)。

放射线科医师使用ROC曲线分析计算机断层摄影术与核医扫描的诊断能力【1-4】,精神科医师用它来决定问卷的决策点【5】,泌尿科医师用它来检定前列腺专一抗体密度(PSA density)是否比前列腺专一抗体浓度(PSA concentration)更能诊断出前列腺癌【6】。

1989年和1990年在MEDLINE中可以查到178篇以「ROC曲线」为标题的文献【7】,1994年略微减少,但仍可找到20篇。

本文将对ROC曲线的基本概念加以介绍。

历史回顾
ROC曲线的全名为Receiver Operating Characteristic Curve,中文或可译为「接收器运作指针曲线」,这项技术起初是为了增进军事雷达的敌我侦测能力而发展的。

举例而言:雷达接收的无线电波可能只是噪声,也可能是噪声加上真正的电磁波,如果把噪声判为敌机,或把敌机误判为噪声,都会使我方蒙受损失,因此选择一个合理的指标做为判断标准,显然是极具军事价值的。

在1954年的情报理论研讨会上,哈佛大学的Meter及Middleton和密西根大学的Peterson、Birdsall及Fox同时提出了应用概算比(likelihood ratio)做为决策法则的报告【8】。

随后,这项决策法则被整合为ROC曲线。

1971年,Lusted把ROC曲线的观念引介给医学界【9】。

他指出ROC曲线是以「X轴与Y轴分别代表伪阳性诊断与真阳性诊断」的点状图【9】。

1973年,Simpson及Fitter提出以「ROC曲线下的面积」做为诊断工具分辨能力的指标【10】。

根据此一理论,要了解一个诊断工具是否优于另一工具,只要比较两者「ROC曲线下的面积」就可以得到答案了。

1975年,Bamber【11】指出「ROC曲线下的面积」的意义。

他认为这个面积(大于0,小于1的一个数字)代表「强迫二选一」(two-alternative-forced-choice, 2AFC)的情形下,诊断工具猜对有病者、无病者的机率。

1988年Hanley提出「ROC曲线下的面积」的计算方法【12】。

1983年Hanley及McNeil提出二条「ROC曲线下的面积」的统计检定方法【2】。

Centor在1991年的论文【7】中,对ROC曲线的发展有更详细的描述,有兴趣者可自行参考。

从阳性预测值到ROC曲线
在临床实务上,我们几乎不可能找到百分之百「正确」的诊断工具。

一般认为可以做为「黄金标准」的长期追踪、组织切片检查、造影摄影术和尸体解剖【13】,除了最后一项外,也不是绝对正确。

因此,「阳性预测值」、「阴性预测值」、「敏感度」、「精确度」、「概算比」等概念纷纷被提出来。

医师较喜欢使用「阳性预测值」(或「阴性预测值」),因为这项指标是以具有某种检验结果的人数做为分母,以真实健康状态与检验结果相符的人数做为分子。

医师如果知道某检验的阳性预测值是90﹪,他就可以告诉一个检验结果为阳性的人说:「你有90﹪的机会得了某病。

」预测值的缺点是会受到盛行率的影响。

如果甲、乙两医院的某病盛行率不同,这两家医院同一检验的阳性预测值也会不同。

「敏感度」与「精确度」是以真实的健康状态人数为分母,以检验结果与该健康状态相符的人数做为分子,不会受到盛行率的影响,各医院同一检验的「敏感度」与「精确度」是相同的。

而其缺点在于「敏感度」与「精确度」彼此之间有交换性,当诊断标准趋于严格时(检验为阳性的人数减少),「敏感度」会降低,但「精确度」会升高,例如:把血糖的「正常值」从140mg/dl提高到180mg/dl,敏感度的分母(真正的糖尿病患者人数)不变,但分子减少,所以敏感度会下降,而精确度则正好相反,因此这两个指标会随着「正常值」的改变而一升一降,我们无法由这两个指标中的任何一个知道最适当的「正常值」该定在那里。

「阳性概算比」
的定义是:「具有某一状态者被检验为阳性」的机率和「不具有某一状态者被检验为阳性」的机率之比值。

因此「阳性概算比」就是真阳性率与伪阳性率的比值,由于真阳性率等于敏感度,伪阳性率等于一减去精确度,所以「阳性概算比」是整合敏感度与精确度的一个指标。

不同的正常值就会产生不同的「阳性概算比」,当我们以一项检验工具,各个不同「正常值」下的「阳性概算比」的分母、分子画入X-Y坐标,即可得到一条以伪阳性率为X轴,真阳性率为Y轴的曲线,这条曲线即是ROC曲线。

ROC曲线的制成
假设图一的横轴代表某项检验的数值,纵轴代表人数比例(机率),h(x)代表无病者的分布曲线,d(x)代表有病者的分布曲线,hf(x)与d(x)底下的面积均为1(100%),且H(x)代表无病者的检验值小于或等于X的机率(即自负无限大至x之间h(x)的积分),D(x)代表有病者的检验值小或等于X的机率。

则伪阳性率=1-H(x) (1)
真阳性率=1-D(x) (2)
(1-H(x),1-D(x))的点集合即构成图二的ROC曲线。

上述观念,也可以扩展到离散机率函数。

假设某项检验的结果可以分为五级,有病组与无病组被分到各级的人数如表一,则以不同级为诊断标准时,即可得到如表二的敏感度与伪阳性率,根据表二的资料,即可得到图三的ROC曲线。

临床上可用的诊断工具,其ROC曲线是一条凸向左上方的曲线,而且愈偏离45度对角线愈好【14】。

45度对角线(图二)被称为「无讯息线」(Line of no information),这条线代表诊断工具的诊断结果,对医师判断病人是否有病,没有提供任何有效的讯息,也就是说,做这项检验的效用和扔铜板(指正反面出现机率相等的铜板)决定有病、没病是一样的。

因此,早期判断一项诊断工具是否可用的指针,就是ROC曲线偏离45度对角线多远。

Peterson和Birdsall提出的d'指数【8】,Lusted所提的de'(敏感指标)【9】都是属于这方面的研究。

继敏感指标后,被提出的指针是「ROC曲线下的面积」,这面积是指在「强迫二选一」的情形下,猜对有病者、无病者的机率。

「强迫二选一」是指从有病组中挑出一个人,再从无病组中挑出一人,做一项检验后,「必须」指出两人中那一个是有病者【1,7】。

「ROC曲线下的面积」就代表诊断工具猜对的机率有多大。

猜对的机率愈大代表诊断工具愈好。

读者若对于「ROC曲线下的面积」的计算及多条「ROC曲线下的面积」的统计检定有兴趣,可以进一步参考Hanley及McNeil所写的论文【1,2】。

Catalona等【6】的论文则是选定,每条ROC曲线最好的反折点来进行比较。

因为有些医师觉得,临床上不必去考虑敏感度或精确度太差的情形,因此比较整条ROC曲线,在临床上是没有意义的。

选择反折点
ROC曲线的用处之一,是提供研究者找出一个较好的反折点(或正常值),使诊断工具的敏感度与精确度能有合理的平衡。

对一位求诊者而言,如果把有病误诊为无病,和把无病误诊为有病视为同样重要,这时的反折点应是使敏感度与精确度的和有最大值的检验值。

这个最大值是Youden在1950年提出的。

如果h(x)与d(x)是平均值不同,变异数相同的两族群的常态分布曲线,则由图一可知:x=c*,使H (x)=1-D(x),这条线是图一中的-45度对角线,也就是说:(1-H(c*),1-D(c*))正好是ROC曲线与-45度对角线交点。

但ROC曲线不是平滑曲线时,最好的反折点则不一定是(1-H(c*),1-D(c*))。

Chong及Wilkinson【5】, Catalona【6】等的论文就是以这种方法选择反折点的。

Sox等提出了选择最佳反折点的另一种想法【15】。

他们认为最好的反折点是与下列斜率直线相切的ROC曲线上的一点:治疗无病者的净成本无病者盛行率
与ROC曲线相切之斜率:------------------- × --------------
治疗有病者的净利润有病者盛行率Sox等的观念比Yuden的观念更合理。

但可能因为损益数据不易取得,而较少(或没有?)被采用。

计算机程序
Centor指出:Metz曾开发多种可用于微电脑的ROC曲线相关程序【7】。

我们曾为个人计算机使用者以SAS/PC写过可计算ROC曲线各点及找出Yuden index 最佳反折点的程序。

应用我们的程序的研究者,必须确认他的每笔数据至少有检验值、真实健康状态及各真实健康状态的人数等项。

结语
在临床上,由于新的检验技术不断地推陈出新,如果这个新技术是以数字呈现检验结果,则必须订出一个「正常值」的范围,作为医疗人员解读的依据。

而ROC曲线正是许多研究者用以决定「正常范围」的工具。

因此了解ROC曲线的原理,将有助于临床医疗人员对各种检验数据的理解与诠释。

REFERENCES
1. Hanley JA, McNeil BJ: The meaning and use of the area under a receiver operating characteristic (ROC) curve. Radiology, 1982;143:29-36.
2. Hanley JA, McNeil BT: A method of comparing the areas under receiver operating characteristic curve derivedfrom the same cases. Radiology 1983;148:839-843
3. Swets JA, Pickett RM, Whitehead SF et al. Assessment of diagnostic technologies. Science 1979;205:753-759.
4. Somoza E, Mossman D: Comparing and optimizing diagnostic tests: an information-theoretical approach
5. Chong MY, Wilkinson G: Validation of 30-and 12-item versions of the Chinese health questionnaire(cHQ) in patient admitted for general health screening. Psychol Med 1989;19:495-505.
6. Catalona WJ, Richie JP, deKernion JB et al: Comparison of prostate specific antigen concentration versus prostate specific antigen density in the early detection of prostate cancer: receiver operation characteristic curves. J Urol 1994;152:2031-2036.
7. Centor: Signal detectability: the use of ROC curves and their analyses. Med Decis Making 1991; 11:102-106.
8. Swets JA: The relative operating characteristic in psychology-- a technique or isolating effects of response bias finds wide use in the study of perception and cognition. Science 1973;182:990-1000.
9. Lusted LB: Signal detectability and medical decision-making. Science 1971;171:1217-9.
10. Simpson AJ, Fitter MJ: What is the best index of detectability?Psychol Bull 1973;80:481-8.
11. Bamber D: The area above the ordinal dominance graph and the area below the receiver operating characteristic graph. J Math Psych 1975;12:387-415.
12. Hanley JA: The robustness of the "binominal" assumptions used in fitting ROC curves. Med Decis Making 1988;8:197-203.
13. Fletcher RH, Flether SW, Wagner EH: Clinical epidemiology. Baltimore: Williams & Wilkins 1988;
2nd:43-45.
14. Murphy JM, Berwick DM, Weinstein MC: Performance of screening and diagnostic tests. Arch Gen Psychiatry 1987;44:550-555.
15. Sox HC, Blatt MA, Higgins MC et al: Medical decision making. singapore: PE Publishing Pte Ltd. 1990;1st ed:134-138.
http://202.117.156.125/index.php/articles/41/297-roc
ROC(Receiver Operating Characteristic)曲线,也就是受试者工作曲线,用于二分类判别效果的分析与评价.一般自变量为连续变量,因变量为二分类变量.
基本原理是:通过判定点(cutoff point/cutoff value)的移动,获得多对灵敏度(sensitivity)和误判率
(1-Specificity(特异度)),以灵敏度为纵轴,以误判率为横轴,连接各点绘制曲线,然后计算曲线下的面积,面积越大,判定价值越高.
灵敏度:就是把实际为真值的判定为真值的概率.
特异度:就是把实际为假值的判定为假值的概率.
误判率:就是把实际为假值的判定为真值的概率,其值等于1-特异度.
将绘成的曲线与斜45度的直线对比,若差不多重合,说明自变量对因变量的判定价值很差,若越远离斜45度的直线即曲线下的面积越大,说明自变量对因变量的判定价值越好,即根据自变量可以较为正确的判定因变量.
使用SPSS的操作过程如下:
Graphs/ROC Curve:Test variable选自变量(连续型变量),state varibale选因变量(二分类变量)display的选项一般全选.
运行结果:
ROC曲线,可直观地看到曲线外形.
Area under the curve:曲线下方的面积,包括面积值,显著性分析,置信区间.
Coordinates of the curve:ROC曲线各点对应的灵敏度和误判率.
ROC曲线的概念
受试者工作特征曲线(receiver operator characteristic curve, ROC曲线),最初用于评价雷达性能,又称为接收者操作特性曲线。

ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。

传统的诊断试验评价方法有一个共同的特点,必须将试验结果分为两类,再进行统计分析。

ROC曲线的评价方法与传统的评价方法不同,无须此限制,而是根据实际情况,答应有中间状态,可以把试验结果划分为多个有序分类,如正常、大致正常、可疑、大致异常和异常五个等级再进行统计分析。

因此,ROC 曲线评价方法适用的范围更为广泛。

(二)ROC曲线的主要作用
ROC曲线能很轻易地查出任意界限值时的对疾病的识别能力。

选择最佳的诊断界限值。

ROC曲线越靠近左上角,试验的准确性就越高。

最靠近左上角的ROC曲线的点是错误最少的最好阈值,其假阳性和假阴性的总数最少。

两种或两种以上不同诊断试验对疾病识别能力的比较。

在对同一种疾病的两种或两种以上诊断方法进行比较时,可将各试验的ROC曲线绘制到同一坐标中,以直观地鉴别优劣,靠近左上角的ROC曲线所代表的受试者工作最准确。

亦可通过分别计算各个试验的ROC曲线下的面积(AUC)进行比较,哪一种试验的AUC最大,则哪一种试验的诊断价值最佳。

(三)ROC曲线分析的主要步骤
ROC曲线绘制。

依据专业知识,对疾病组和参照组测定结果进行分析,确定测定值的上下限、组距以及截断点(cut-off point),按选择的组距间隔列出累积频数分布表,分别计算出所有截断点的敏感性、特异性和假阳性率(1-特异性)。

以敏感性为纵坐标代表真阳性率,(1-特异性)为横坐标代表假阳性率,作图绘成ROC曲线。

ROC曲线评价统计量计算。

ROC曲线下的面积值在1.0和0.5之间。

在AUC>0.5的情况下,AUC
越接近于1,说明诊断效果越好。

AUC在0.5~0.7时有较低准确性,AUC在0.7~0.9时有一定准确性,AUC在0.9以上时有较高准确性。

AUC=0.5时,说明诊断方法完全不起作用,无诊断价值。

AUC<0.5不符合真实情况,在实际中极少出现。

两种诊断方法的统计学比较。

两种诊断方法的比较时,根据不同的试验设计可采用以下两种方法:①当两种诊断方法分别在不同受试者身上进行时,采用成组比较法。

②假如两种诊断方法在同一受试者身上进行时,采用配对比较法。

(四)ROC曲线的优点
该方法简单、直观,通过图示可观察分析方法的临床准确性,并可用肉眼作出判定。

ROC曲线将灵敏度与特异性以图示方法结合在一起,可准确反映某分析方法特异性和敏感性的关系,是试验准确性的综合代表。

ROC曲线不固定分类界值,答应中间状态存在,利于使用者结合专业知识,权衡漏诊与误诊的影响,选择一更佳截断点作为诊断参考值。

提供不同试验之间在共同标尺下的直观的比较,ROC曲线越凸越近左上角表明其诊断价值越大,利于不同指标间的比较。

曲线下面积可评价诊断准确性。

(五)SPSS软件实现ROC分析
SPSS 9.0以上版本可进行ROC分析,操作步骤如下:
定义列变量,并输入数据
诊断分类值或检测结果(test):多个诊断试验则定义test1,test2,...
金标准类别(group):1=病例组,0=对照组
分类频数(freq),需要进一步执行第二步
说明频数变量路径:Data\Weight Case..., 选项:Weight case by,填表:Freqency Variable (freq)ROC分析: 路径:Grahps\Roc Curve... 填表:Test Variable(test),State Variable (group),Value of state variable,选项包括:
(display) ROC Curve,with diagonal reference line (机会线),standard error and confidence interval (面积的标准误,及其可信区间),Coordinate points of the ROC curve (ROC曲线的坐标点),options:test direction (假如检测值小划归为阳性,则需要选),cofidence level (%):需要除95%以外的可信度,可在此定义
假如是连续型测量资料,则不需要第1步的(3)及第2步
今天我们来介绍一下ROC(Receiver operating characteristics)国内复旦张文彤老师在《SPSS统计分析基础教材》中将其翻译成“受试者工作特征”,也有按字面意思译成“接受者操作特征曲线”。

到底选择哪一个大家自便吧。

ROC曲线是有TP(True positive rate)、FP(Flase positive rate)构成的,以TP作为Y轴,FP作为X轴。

对于一个离散型分类器(discrete classifier),每一个分类器仅仅对测试集生成一组(fp,tp)点。

这个结果对应着ROC空间上的一个点,例如上图中的A、B、C几个点。

那么如何让它们产生一个曲线就成了大家最关心的问题。

有一种方法通过对每一个样本集中的样本依次排序进入队列,来到一个样本就计算一次(fp,tp)值,直到样本集中样本全部进入为止。

这样我们就得到了一个与样本数量相同的(fp,tp)数组了。

然后我们通过这个二维数组我们就可以在ROC空间上做出一个ROC曲线了。

具体的算法大家可以参见《An introduction to ROC anslysis》Tom Fawcett, 2005。

这篇论文中对ROC曲面进行了很详细的讲解。

这样我们就可以得到一个如上图所示的ROC曲线。

我们可以看到上图中有很多条ROC曲线,但是到底哪一条ROC曲线代表对应的分类器的分类效果?这也是一个值得探讨的问题。

我们可以看到ROC曲线下面覆盖了一定的面积,不同的曲线覆盖的大小不同,于是一个通俗的想法就是比较它们覆盖面积的不同来判断分类器的效果。

当然这个通俗的想法也是有其缘由的,因为对于在ROC空间中的点来说,分类器的分类效果越好它所对应的TP值就越高,FP越低,那么这个对应的点就越靠近西北方向(及左上角)。

那么对于一个分类效果比较好的分类器来说,它的ROC曲面必然靠近西北方向,当然它所覆盖的面积就会比其它分类效果较差的分类器要大了。

学界称这个面积为Area under the ROC curve(AUC)。

说了这么多,如果需要仔细了解ROC的原理请大家参考上文提到的那篇论文。

现在我将weka中得到ROC 曲面的方法,以及通过SPSS绘制一个ROC曲面的方法以源码的形式介绍给大家:
package com.csdn;
import java.awt.BorderLayout;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Random;
import weka.classifiers.Classifier;
import weka.classifiers.Evaluation;
import weka.classifiers.bayes.NaiveBayes;
import weka.classifiers.evaluation.ThresholdCurve;
import weka.core.Instances;
import weka.core.Utils;
import weka.gui.visualize.PlotData2D;
import weka.gui.visualize.ThresholdVisualizePanel;
import com.learning.Util;
/*
* Date: 2009.4.6
* by: Wang Yi
* Email: wangyi19840906@
* QQ: 270135367
*
*/
public class SimpleROC {
/**
*@param args
*/
public static void main(String[] args) throws Exception { // TODO Auto-generated method stub
/*
* 1.读入数据集
*/
Instances data = new Instances(
new BufferedReader(
new FileReader("C:\Program
Files\Weka-3-6\data\segment-challenge.arff")));
data.setClassIndex(data.numAttributes() - 1);
/*
* 2.训练分类器并用十字交叉验证法来获得Evaluation对象
* 注意这里的方法与我们在上几节中使用的验证法是不同。

*/
Classifier cl = new NaiveBayes();
Evaluation eval = new Evaluation(data);
eval.crossValidateModel(cl, data, 10, new Random(1));
/*
* 3.生成用于得到ROC曲面和AUC值的Instances对象
* 顺带打印了一些其它信息,用于在SPSS中生成ROC曲面
* 如果我们查看weka源码就会知道这个Instances对象包含了很多分类的结果信息
* 例如:FMeasure、Recall、Precision、True Positive Rate、
* False Positive Rate等等。

我们可以用这些信息绘制各种曲面。

*/
ThresholdCurve tc = new ThresholdCurve();
//classIndex is the index of the class to consider as "positive"
int classIndex = 0;
Instances result = tc.getCurve(eval.predictions(), classIndex);
System.out.println("The area under the ROC curve: " +
eval.areaUnderROC(classIndex));
/*
* 在这里我们通过结果信息Instances对象得到包含TP、FP的两个数组
* 这两个数组用于在SPSS中通过线图绘制ROC曲面
*/
int tpIndex =
result.attribute(ThresholdCurve.TP_RATE_NAME).index();
int fpIndex =
result.attribute(ThresholdCurve.FP_RATE_NAME).index();
double [] tpRate = result.attributeToDoubleArray(tpIndex);
double [] fpRate = result.attributeToDoubleArray(fpIndex);
Util.writeArray(tpRate, fpRate, "d:\roc.txt");
/*
* 4.使用结果信息instances对象来显示ROC曲面
*/
ThresholdVisualizePanel vmc = new ThresholdVisualizePanel();
//这个获得AUC的方式与上面的不同,其实得到的都是一个共同的结果 vmc.setROCString("(Area under ROC = " +
Utils.doubleToString(tc.getROCArea(result), 4) + ")");
vmc.setName(result.relationName());
PlotData2D tempd = new PlotData2D(result);
tempd.setPlotName(result.relationName());
tempd.addInstanceNumberAttribute();
vmc.addPlot(tempd);
// 显示曲面
String plotName = vmc.getName();
final javax.swing.JFrame jf =
new javax.swing.JFrame("Weka Classifier Visualize: "+plotName);
jf.setSize(500,400);
jf.getContentPane().setLayout(new BorderLayout());
jf.getContentPane().add(vmc, BorderLayout.CENTER);
jf.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { jf.dispose();
}
});
jf.setVisible(true);
}
}
在代码的第三部分,有一个result 的结果信息对象被建立,这个对象里面有很多分类器分类后产生的结果,如代码中解释的那样,它们包括,TP Rate, FP Rate, Recall, FMeasure等等。

在这里我将这个Instances的arff头罗列出来供大家参见。

@relation ThresholdCurve
@attribute 'True Positives' numeric
@attribute 'False Negatives' numeric
@attribute 'False Positives' numeric
@attribute 'True Negatives' numeric
@attribute 'False Positive Rate' numeric
@attribute 'True Positive Rate' numeric
@attribute Precision numeric
@attribute Recall numeric
@attribute Fallout numeric
@attribute FMeasure numeric
@attribute Threshold numeric
由于在weka中得到的ROC曲线图不够清晰而且无法导出,因此我通过SPSS绘制了ROC曲线。

我们是通过result这个对象得到TP Rate和FP Rate数组,然后借助SPSS的线图功能得到ROC曲线图的。

线图效果图如下:
PS:最近发现我的源代码下载后无法正常工作,大家可以把"import com.learning.Util;";同时删除"
Util.writeArray(tpRate, fpRate, "d:\roc.txt");";就OK了。

这个函数仅仅是为了打印出tpRate,fpRate 两个指标而已。

PS2:现在我这个实例仅仅是对类别标签classIndex=0来做的,也就是说,我做的这个ROC曲面是相对于第一个类别的。

对于二类别问题,它们两个类别做处理的ROC曲面是一样的,这个没有什么问题,但是如果是多类问题,要比较某个分类器的在某个类别上的分类效果,大家要将classIndex指定到需要测试的类别标签上。

相关文档
最新文档