正文

手把手教你用R语言评价临床预测模型,一文就够(附代码)

  (五)模型的评价

  接下啦我们即将开始对模型进行评价,需要注意的是,我们对模型的评价应该要做三方面,分别是区分度(discrimination)、校正度(Calibration) 和决策曲线分析( decision curve analysis, DCA)。具体的理论知识我简单介绍一下。区分度就是模型能不能区分是或者否发生某个结局时间。

  我们通常以ROC曲线下面积AUC衡量区分能力。0.5-0.7代表模型的区分能力差,这个模型不太适用。0.7-0.9这个模型的区分能力较好,已经能够应用在医学领域。而大于0.9则表明这个模型的区分效果很好。而校正度(calibration)则是,你得出的预测概率是否和真实的结果一致性评价。我们一般用Hosmer-Lemeshow (H-L) test评价,所得统计量卡方值越小、对应P值越大校准度越好。最后的DCA就模型进行预测时是否真正的能够净获益。我们首先进行区分度的检验,而模型的区分能力,具有两个评判指标,分别是ROC曲线下面积和C指数(C-index),对于logistic回归分析来说,我们使用ROC曲线下面积(AUC)这一个指标就可以了。

  插上一句,在进行模型的评价时,我们如果用训练集training_set来评价模型显然并不合理,这未免就有王婆卖瓜自卖自夸的嫌疑了。所以,就需要我们的test_set了。首先我们使用训练集所得到的模型对测试集的每一个观测进行预测。得出每一个观测出现结局事件的预测概率,我们展现前面的十个预测值的结果。

  y_pred = predict(classifier, newdata = test_set[-4],type = "response")

  y_pred[1:10]

  ## 2 4 5 9 12 14

  ## 0.023999387 0.009636432 0.003276809 0.002999543 0.006156426 0.010334937

  ## 18 19 20 22

  ## 0.293941724 0.368247383 0.438425694 0.564420975

  我们可以看到前面十个的预测值的结果其实并不是返回的0或者1,而是返回一个个小数,这是什么呢?其实这代表通过模型进行预测后,预测结局变量为阳性结果的可能性。接下来我们进行ROC曲线的计算,这里我们使用时ROC的pROC包。没有安装的的同学记得安装一下。

  ##install.packages(“pROC”)

  library(pROC)

  ## Type 'citation("pROC")' for a citation.

  ##

  ## Attaching package: 'pROC'

  ## The following objects are masked from 'package:stats':

  ##

  ## cov, smooth, var

  ROC=roc(test_set[,4],y_pred)

  ## Setting levels: control = 0, case = 1

  ## Setting direction: controls < cases

  计算ROC曲线下面积和最佳阈值,并绘图。

  auc(ROC)

  ## Area under the curve: 0.9103

  plot(ROC,print.thres=T,print.thres.best.method="youden")

  这样就绘制出了我们的ROC曲线,得到曲线下面积是0.9103,根据我们之前所说的这个模型很棒了对不对。并且我们打印出其最佳的阈值,也就是0.2940,其特异度和灵敏度分别是0.844,0.907。这里的最佳阈值即是约登指数最高的值,等于也就是灵敏度与特异度之和减去1。也就是曲线最左上角的那个点。接下来我们稍微美化一下图片

  plot(smooth(ROC),col="red",print.auc=T,legacy.axes=T)

  legend("bottomright",legend = c("smoothed"),col = "red",lwd = 2)

  这样是不是好看多了呢?

来源:挑圈联靠 阿琛 风间琉璃
爱科学

上一篇:SPSS教程:如何用图表构建器构建简单散点图和矩阵散点图?

下一篇:返回列表

推荐信息

登录注册
欢迎内容投稿或举报!E-mail: ikx@ikx.cn
Copyright © 爱科学 iikx.com