给定这样的数据:SN =灵敏度;SP =特异性
Cutpoint SN 1-SP
1 0.5 0.1
2 0.7 0.2
3 0.9 0.6
如何绘制ROC曲线并计算AUC。并比较两个不同ROC曲线之间的AUC。在大多数pROC或ROCR软件包中,数据输入与上面显示的不同。有人可以建议用R或其他方法解决此问题的方法吗?
ROCsdat <- data.frame(cutpoint = c(5, 7, 9), TPR = c(0.56, 0.78, 0.91), FPR = c(0.01, 0.19, 0.58))
## plot version 1
op <- par(xaxs = "i", yaxs = "i")
plot(TPR ~ FPR, data = dat, xlim = c(0,1), ylim = c(0,1), type = "n")
with(dat, lines(c(0, FPR, 1), c(0, TPR, 1), type = "o", pch = 25, bg = "black"))
text(TPR ~ FPR, data = dat, pos = 3, labels = dat$cutpoint)
abline(0, 1)
par(op)
首先,我建议您访问当地的图书馆,并找到有关R的入门书籍。拥有坚实的基础很重要,然后您才能编写自己的代码,并在互联网上找到粘贴粘贴的代码而不真正理解其含义。风险最大。
关于您的问题,我相信(0,0)和(1,1)坐标是ROC曲线的一部分,因此我将它们包括在数据中:
ROCsdat <- data.frame(cutpoint = c(-Inf, 5, 7, 9, Inf), TPR = c(0, 0.56, 0.78, 0.91, 1), FPR = c(0, 0.01, 0.19, 0.58, 1))
我强烈建议您在R的此阶段培训中不要设置自己的梯形积分功能。它太容易出错,容易被小错误(语法错误)弄乱。
而是使用完善的集成代码,例如中的trapz
函数pracma
:
library(pracma)
trapz(ROCsdat$FPR, ROCsdat$TPR)
我想您大部分都可以得到绘图,尽管我会略有不同地写出来:
plot(TPR ~ FPR, data = ROCsdat, xlim = c(0,1), ylim = c(0,1), type="b", pch = 25, bg = "black")
text(TPR ~ FPR, data = ROCsdat, pos = 3, labels = ROCsdat$cutpoint)
abline(0, 1, col="lightgrey")
为了进行比较,假设您在auc1
和中有两个AUC auc2
。if / else语法如下所示:
if (auc1 < auc2) {
cat("auc1 < auc2!\n")
} else if (auc1 == auc2) {
cat("aucs are identical!\n")
} else {
cat("auc1 > auc2!\n")
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句