本文内容来自知乎:医小咖
里面有许多关于医学统计方法,非常实用,转载以方便查阅
多图实例:教你绘制ROC曲线
在选择诊断试验时,许多研究者会在灵敏度和特异度之间进行艰难的取舍。那么,是否可以综合考虑灵敏度和特异度的特点,根据一个指标评价诊断试验的准确性呢?Lusted于1971年提出受试者工作特征曲线(receiver operating characteristic curve,简称ROC曲线),用来描述诊断试验的内在真实程度,应用十分广泛。
ROC曲线是以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的。每一个点都对应诊断试验的一个截点,我们将这些可能的点连接起来即可制作出经验ROC曲线(empirical ROC curve)。该方法可以帮助研究者简单、直观地分析诊断试验的临床准确性,选择更加合适的截点。
那么,ROC曲线应该如何绘制呢?
第一个栗子
有20位受试者体内含有植入式人工心脏瓣膜,现拟采用数字成像诊断试验检查瓣膜的断裂情况。常用的检查方法是测量阀门支架之间的距离,距离越大,瓣膜断裂的可能性越大。经手术发现,这20位受试者的瓣膜断裂情况和阀门支架距离的关系如图1。
手术证实,20位受试者中有10位存在瓣膜断裂的情况,而另外10位瓣膜完好。瓣膜断裂受试者的阀门支架距离在0.03到0.58之间,瓣膜完好受试者的阀门支架距离在0.0到0.13之间。为了评价该数字成像诊断试验的灵敏度和特异度,我们设置诊断截点为0.05,即认为阀门支架距离大于0.05的受试者是瓣膜断裂阳性,小于或等于0.05的受试者是瓣膜断裂阴性。从而计算出该诊断试验的灵敏度为0.80,特异度为0.70。
当然,我们知道如果我们选择其他截点,该诊断试验的灵敏度和特异度都会发生相应变化。如果我们选择比较大的阀门支架距离为诊断截点,如0.13,那么灵敏度就会下降到0.50,而特异度会增加到1.0。如果我们选择比较小的阀门支架距离为诊断截点,如0.03,那么灵敏度会增加到0.90,而特异度会降低到0.60。这个例子说明,在同一诊断试验中,灵敏度和特异度之间存在内在联系,即一个增加,另一个就会减低。在这项诊断试验中,设置不同截点时灵敏度和特异度的变化情况如表1。
接下来,我们就可以根据该诊断试验中灵敏度和假阳性率(1-特异度)相应的数值来绘制ROC曲线了。例如,当截点为0.07时,该诊断试验的灵敏度为0.6,假阳性率为0.2,即我们可以在坐标上取点(0.2,0.6)。再如,当截点为为0.05时,该诊断试验的灵敏度为0.8,假阳性率为0.3,即我们可以在坐标上取点(0.3,0.8)。以此类推,我们可以得到很多这样的坐标点,并将他们连接起来,绘制出经验ROC曲线。但同时,我们也可以根据这些坐标点绘制出拟合ROC曲线,如图2。
注:经验ROC曲线是在计算出诊断试验不同截点对应的假阳性率(1-特异度)和灵敏度坐标点的基础上,将这些坐标点连接起来的曲线。
拟合ROC曲线是指根据诊断试验不同截点计算出的假阳性率(1-特异度)和灵敏度的坐标点拟合出来的平滑曲线。
第二个栗子
心脏瓣膜诊断试验中的测量指标是连续变量。那么,如果测量指标是分类变量,ROC曲线的绘制过程又是怎样的呢?
现有一项研究,研究者以甲状旁腺CT为诊断试验对连续就诊的97位患者进行分析。根据CT的结果,研究者将患者甲状旁腺的病变情况分为1-5五个等级。1级为完全没有甲状旁腺病变,2级为可能没有甲状旁腺病变,3级为可能存在甲状旁腺病变,4级为疑似甲状旁腺病变,5级为确诊甲状旁腺病变。经手术发现,这97位患者的CT诊断结果与实际甲状旁腺病变的关系如表2。
如果研究者设置4级为诊断截点,即认为4、5级为阳性,1-3级为阴性,那么该诊断试验的灵敏度为0.70、特异度为0.963。同时,如果研究者设置3级为诊断截点,即认为3-5级为阳性,1、2级为阴性,那么该诊断试验的灵敏度为0.729、特异度为0.889。可见,在该诊断试验中,当灵敏度从0.70增加到0.729时,特异度从0.963下降到0.889。
与心脏瓣膜诊断试验的例子一样,在计算出不同截点的灵敏度和特异度之后,我们就可以绘制该诊断试验的ROC曲线了。但是由于甲状旁腺CT的结果指标是分类变量,所以该诊断试验可能应用的截点数比较少,只能是1-5级这几个固定的点,如图3。
其中,A点是以5级(确诊甲状旁腺病变)为截点计算出的坐标位置。可见,当以5级诊断结果为截点时,该诊断试验的假阳性率很低,但是灵敏度也不高。B点是以4级(疑似甲状旁腺病变)为截点计算出的坐标位置,灵敏度水平比A点好一些,但是假阳性率也出现少量增加。B点是以3级(可能存在甲状旁腺病变)为截点计算出的坐标位置,灵敏度更好,但是假阳性率也增加得更加明显。
因此,在不考虑误诊和漏诊影响的情况下,我们应当以ROC曲线上离左上角(0,1)最近的点为诊断试验的截点,从而保证最佳的灵敏度和特异度。
(更多内容可关注“医咖会”微信公众号:传播医学知识和研究进展,探讨临床研究方法学。)
ROC曲线下面积
ROC曲线下面积(the area under the ROC curve, AUC)是指ROC曲线与x轴、(1,0)-(1,1)围绕的面积,如图1阴影部分。
一般来说,ROC曲线下面积在0到1之间。如果一项诊断试验的灵敏度是1,而假阳性率是0,那么该诊断试验的ROC曲线下面积就是1。但是这样的诊断试验几乎不存在,一个诊断试验往往不能将所有的患者和非患者都准确地识别出来。同时,也不会出现某一项诊断试验的ROC曲线下面积为0的情况,因为基本不会有一项诊断试验错误地识别了所有的患者和非患者。即使真的有这样的诊断试验,我们只需要将所有的诊断结果反过来,就可以得到完美结果。
也因为如此,我们认为ROC曲线下面积不会低于0.5,如果低了,我们只需将诊断翻转,就能得到更好的结果。如果诊断试验的结果完全随机(等同于诊断时,靠投掷硬币,正面向上认为是患者,反面向上认为是非患者),那么我们得到的ROC曲线下面积就是0.5,即ROC曲线下面积的最小值是0.5。
可见,只要ROC曲线下面积大于0.5,就证明该诊断试验具有一定的诊断价值。同时,ROC曲线下面积越接近1,离(0,1)点越近,证明诊断试验的真实性越好。
第一个栗子
仍以甲状旁腺诊断试验为例,现有SPECT、AC SPECT(衰减矫正SPECT)和SPECT/CT三种方法对同一患者群进行诊断。根据诊断试验结果,研究者将患者甲状旁腺的病变情况分为1-5五个等级。1级为完全没有甲状旁腺病变,2级为可能没有甲状旁腺病变,3级为可能存在甲状旁腺病变,4级为疑似甲状旁腺病变,5级为确诊甲状旁腺病变。得到诊断结果后,我们以3-5级为诊断阳性,1、2级为诊断阴性,并根据手术结果统一评价这三项诊断试验的准确性,如表1。
从表1可以看出,在设置相同截点的情况下,不同诊断试验的真实性不同。其中,SPECT/CT的ROC曲线下面积最接近1,相比于SPECT和AC SPECT具有更好的诊断准确性。
那么,SPECT/CT的ROC曲线下面积(0.83)有什么实际含义吗?
如果我们使用SPECT/CT随机检查2位受试者,其中一位患有甲状旁腺病变,而另一位没有,那么SPECT/CT诊断试验正确区分患者和非患者的可能性为0.83。
同时,如果我们只看ROC曲线,也可以比较不同诊断试验的真实性,如图2。其中,SPECT/CT诊断试验的ROC曲线更接近于(0,1)点,所以它比AC-SPECT诊断试验具有更好的准确性。
图2中两个做标记的点是以3级(可能存在甲状旁腺病变)诊断结果为截点进行坐标的,与表1中的情况一致。这是因为拟合后ROC曲线会略有变化,这两个点均与原坐标点的位置会略有差异。
仅仅从表1中的数据来看,我们可能认为AC SPECT诊断试验的灵敏度(0.80)高于SPECT/CT诊断试验的灵敏度(0.70)。但是从图2我们可以看出,无论是在哪一个假阳性率的位置上,SPECT/CT诊断试验的灵敏度都比AC SPECT诊断试验的灵敏度好。可见,在实际临床工作中,仅以某一个截点的数据评价不同试验的灵敏度是不准确的,我们应根据ROC曲线下面积进行综合判断。
那么,我们一定会选择ROC曲线下面积比较大的诊断试验吗?
答案也是否定的。
通过上一讲对ROC曲线绘制方法的介绍,大家应该知道ROC曲线与受试人群的患病率以及漏诊、误诊的危害程度无关,仅仅是综合评价一项诊断试验的灵敏度和特异度两个指标。
现假设我们想通过诊断试验判断无症状人群的心血管病变情况。在临床实际工作中,这些无症状的就诊人群真实患心血管病变的可能性相对较小。为了减少误诊带来的医疗资源浪费和恐慌,我们可能会更倾向于选择特异度较高的诊断试验和截点。在这种情况下,灵敏度指标对诊断试验的整体准确性的影响较小。我们仅会根据ROC曲线中的一部分(特异度较高的区域),而不是全部的ROC曲线下面积来选择诊断试验。
可见,完全依靠ROC曲线下面积评价诊断试验的准确性是容易产生误导的。即使是ROC曲线下面积相同的两个诊断试验也可能存在不同的临床适用范围。
再来一个栗子
下图3中,我们向大家展示了两条相交的ROC曲线。相比之下,曲线A下的面积(0.85)比曲线B下的面积(0.80)大。仅根据ROC曲线下面积,我们应该以A诊断试验为首选。但是,如果在临床应用中,我们需要一个特异度比较好的诊断试验,B诊断试验应该成为我们的首选。因为在特异度高、假阳性率低的区域,诊断试验B的ROC曲线优于诊断试验A。
由此可见,虽然ROC曲线和曲线下面积可以准确地反映诊断试验的真实性,但是在实际工作中,我们必须根据受试人群的特征、诊断结果的临床影响、诊断的经济成本等因素综合选择适合的诊断试验。换言之,只有在适合的受试人群和受试条件下,诊断试验的真实性才能得到保障。
绘制ROC曲线、找截断值(SPSS和Medcalc)
今天我们来讲一下如何用SPSS和Medcalc来绘制ROC曲线,并找到截断值。
假设某实验室人员选用一种新方法对同一批患者进行了诊断,患者的真实状态已知。actual代表真实患病状态,即以金标准(如病理诊断)判断是否患病的结果,其中1代表患病,0代表不患病;assay1代表一种新检验方法测量的结果。
一、用SPSS进行ROC曲线的绘制
1. 选择Analyze→ROC Curve…
2. 主对话框设置:将已知的疾病情况actual送入State Variable框中,assay1送入Test Variable中,并在Value of State Variable框中填1(即代表患病状态),在Display中选择所有,其中Coordinate points of the ROC Curve会给出曲线上的坐标点→OK。
3. 结果
(1) ROC曲线
(2) ROC曲线下面积:从Area Under the Curve的结果可知,assay1的ROC曲线下面积为0.856(95%置信区间:0.825-0.886,P<0.001)。
(3) ROC曲线上的坐标点:如下图所示,我们可以根据Coordinates of the Curve的结果可以得到一系列灵敏度和1-特异度的值。
要想获得截断值,就是最接近左上角(0,1.0)的点所对应的坐标点,我们可以将这两列值复制到Excel表中,根据正确指数最大选出最佳临界点。
正确指数又称约登指数(Youden’s index),表示检验方法发现真正病人与非病人的总能力,是灵敏度与特异度之和减去1,即约登指数=灵敏度+特异度-1,在Excel中,用灵敏度-(1-特异度)得到的就是约登指数,对相减的结果进行排序,可以得到正确指数的最大值,即最佳临界点。
操作:将数据复制到excel中,计算灵敏度-(1-特异度),选中D列,进行降序排列,得到约登指数的最大值约为0.5631,对应的灵敏度≈90.2%,特异度≈(1-0.338)=66.2%。
二、用Medcalc进行ROC曲线的绘制
1. 数据录入:Medcalc的界面与SPSS相似,但是没有变量视图。我们可以将SPSS中的数据直接复制到Medcalc中,在最上面一行填写变量名称;另外,如果原始数据在Excel中,可以用Medcalc直接打开Excel文件。
2. 在标签栏中选择Statistics——ROC curves——ROC curve analysis…
3. 主对话框设置:在Variable一栏中选择我们研究的变量(也就是assay1),Classification variable一栏中选择诊断结局(actual),其他可以按原始设置→OK。
4. 结果
我们可以直接得到ROC曲线以及诊断试验的最佳诊断标准,即截断点。该截断点的灵敏度和特异度如图所示,灵敏度为90.2%,特异度为66.2%,与上面我们用Excel计算的结果一致。相比之下,Medcalc软件直接给出最佳截断点,比SPSS更加方便快捷。
另外,Medcalc给出了诊断试验的样本量、ROC曲线下面积和约登指数,可以看到ROC曲线下面积为0.856(95%置信区间:0.827-0.881,P<0.0001),并给出了最佳临界点对应的约登指数,为0.5631,与我们上面计算的结果一致。此外,也给出了ROC曲线坐标点灵敏度和特异度的95%置信区间,以及阳性似然比和阴性似然比。
本文中只讲述了通过约登指数最大找截断值的方法,是比较常用的方法。然而,根据研究目的不同,选取截断值还有其他的准则,如95%灵敏度原则或95%特异度原则等,需根据实际研究目的来确定。