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

问题描述 投票:1回答:1

我正在对某些风险评估工具的表现进行荟萃分析。我的目标是汇总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包。

r roc auc
1个回答
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))

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

然后你猜对了它只是一个整合游戏。我喜欢使用梯形规则的pracma中的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

其中theta是您在上面计算的曲线的AUC。

  1. Nancy A. Obuchowski,Donna K. McClish(1997)。 ``涉及正常ROC曲线指数的诊断准确性研究的样本量确定''。医学统计,16(13),1529--1542。 DOI:(SICI)1097-0258(19970715)16:13<1529::AID-SIM565>3.0.CO;2-H
  2. Nancy A. Obuchowski,Micharl L. Lieber和Frank H. Wians Jr.(2004)“临床化学中的ROC曲线:使用,误用和可能的解决方案”。临床化学,50,1118-1125。 DOI:10.1373/clinchem.2004.031823
© www.soinside.com 2019 - 2024. All rights reserved.