在 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?
我有 运行 一个 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?