R语言有多种包可以画ROC曲线,如比较出名的有ROCR包,pROC包等。如有2个以上变量,则可单独画在一张图上,也可以变量为单位分开画。下面主要讲pROC包,也会提一下经典的ROCR。
###pROC#####################
install.packages("pROC")
library(pROC)
setwd()
ROCR1<- read.csv("ROC1.csv") ##读入数据,主要为红色框中的内容
ROCR1[1:5,1:4]
####pROC画总的曲线
model1 <- glm(ROCR1$group~ROCR1$Gene1+group1$Gene2, data=ROCR1, family='binomial')
pre <- predict(model1,type='response')
modelroc <- roc(ROCR1$group,pre)
plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),
grid.col=c("green", "red"), max.auc.polygon=TRUE,
auc.polygon.col="skyblue", print.thres=TRUE, main="Gene1+Gene2")
dev.off()
结果如下图:
总的如上图。但也可以根据每个基因分开画ROC图,数据格式保持不变,唯一的区别是如下构建model时只需提取ROCR1$gene1的数据。具体如下:
#####分开画 Gene1
model2 <- glm(ROCR1$group~ROCR1$ Gene1, data=ROCR1, family='binomial')
pre2 <- predict(model2,type='response')
# install.packages("pROC")
library(pROC)
modelroc <- roc(ROCR1$group,pre2)
plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),
grid.col=c("green", "red"), max.auc.polygon=TRUE,
auc.polygon.col="skyblue", print.thres=TRUE, main="CTSD")
dev.off()
结果如下图:
2.采用ROCR画ROC图 数据格式与上面保持一致
library(ROCR)
##Gene1
pred <-prediction(ROCR1$Gene1 ,ROCR1$group)
perf <- performance(pred,"tpr","fpr")
#plot(perf, col='red',lty=2)
auc <- performance(pred,'auc')
auc = unlist(slot(auc,"y.values"))
plot(perf,
xlim=c(0,1), ylim=c(0,1),col='red', xlab= "1-Specificity",ylab="Sensitivity",
main=paste("ROC curve (", "AUC = ",auc,")"),
lwd = 2, cex.main=1.3, cex.lab=1.2, cex.axis=1.2, font=1.2)
abline(0,1)
结果如下图
在两种方法中,个人比较倾向于第一种。因为它直接就包含了AUC,灵敏度及特异度,而第二种方法中我没有找到灵敏度与特异度,还需要花时间去探索ROCR包。另外,还package可以将总的曲线和各变量的曲线画在同一个图中,这个以后再总结和补充。