分享

实例教程:协变量调整后的ROC曲线及AUC的计算

 生物_医药_科研 2019-02-07

所以在评价一个诊断指标的准确度时,需要通过调整来去除协变量造成的影响。通常提到调整,大家首先会想到将协变量加入回归模型中,就可以得到调整后的效应量估计。但是这种方法并不适用于计算调整后的诊断准确度,因为这样得到的准确度是联合了多个指标的诊断得分的准确度(详见上篇文章),而不是真正的调整了协变量影响后的诊断指标自身的准确度。这篇文章,我们就介绍一下,如何计算协变量调整后的ROC曲线和AUC值。


还是借用上篇文章的数据,以基础窦卵泡数(AFC)为例,我们根据样本中患者年龄的中位数(34岁)将所有患者分为低年龄组(≤34岁)和高年龄组(>34岁),可以发现低年龄组(实线)的AFC值要高于高年龄组(虚线)的AFC值(实线表示的分布位置比同一颜色的虚线表示的分布位置偏向更高的AFC值)(图1)。


图1. 卵巢低反应/非低反应组AFC指标分年龄组的分布


诊断指标值在协变量组间的差异,会对ROC曲线和AUC的估计有什么影响呢?从图2中我们可以看出,基于全部患者的整体ROC曲线,相比于根据协变量分层的ROC曲线,会得到更高的AUC值。


原因就在于,分层变量本身也是具有一定预测能力的变量。如果我们想要得到诊断试验指标本身的诊断准确度,就需要排除分层变量自身的预测能力对诊断试验表现的影响。


图2. 协变量分组ROC曲线和整体ROC曲线

蓝色:年龄≤34岁,AUC=0.7525

红色:年龄>34岁,AUC=0.7837

黄色:全部患者,AUC=0.7988


Janes和Pepe提出了一种协变量调整ROC曲线(AROC)方法,本文仅介绍这种方法的思想和如何实现。如果对公式感兴趣的小伙伴,可以参考这篇文章:

Accommodating covariates in ROC analysis

全文链接:

https://www.ncbi.nlm./pmc/articles/PMC2758790/

简单介绍下AROC

AROC的估计分为两步:1. 按照协变量的每个亚组(例如低年龄组和高年龄组),估计诊断指标值在健康人群(control)中的分布,然后根据这个分布,计算每个患病者(case)在所属亚组中的分位值(PV);2. 估计患病者的PV的累积分布函数。


如果协变量是连续型变量,我们就不能根据协变量划分亚组,这时候我们在第1步先建立在健康人群中,诊断指标值对协变量的回归模型,得到残差的分布,然后计算每个患病者的残差在这个分布中对应的分位值。


以上步骤,也叫诊断指标的标准化,我们可以用一句简单的概括来说明这一操作的基本思想:在与患病者特征一致的健康人群中,找到患病者的诊断指标值处于什么位置。


下一步,将会根据上述步骤计算得到的PV(经过标准化的诊断指标,而不是原始指标值)绘制AROC、计算AUC。

详解操作步骤

理论部分到此结束,大家最关心的,肯定是如何实现这种分析。这里我们需要用到stata中的roccurve命令,使用方法如下:


roccurve disease_var test_varlist, adjcov(covarlist) adjmodel(model)


disease_var表示疾病状态(1为患病,2为健康),test_varlist表示诊断试验指标,covarlist表示需要调整的协变量,adjmodel中的model代表协变量调整的模型类型,对于分类协变量选择stratified,对于连续型协变量选择linear。


我们还是以AFC为例,但是这里我们调整了年龄这个协变量。图3中,左图是按照年龄组(低龄/高龄)作为协变量进行调整,右图是将年龄作为连续变量进行调整的结果。


图3. 经年龄调整后的AFC的ROC曲线

TPR(True Positive Rate) = Sensitivity

FPR(False Positive Rate)=1-Specificity


我们可以将原始AFC,AFC按年龄组调整后,AFC按年龄调整后的ROC曲线绘制在一起,来进行对比(图4)。可以发现,在调整了年龄这个协变量之后,AFC的ROC曲线下面积有所减小,这说明年龄对AFC的影响会导致AFC本身的诊断准确度被高估。经调整后的AUC可以去除年龄的影响,正确体现AFC的诊断价值。


图4. 经年龄调整前与调整后的AFC的ROC曲线的对比


如果需要计算协变量调整后的AUC,我们需要用到comproc命令,使用方法如下:

comproc disease_var test_varlist, adjcov(covarlist) adjmodel(model)


其中模型参数与上文中roccurve的设置相同。结果见表1。



以上是调整后ROC曲线在stata中实现的方法,同样的分析,也可以用R来实现,具体参考ROCt包中的adjusted.ROC命令。

https://cran./web/packages/ROCt/index.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多