其他
基于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语言的一样。
参考资料
R语言实战第二版
既往专辑