【问题标题】:How to calculate the AUC from a ROC plot without the underlying data?如何在没有基础数据的情况下从 ROC 图计算 AUC?
【发布时间】:2019-09-02 04:49:47
【问题描述】:

我正在对某些风险评估工具的表现进行荟萃分析。我的目标是汇总针对特定工具的几个有效性研究的 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 包。

【问题讨论】:

  • 这看起来不像 ROC 曲线。第一个 1-specificity 值是负数,它没有锚定在 (0, 0) 和 (1,1)。
  • 你是对的。这些数字只是近似值,因为它们是直接从图形本身中提取的。我应该在发布它们之前先清理它们。很抱歉。

标签: r roc auc


【解决方案1】:

您需要做的第一件事是清理您的数据。 ROC曲线在(0,0)开始,并在(1,1)处结束。如果您的曲线中缺少这些点,则aciS将低估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

其中θ是您在上面计算的曲线的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

【讨论】:

  • 谢谢!这真的很有帮助,解决了我的问题。抱歉在清理首先清理数据之前发布数据。 span>
猜你喜欢
  • 2015-10-17
  • 2019-05-15
  • 1970-01-01
  • 2017-11-12
  • 2022-10-13
  • 2019-11-10
  • 2016-01-23
  • 2021-04-21
  • 1970-01-01
相关资源
最近更新 更多