创建函数,R语言求解cutoff, AUC, 95%置信区间,敏感性,特异性

Python019

创建函数,R语言求解cutoff, AUC, 95%置信区间,敏感性,特异性,第1张

cal_metrics <- function(label, pred){

  roc.p=pROC::roc(label, pred,ci =T)

  if (roc.p$auc>0.5){

    cutoff=roc.p$thresholds[which.max(roc.p$sensitivities+roc.p$specificities)]

    sensitivity=roc.p$sensitivities[which.max(roc.p$sensitivities+roc.p$specificities)]

    specificity=roc.p$specificities[which.max(roc.p$sensitivities+roc.p$specificities)]

    ci = roc.p$ci

    df=data.frame(type='positive classification',

                  auc=round(roc.p$auc,3),cutoff=cutoff,

                  sensitivity=sensitivity,specificity=specificity,ci_lower = ci[1],ci_upper=ci[3])

    return(df)

  }

  else{

    cutoff=roc.p$thresholds[which.min(roc.p$sensitivities+roc.p$specificities)]

    sensitivity=roc.p$sensitivities[which.min(roc.p$sensitivities+roc.p$specificities)]

    specificity=roc.p$specificities[which.min(roc.p$sensitivities+roc.p$specificities)]

    ci = roc.p$ci

    df=data.frame(type='negative classification',

                  auc=1-round(roc.p$auc,3),cutoff=cutoff,

                  sensitivity=1-sensitivity,specificity=1-specificity,ci_lower = ci[1],ci_upper=ci[3])

    return(df)

  }

}

不需要排序。直接用quantile就可以。你看看是不是跟你的情况相似

set.seed(1234)

d <- sample(1:10000,1000,replace = F)

quantile(d, probs = seq(0,1,0.25))

由已知条件可知μ=100,δ=5,我们需要把符合正态分布的随即变量x根据公式u=(x-μ)/δ转化为符合标准正态分布的常量u。

区间[85,115]带入公式,可得u的常量区间为[-3,3],然后查标准正态分布表

得u<3的区间概率为0.9987,u<-3的概率为1-0.9987,so,[-3,3]区间的概率为0.9987-(1-0.9987)=0.9974