You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中针对金标准数据集计算特异性、敏感性、预测值及绘制ROC曲线?

在R中计算诊断指标及绘制ROC曲线

一、基础概念回顾

  • 敏感性(Sensitivity):真阳性率,即金标准阳性的样本中被检测为阳性的比例,公式:TP/(TP+FN)
  • 特异性(Specificity):真阴性率,即金标准阴性的样本中被检测为阴性的比例,公式:TN/(TN+FP)
  • 阳性预测值(PPV):检测阳性的样本中实际为阳性的比例,公式:TP/(TP+FP)
  • 阴性预测值(NPV):检测阴性的样本中实际为阴性的比例,公式:TN/(TN+FN)
    其中:
  • TP:真阳性(检测阳性,金标准阳性)
  • FN:假阴性(检测阴性,金标准阳性)
  • TN:真阴性(检测阴性,金标准阴性)
  • FP:假阳性(检测阳性,金标准阴性)

二、基于交叉表计算诊断指标

你已经构建了两个交叉表tab1和tab2,结构为table(检测结果, 金标准),可以直接从中提取TP/FN/TN/FP来计算指标:

针对SIH_NMM_TOTAL vs NMM_TOTAL(tab1)

# 提取交叉表中的数值
TP <- tab1[2, 2]  # 检测阳性,金标准阳性
FN <- tab1[1, 2]  # 检测阴性,金标准阳性
TN <- tab1[1, 1]  # 检测阴性,金标准阴性
FP <- tab1[2, 1]  # 检测阳性,金标准阴性

# 计算各指标
sensitivity_nmm <- TP / (TP + FN)
specificity_nmm <- TN / (TN + FP)
ppv_nmm <- TP / (TP + FP)
npv_nmm <- TN / (TN + FN)

# 输出结果
cat("SIH_NMM的诊断指标:\n")
cat("敏感性:", round(sensitivity_nmm, 2), "\n")
cat("特异性:", round(specificity_nmm, 2), "\n")
cat("阳性预测值:", round(ppv_nmm, 2), "\n")
cat("阴性预测值:", round(npv_nmm, 2), "\n")

针对SIH_CPAV_TOTAL vs CPAV_TOTAL(tab2)

# 提取交叉表中的数值
TP <- tab2[2, 2]
FN <- tab2[1, 2]
TN <- tab2[1, 1]
FP <- tab2[2, 1]

# 计算各指标
sensitivity_cpav <- TP / (TP + FN)
specificity_cpav <- TN / (TN + FP)
ppv_cpav <- TP / (TP + FP)
npv_cpav <- TN / (TN + FN)

# 输出结果
cat("\nSIH_CPAV的诊断指标:\n")
cat("敏感性:", round(sensitivity_cpav, 2), "\n")
cat("特异性:", round(specificity_cpav, 2), "\n")
cat("阳性预测值:", round(ppv_cpav, 2), "\n")
cat("阴性预测值:", round(npv_cpav, 2), "\n")

三、绘制ROC曲线

ROC曲线用于评估诊断试验的准确性,我们可以使用pROC包来实现:

步骤1:安装并加载包

install.packages("pROC")  # 首次使用需安装
library(pROC)

步骤2:绘制SIH_NMM vs NMM的ROC曲线

# 构建ROC对象
roc_nmm <- roc(response = data$NMM_TOTAL, predictor = data$SIH_NMM_TOTAL)

# 绘制ROC曲线
plot(roc_nmm, 
     main = "ROC Curve: SIH_NMM vs NMM Gold Standard",
     col = "blue", 
     lwd = 2,
     print.auc = TRUE)  # 自动显示AUC值

步骤3:绘制SIH_CPAV vs CPAV的ROC曲线

# 构建ROC对象
roc_cpav <- roc(response = data$CPAV_TOTAL, predictor = data$SIH_CPAV_TOTAL)

# 绘制ROC曲线
plot(roc_cpav, 
     main = "ROC Curve: SIH_CPAV vs CPAV Gold Standard",
     col = "red", 
     lwd = 2,
     print.auc = TRUE)

注:由于你的检测指标是二分类(0/1),ROC曲线会呈现为一个点加两条线段,AUC值反映整体诊断准确性,越接近1说明准确性越高。

内容的提问来源于stack exchange,提问作者Lana Meijinhos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 19:31:36