如何在没有基础数据的情况下从ROC图计算AUC?

时间:2019-04-11 14:01:50

标签: r roc auc

我正在对某些风险评估工具的性能进行荟萃分析。我的目标是汇总针对特定仪器的几个有效性研究的AUC估计值。但是,我遇到了一些研究,这些研究本身并没有提供AUC估计,而只是提供了ROC曲线。 在这种情况下,我使用了https://apps.automeris.io/wpd/来获取与每个数据点相对应的值。 但是,问题是,即使我具有灵敏度和1特异性的值并且可以使用R自己绘制ROC曲线,我也不知道要使用哪个函数来计算曲线下的面积(AUC)。这是由于所有允许我计算AUC的R程序包/函数都使用基础数据作为输入。也就是说,预测因子和响应而不是敏感性和1特异性的值。

我已经阅读了R中'pROC'软件包的文档,但没有发现任何帮助。 我想我可以使用 integrate()来积分绘图曲线下的面积吗?但是,这样做的问题是,我不会收到AUC的置信区间(这是我的荟萃分析所需要的)。

这是我从一个ROC曲线(使用https://apps.automeris.io/wpd/)生成的数据:

# data table:
AUC_data_1 <- tibble("1-specificity" = c(-0.0031751800795011,
0.05421559172249585, 0.12174003874893036,0.20579144833428253,
0.3012443157265138, 0.502266554865223, 0.6205366469297053,
0.8417661384716209, 
sensitivity = c(0.002260831241825745, 0.16879823941344285,
0.45899739288954267, 0.5804040305755962, 0.7849062327396981,
0.8634686874873007, 0.9710785309748188, 0.9977448923815709))

# roc curve generated from data:
plot(AUC_data_1)

我想根据此ROC曲线计算AUC。但是,由于我没有基础数据(即响应和预测变量),因此无法在R中使用pROC软件包。

1 个答案:

答案 0 :(得分:0)

您需要做的第一件事是清理数据。 ROC曲线的起点为(0,0),终点为(1,1)。如果曲线上缺少这些点,则AUC将被低估。这是尝试的修复程序:

AUC_data_1 <- tibble("one.minus.specificity" = c(0,
0.05421559172249585, 0.12174003874893036,0.20579144833428253,
0.3012443157265138, 0.502266554865223, 0.6205366469297053,
0.8417661384716209, 1),
sensitivity = c(0, 0.16879823941344285,
0.45899739288954267, 0.5804040305755962, 0.7849062327396981,
0.8634686874873007, 0.9710785309748188, 0.9977448923815709, 1))

确保您了解从此服务获取的数据的质量和可靠性。

那么,正如您所猜测的,这只是一个集成游戏。我喜欢pramma的trapz函数,该函数使用梯形规则:

library(pracma)
trapz(AUC_data_1$one.minus.specificity, AUC_data_1$sensitivity)
[1] 0.6268943

关于不确定性,您应该看一下Obuchowski(1)的工作,该工作将ROC曲线的方差表示为AUC,样本大小和双正态拟合参数的函数,可以通过灵敏度和仅限特异性:

 model <- lm(1-one.minus.specificity~sensitivity, AUC_data_1)

您将find the code directly in the pROC source。尽管它是私有的,但您应自担风险(该功能不会导出,并且可能随时消失)。像这样:

A <- coefficients(model)[1]
B <- coefficients(model)[2]
kappa <- n.controls / n.cases # number of case and control observations
# use internal function at your own risk
pROC:::var.params.obuchowski(A, B, kappa) / n.cases
[1] 0.1125403

他们还提出了不需要双正态系数的方法:

A <- qnorm(theta) * 1.414
(0.0099 * exp(-A^2/2)) * ((5 * A^2 + 8) + (A^2 + 8)/kappa) / n.cases
[1] 0.7846169

θ是您上面计算的曲线的AUC。

    南希·奥布科夫斯基(Nancy A. Obuchowski),唐娜·K·麦克利什(Donna K. McClish)(1997)。 ``涉及双正态ROC曲线指数的诊断性准确研究的样本量确定''。医学统计学,16(13),1529--1542。 DOI:(SICI)1097-0258(19970715)16:13<1529::AID-SIM565>3.0.CO;2-H
  1. Nancy A. Obuchowski,Micharl L. Lieber和Frank H. Wians Jr.(2004年)“临床化学中的ROC曲线:用途,滥用和可能的解决方案”。临床化学,第50期,1181-1125年。 DOI:10.1373/clinchem.2004.031823