pROC -如何获取置信区间或生成混淆矩阵

3htmauhk  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(152)

我使用pROC包进行ROC分析。它给了我敏感性,特异性等。
杂志要求提供的每个统计数据都有95%的置信区间。我知道我可以在epiR包中做到这一点,但我必须给予它一个混淆矩阵。
如何使用pROC提供的阈值来获得混淆矩阵?
样本数据和代码:

library(pROC)
library(tibble)

data<-tribble(
  ~death, ~score,
  0, 0.132,
  1, 0.19, 
  0, 0.03,
  1, 0.131,
  0, 0.02
)

roc<-roc(data$death, data$score, smoothed = TRUE,
              ci=TRUE, ci.alpha=0.95, stratified=FALSE,
              plot=TRUE, auc.polygon=TRUE, max.auc.polygon=TRUE, grid=TRUE,
              print.auc=TRUE, show.thres=TRUE)

coords(roc, x="best", ret=c("threshold", "specificity", "sensitivity", "accuracy",
                                 "precision", "recall", "tpr", "ppv", "fpr"))
eqqqjvef

eqqqjvef1#

要生成混淆矩阵,首先需要根据阈值分配预测结果(预测死亡,预测存活)。AUC是在数据中每个可能的阈值上计算的。在我的示例中,我任意选择了第二个最低的阈值来生成示例

#first assign a threshold
thres <- roc$thresholds[2]

#assign labels to your data according to the threshold
data$predicted_death <- data$score > thres

#convert to character vector to facilitate interpretation
data$predicted_death <-ifelse(data$predicted_death==1, "predicted_dead", "predicted_alive")
data$death <- ifelse(data$death==1, "dead", "alive")

#count the true positives, false positives, false negatives and true negatives in a confusion matrix using the R function table()
cm <- table(data$death, data$predicted_death)

我建议选择一个阈值来优化敏感性和特异性,例如约登指数。

dy2hfwbg

dy2hfwbg2#

混淆矩阵是一个表,其中|假阳性|负计数。
你可以用coords函数得到它(虽然不是一个表):

> coords(roc, x=0.0805, ret=c("tn", "tp", "fn", "fp"))
#           tn tp fn fp
# threshold  2  2  0  1

您可以使用ci.coords函数获得置信区间:

> ci.coords(roc, x=0.0805, ret=c("tn", "tp", "fn", "fp"))
# 95% CI (2000 stratified bootstrap replicates):
#        threshold tn.low tn.median tn.high tp.low tp.median tp.high fn.low
# 0.0805    0.0805      0         2       3      2         2       2      0
#        fn.median fn.high fp.low fp.median fp.high
# 0.0805         0       0      0         1       3

您只需要将数据重新组织为您认为合适的表。

相关问题