您好,欢迎您

连续型变量的离散化(3)—— ROC曲线如何进行连续型变量离散化

2017年07月31日
作者:袁联雄 中山大学附属第三医院(微信:boy_for_)
来源:微信公众号“郑正有词”
在本专题前面2个帖子里介绍了不少可用于实现连续型变量分组或寻找cut-off值得方法,其中最广为临床医生所知的可能就是ROC曲线了,但其中很大一部分人可能并不知道具体如何做,今天,袁老师就带你一步一步掌握ROC曲线寻找cut-off值的方法。

假设现在手头有一个数据如下表所示:x为连续型自变量,status为二分类结局变量,表中可以看出结局为0的样本共有67例,自变量x均值为3.23,标准差为3.149,结局为1 的样本共122例,自变量x均值为3.86,标准差为2.754;
1.jpg

Logistics回归的P值为0.081>0.05。显然如果单纯从logistics回归结果来看这个自变量是没有预测意义的,但如果临床意义重要,很想要使用,又担心P值得问题,怎么办?这个时候可能就会想根据某个cut-off值分组后会不会更方便使用一点呢?此时ROC曲线就可以排上用场了。

1.SPSS的ROC曲线

运行SPSS中的ROC curve过程,将x选入Testvariable框,将status选入State variable框,在下方同时勾选Coordinate points of the ROC Curve以输出每个cut-off值下的灵敏度和特异度用于选择optimal cut-off。如下图所示:

对于二分类结局,如果灵敏度和特异度同等重要,cut-off值得选取一般选择使Yuden指数最大的cut-off值,Yuden指数=灵敏度+特异度-1,上图右侧已对Yuden指数做了筛选,选择>0.20的所有结果,可以看到Yuden指数最大为0.233,对应的灵敏度为0.680,特异度为0.552,cut-off值是1.92,因此选择1.92作为optimal cut-off,以≥1.92作为一组,<1.92作为一组,分组后的结果显示P=0.002,ROC曲线下面积和灵敏度特异度结果如下:

可以看到ROC曲线下面积也有所提高。
 
2 R软件的ROC曲线

第一步:读取数据
6.jpg

第二步:构建ROC曲线,输出每个cut-off值下的Yuden指数
7.jpg

如上图所示通过summary(result)我们可以知道在ROC分析的结果中可以输出每个cut-off值(thresholds),对应的灵敏度、特异度结果,因此我们根据结果可以计算得到Yuden指数,接下来我们只要找到Yuden指数最大值所对应的结果即可
8.jpg

可以看到结果与SPSS的结果是一致的,但与SPSS相比,无需输出结果再手动计算筛选,可以直接通过软件得到optimal cut-off值。

大家是否还记得在专题贴的第1个帖子里袁老师说了一般来说统计量最大也对应P值最小,下面我们来看一看在这个例子里如果按P值最小来选择是否结果一致。

9.jpg

程序中n表示cut-off值得个数,for引导的是一个循环计算过程,即对第二个至倒数第二个共n-2个cut-off值分别计算分组后logistics回归的P值,为什么第一个和最后一个不计算呢?因为软件默认第一个cut-off是负无穷大,最后一个是正无穷大,此时分组后的自变量x_c全部为1或者0,无法计算P值,因此最终是寻找最小的P值,因此在初始时将所有pvalue赋值为正无穷大Inf,以保证无法计算的两个P值不会干扰最终结果筛选。从结果可以看到P值最小对应的cut-off也是1.917,这与Yuden指数最大对应的结果是一致的。

3、灵敏度和特异度不同等对待下如果通过ROC曲线寻找最佳cut-off值

前面说的以Yuden指数最大对应的cut-off值作为optimal cut-off值,但有个前提是研究组对于灵敏度和特异度没有倾向性,认为二者同等重要。如果二者的重要性不一致就不宜采用Yuden指数最大化原则了,比如临床上某种疾病进展迅速,但早期治疗效果较好,或者早期干预有一定的获益,而进一步确诊的成本不高,此时在做筛查时可考虑在保证一定特异度的前提下追求灵敏度最大化,即使会带来较多的假阳性,但总体来说患者是获益的。实际上当灵敏度和特异度的重要性不一致时,牺牲多少的灵敏度和特异度是一个成本-效益/成本效用分析问题,具体成本-效益分析等怎么做,有机会袁老师会在以后的帖子里做介绍!