【问题标题】:different results from confusionMatrix of caret package and ROC of Epi package in RR中插入符号包的confusionMatrix和Epi包的ROC的不同结果
【发布时间】:2018-02-22 09:38:33
【问题描述】:

我正在尝试通过逻辑回归进行分类。为了评估模型,我使用了confusionMatrix 和ROC。问题是这两个包的结果是不同的。我想弄清楚哪个是对的,哪个是错的。

  1. 我的数据如下: 数据名称 = newoversample,有 29 个变量和 4802 个观测值。 “q89”是预测变量。

  2. 我的尝试:

(1) 'caret' 库中的混淆矩阵

    glm.fit = glm(q89 ~ ., newoversample, family = binomial)
    summary(glm.fit)
    glm.probs=predict(glm.fit,type="response")
    glm.pred=rep(0,4802)
    glm.pred[glm.probs>.5]="1"
    library(caret)
    confusionMatrix(data=glm.pred, reference=newoversample$q89)

结果是:

    Confusion Matrix and Statistics

              Reference
    Prediction    0    1
             0 2018  437
             1  383 1964

           Accuracy : 0.8292          
             95% CI : (0.8183, 0.8398)
        No Information Rate : 0.5             
        P-Value [Acc > NIR] : < 2e-16         

              Kappa : 0.6585          
     Mcnemar's Test P-Value : 0.06419         

        Sensitivity : 0.8405          
        Specificity : 0.8180          
     Pos Pred Value : 0.8220          
     Neg Pred Value : 0.8368          
         Prevalence : 0.5000          
     Detection Rate : 0.4202          
       Detection Prevalence : 0.5112          
          Balanced Accuracy : 0.8292          

           'Positive' Class : 0 

(2) 'Epi' 库中的 ROC 曲线

    library(Epi)
    rocresult <- ROC(form = q89 ~ ., data = newoversample, MI = FALSE, main = "over")
    rocresult

结果是: roc curve

如您所见,这里的敏感性为 91,特异性为 78,这与 (1)confusion Matrix 的结果不同。

我无法弄清楚为什么结果不同,哪一个是正确的。

+) 如果第二种方法(ROC曲线)是错误的,请告诉我如何从第一种方法计算auc或绘制roc曲线。

请帮帮我!

谢谢你

【问题讨论】:

    标签: r


    【解决方案1】:

    我认为混淆矩阵看起来不错。鉴于您没有定义“正类”,因此默认情况下将其设置为 0。

    问题在于 ROC 图。 roc 曲线仍然可以使用Epi::ROC,但您应该使用Epi::ROC(test = newoversample$q89, stat = glm.pred, MI = FALSE, main = "over") 这样一来,灵敏度和特异度应该与矩阵相差不大。

    当您使用 ROC(form = q89 ~ ., data = newoversample, MI = FALSE, main = "over") 时,这意味着您将逻辑回归传递给与 glm 模型不同的 form 参数。在这种情况下,您应该为ROC 函数提供teststat 参数的值(check here for more detail on Epi::ROC)。

    【讨论】:

      【解决方案2】:

      您应该绘制您使用 glm 构建的同一模型的 ROC 曲线

      library(ROCR)
      pred <- prediction(predict(glm.fit), newoversample$q89)
      perf <- performance(pred,"tpr","fpr")
      plot(perf)
      

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2014-03-06
        • 1970-01-01
        • 2018-11-11
        • 2017-05-08
        • 2016-11-22
        • 2020-08-17
        • 2017-07-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多