基于R语言的多指标联合预测ROC曲线分析

在前面推文中介绍过基于MedCalc软件联合多个预测指标预测ROC曲线分析的教程,在后台有小伙伴留言怎么使用R语言实现这种操作。

今天就介绍下用R语言怎么做。

1. 安装和加载包

绘制ROC曲线使用pROC包,构建Logistic回归使用glmnet包。

install.packages("pROC") # 安装包
install.packages("glmnet") # 建立Logistic回归模型需要
library(pROC) # 加载包
library(glmnet)

2. 加载数据集

使用pROC包自带的数据集进行演示。

rm(list = ls()) # 清除环境
data("aSAH") # 加载数据集
head(aSAH) # 查看数据集

3. 建立Logistic回归模型

当使用很多连续变量和/或分类变量来预测二值型结果变量时,可以使用Logistic回归。

假设我们需要分析s100b和ndka这两个指标联合预测outcome变量的能力。

先构建逻辑回归模型。

fit1 <- glm(outcome ~ s100b + ndka,
            data=aSAH,
            family = binomial())  
summary(fit1)

结果解释可以看R语言实战这本书,里面讲解的很详细。

4. 计算预测概率

使用predict()函数,可以观察某个预测变量在各个水平时对结果概率的影响。

aSAH$prob <- predict(fit1, 
                     newdata=aSAH, 
                     type="response")
head(aSAH)

在数据集最后多了一列,这一列就是联合指标的预测概率值。

5. 拟合ROC曲线

分别绘制三条ROC曲线,比较s100b变量、ndka变量以及联合指标预测的预测能力。

roc1 <- roc(aSAH$outcome, aSAH$s100b) 
roc2 <- roc(aSAH$outcome, aSAH$ndka)
roc3 <- roc(aSAH$outcome, aSAH$prob)
roc1;roc2;roc3

6. 绘制图形

前面介绍过绘制ROC曲线的详细教程。

具体可参考这篇推文R语言统计与绘图:pROC包绘制ROC曲线

plot(roc1,  # 前面构建的ROC对象
     print.auc=TRUE, # 图像上输出AUC值
     print.auc.x=0.5, print.auc.y=0.5, # AUC值坐标为(x,y)
     auc.polygon=TRUE, # 将ROC曲线下面积转化为多边形
     auc.polygon.col="skyblue",  # 设置多边形的填充颜色
     grid= FALSE, # 不显示网格背景线
     legacy.axes=TRUE)  # 使横轴从0到1,表示为1-特异度
plot.roc(roc2, add=TRUE,  # 增加曲线
         col = "red", # 设置曲线颜色
         print.auc=TRUE, # 图像上输出AUC
         print.auc.col = "red", # 设置AUC文本的颜色
         print.auc.x=0.5, print.auc.y=0.4)  # AUC的坐标为(x,y)
plot.roc(roc3, add=TRUE,  # 增加曲线
         col = "#ffb549", # 设置曲线颜色
         print.auc=TRUE, # 图像上输出AUC
         print.auc.col = "#ffb549", # 设置AUC文本的颜色
         print.auc.x=0.5, print.auc.y=0.3)  # AUC的坐标为(x,y)

7. 使用MedCalc验证一下

先导出数据集,将数据集复制到MedCalc软件中,如下图所示。

具体操作请参考这篇文章联合诊断ROC分析及曲线下面积的比较

验证结果

使用软件计算的预测概率值和R软件计算的是一样的。

使用MedCalc软件绘制的ROC曲线,与R语言的一样。

参考资料

  1. R语言实战第二版
统计与绘图

Origin绘图中的常见问题集锦

2020-10-5 22:24:47

统计与绘图

Excel制作Treemap教程

2020-10-8 22:48:43

加入Q群
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索