我有一个100个样本的数据集,每个样本有195个突变及其相应的已知临床意义(“RealClass”)和根据某些预测工具预测的值(“PredictionValues”)
对于演示,这是一个随机数据集,其结构与我的数据集相同:
predictions_100_samples<-as.data.frame(matrix(nrow=19500,ncol=3))
colnames(predictions_100_samples)<-c("Sample","PredictionValues","RealClass")
predictions_100_samples$Sample<-rep(c(1:100), each = 195)
predictions_100_samples$PredictionValues<-sample(seq(0,1,length.out=19500))
predictions_100_samples$RealClass<-rep(c("pathogenic","benign"),each=10)
colours_for_ROC_curves<-rainbow(n=100)
我通过PROC包将所有这100个样本绘制为ROC曲线:
library("pROC")
roc_both <- plot(roc(predictor=predictions_100_samples[1:195,2],response = predictions_100_samples[1:195,3]), col = colours_for_ROC_curves[1],main="100 samples ROC curves",legacy.axes=TRUE,lwd=1)
i=2
for(i in 1:100){
set.seed(500)
roc_both <- plot(roc(predictor=predictions_100_samples[(((i-1)*195)+1):(i*195),2],response = predictions_100_samples[(((i-1)*195)+1):(i*195),3]), col = colours_for_ROC_curves[i], add = TRUE,lwd=1)
i=i+1
}
这就是最终情节的样子:
现在,我想将所有100个绘制的ROC曲线的平均ROC曲线添加到同一个图中 . 我试图通过我写的循环中的"roc"函数使用为每个阈值计算的灵敏度和特异性(可以通过 roc_both$sensitivities
, roc_both$specificities
, roc_both$thresholds
获得)
但主要问题是所选择的阈值是随机的,并且沿着我绘制的100条ROC曲线不相等,所以我无法手动计算平均ROC曲线 .
是否有不同的包可以让我生成多条ROC曲线的平均ROC曲线?或者是否有一个包允许手动设置计算灵敏度和特异性的阈值,所以我以后可以计算平均ROC曲线?你可能对我的问题有不同的解决方案吗?
谢谢 !
1 回答
您可以使用
cutpointr
通过oc_manual
函数手动指定阈值 . 我稍微改变了数据生成,以便ROC曲线看起来更好一些 .我们对所有样本应用相同的阈值序列,并采用每个阈值的灵敏度和特异性的平均值来得到“平均ROC曲线” .
您可以使用
cutpointr
以这种方式绘制单独的ROC曲线和添加的平均ROC曲线:或者,您可能需要查看汇总ROC曲线(SROC)的理论,以拟合组合多个ROC曲线的参数模型 .