在 glm() 之后导出预测值以获得 PPV、NPV、灵敏度和特异性

Derive preidcted values after glm() in order to get PPV, NPV, sensitivity and specificity

我有 运行 一个 glm() 模型;但现在我想用 PPV、NPV、灵敏度和特异性来衡量模型的准确性。但是,我不断得到令人困惑的结果。

我的结果是一个如下所示的因子变量:

table(mydata$outcome)

   0    1 
6824  359

预测变量是连续变量与 1 个分类变量(性别)的组合。

我的代码是:

# To run the logistic model 

    mod <- glm(outcome~predictor1+predictor2+predictor3,data=mydata,family=binomial("logit"))
    summary(mod)

# To run predict() to get the predicted values of the outcome 

    predicted = predict(object =  mod, newdata=mydata, type = "response")

结果如下所示:

head(predicted)
         1          2          3          4          5          6 
0.02568802 0.02979873 0.01920584 0.01077031 0.01279325 0.09725329 

这非常令人惊讶,因为我预计会观察到预测的“1”(病例)与“0”(对照),我可以进一步使用它来通过 confusionMatrix(predicted, mydata$outcome) 或使用 ModelMetrics 库。

所以我的问题是如何获得 4x4 table(预测与观察)结果,我可以用它来衡量我的 glm() 模型预测结果的准确性?如果有任何建议,我将不胜感激,或者如果有更好的方法来获得 PPV、NPV、灵敏度和特异性,请告诉我。谢谢你。

您的 glm 模型给出了两种结果的概率。通常,人们希望将“1”分配给概率 >= 的任何事件。 5 和 0 否则。你可以用 round() 来做到这一点。在更多 'machine-learny' 类型的情况下,人们可能会考虑除 .5 之外的其他值。您可以使用 ifelse() fn 来做到这一点。例如,如果您只想将“1”分配给概率为 .7 的情况,您可以说 vals = ifelse(mydata$outcome >.7,1,0 )。最后,你想要的数据通常被称为混淆矩阵。它可以通过各种包来计算,但这里有一个来自姊妹站点的很好的解决方案 - R: how to make a confusion matrix for a predictive model?