2017-09-13 73 views
0

我试图通过逻辑回归进行分类。为了评估模型,我使用了confusionMatrix和ROC。问题是这两个软件包的结果是不同的。我想弄清楚哪一个是对还是错。混淆的不同结果矩阵的caret包和ROC的Epi包在R

  1. 我的数据是这样的: 数据名称= newoversample,有29个变量和4802周的观察。 “q89”是预测变量。

  2. 我尝试:

从 '^符号' 库

(1)混淆矩阵

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)ROC从曲线“ Epi'文库

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

结果是: roc curve

,你可以看到,在这里,灵敏度是91和特异性是78,其是由(1)混淆矩阵的结果不同。

我不明白为什么结果是不同的,哪一个是正确的。

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

请帮帮我!

三江源

回答

0

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

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

希望这有助于!