R语言计算诊断指标:Cutoff值、约登指数、敏感度、特异度等

本文将介绍如何使用R语言计算常见的诊断指标,包括:

  • Cutoff值: 最佳分类阈值
  • 约登指数(Youden index): 敏感度和特异度之和减去1
  • 临界值: ROC曲线上的分类阈值
  • 敏感度(Sensitivity): 真阳性率
  • 特异度(Specificity): 真阴性率
  • 准确度(Accuracy): 正确预测的比例
  • LRP(阳性似然比): 阳性预测值
  • LRN(阴性似然比): 阴性预测值
  • 诊断比值比(Diagnostic Odds Ratio,DOR): LRP与LRN的比值
  • 阳性预测值(Positive Predictive Value,PPV): 真阳性率 / (真阳性率 + 假阳性率)
  • 阴性预测值(Negative Predictive Value,NPV): 真阴性率 / (真阴性率 + 假阴性率)

我们将使用pROC包中的roc函数和performance函数来计算这些指标,以下代码示例基于一个名为train的训练数据集和一个名为test的测试数据集:

# 加载pROC包
library(pROC)

# 训练模型(以逻辑回归为例)
f1 <- lrm(分组 ~ 指压诱发实验阳性 + Ba + 小漏斗 + 肛提肌损伤, 
         x=T, y=T, 
         data = train)

# 在测试集上预测概率
test_prob <- predict(f1, newdata = test, type = 'fitted')

# 创建ROC对象
rocobj <- roc(test$分组, test_prob)

1. 计算Cutoff值

可以使用coords函数计算最佳的Cutoff值,该函数会返回最佳的Cutoff值和对应的最大Youden指数:

coords(rocobj, 'best', best.method = 'youden')

2. 计算约登指数

同样可以使用coords函数计算约登指数:

coords(rocobj, 'best', best.method = 'youden')$youden

3. 计算临界值

临界值是指在ROC曲线上,真阳性率等于真阴性率时对应的分类阈值。可以使用coords函数计算临界值:

coords(rocobj, 'best', best.method = 'closest.topleft')$threshold

4. 计算敏感度、特异度、准确度

可以使用performance函数计算敏感度、特异度、准确度:

perf <- performance(rocobj, measure = c('sens', 'spec', 'acc'))
sens <- perf@y.values[[1]]
spec <- perf@y.values[[2]]
acc <- perf@y.values[[3]]

5. 计算LRP、LRN

LRP和LRN分别表示阳性似然比(Positive Likelihood Ratio)和阴性似然比(Negative Likelihood Ratio),可以使用以下公式计算:

LRP = sens / (1 - spec)
LRN = (1 - sens) / spec

6. 计算诊断比值比、阳性预测值、阴性预测值

可以使用以下公式计算诊断比值比、阳性预测值、阴性预测值:

DOR = LRP / LRN
PPV = sens * prevalence / (sens * prevalence + (1 - spec) * (1 - prevalence))
NPV = spec * (1 - prevalence) / ((1 - sens) * prevalence + spec * (1 - prevalence))

其中,prevalence表示测试集中正样本的比例。

通过以上代码示例,您可以方便地使用R语言计算各种诊断指标,并在实际项目中应用它们来评估模型的性能。

注意: 上述代码示例仅供参考,您需要根据实际情况进行修改和调整。

如果您需要了解更深入的诊断指标知识,可以参考相关文献或咨询专业人士。


原文地址: https://www.cveoy.top/t/topic/ooo5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录