在 R 中计算具有不同阈值的敏感性、特异性、NPV 和 PPV
Posted
技术标签:
【中文标题】在 R 中计算具有不同阈值的敏感性、特异性、NPV 和 PPV【英文标题】:Calculate Sensibility, Specificity, NPV and PPV with different thresholds in R 【发布时间】:2014-09-22 11:36:34 【问题描述】:我正在使用以下代码来计算敏感性、特异性、NPV 和 PPV,并使用 RandomForest 作为分类器。
suppressMessages(require(randomForest));
classifier <- randomForest(x.train,y.train,ntree=300,importance=T)
prediction <<- predict(classifier,x.test,type="response")
suppressMessages(require(caret));
accuracyData <- confusionMatrix(prediction,y.test)
在accuracyData中,我有关于预测质量的所有信息(敏感性、特异性等)。
无论如何,我想针对不同的阈值进行此计算,但我不知道如何在我的代码中指定这样的值。
【问题讨论】:
什么是x.train
? y.train
?请添加一些示例数据
只需通过predict
运行候选“x.test”的向量,并将它们与预测响应进行对比。灵敏度和特异性是在特定的切点计算的,因此您可能没有您认为的那么多信息。
【参考方案1】:
问题在于,当您预测“响应”时,您会做出二分法的决定,并且会丢失有关不确定性的信息。那时,已经应用了一个阈值来做出决定。如果您想尝试不同的阈值,则应改为输出响应的概率。例如
#sample data
set.seed(15)
x<- matrix(runif(100,0,5), ncol=1)
y<- 3-2*x[,1] + rnorm(100, 2, 2)
y<- factor(ifelse(y>median(y), "A","B"))
x.train<-x[1:50,, drop=F]
y.train<-y[1:50]
x.test<-x[-(1:50),,drop=F]
y.true<-y[-(1:50)]
#fit the model
library(randomForest)
classifier <- randomForest(x.train,y.train,ntree=500,importance=T)
prediction <- predict(classifier,x.test, type="prob")
#calculate performance
library(pROC)
mroc<-roc(y.true, prediction[,1], plot=T)
然后我们可以计算不同阈值的感兴趣值
coords(mroc, .5, "threshold", ret=c("sensitivity","specificity","ppv","npv"))
# sensitivity specificity ppv npv
# 0.7586207 0.8095238 0.8461538 0.7083333
coords(mroc, .9, "threshold", ret=c("sensitivity","specificity","ppv","npv"))
# sensitivity specificity ppv npv
# 0.9655172 0.6666667 0.8000000 0.9333333
【讨论】:
谢谢!这就是我要找的东西!以上是关于在 R 中计算具有不同阈值的敏感性、特异性、NPV 和 PPV的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用caret包的predict函数对模型在测试集上的表现进行推理和预测计算模型的混淆矩阵设置参数mode计算基于混淆矩阵产生的衍生指标(特异度敏感度F1ppvnpv等)
R语言编写自定义函数计算分类模型评估指标:准确度特异度敏感度PPVNPV数据数据为模型预测后的混淆矩阵比较多个分类模型分类性能(逻辑回归决策树随机森林支持向量机)
R语言加载UCI糖尿病数据集并启动Rattle GUI调用party包中的ctree函数构建条件推理树模型Rattle混淆矩阵使用R自定义编写函数通过混淆矩阵计算特异度敏感度PPVNPV