ROC曲线纵坐标为真阳性率(TPR灵敏度),横坐标为假阳性率(1-特异度FPR)。关于真阳性率,假阳性率等的概念这里不做赘述。曲线越靠近左上角,越有诊断价值,ROC曲线下面积越大,越有应用价值。
横坐标:1-Specificity,伪正类率(False positive rate, FPR),预测为正但实际为负的样本占所有负例样本的比例;
纵坐标:Sensitivity,真正类率(True positive rate, TPR),预测为正且实际为正的样本占所有正例样本的比例。
在作图过程中可能出现需要多个不同时间的ROC曲线,比如1年,3年,5年该如何绘制ROC曲线在一张图上呢!
install.packages("survivalROC")
library(survivalROC)
require(ggsci)
library("scales")
pal_nejm("default")(8)
show_col(pal_nejm("default")(8))
rt=read.table("lassoRisk.txt",header=T,sep="\t",check.names=F,row.names=1) #??ȡlasso?ع??????ļ?
pdf(file="ROC.pdf",width=6,height=6)
par(oma=c(0.5,1,0,1),font.lab=1.5,font.axis=1.5)
roc=survivalROC(Stime=rt$futime, status=rt$fustat, marker = rt$riskScore,
predict.time =5, method="KM")
plot(roc$FP, roc$TP, type="l", xlim=c(0,1), ylim=c(0,1),col='#BC3C29FF',
xlab="False positive rate", ylab="True positive rate",
main=paste("ROC curve"),
lwd = 2, cex.main=1.3, cex.lab=1.2, cex.axis=1.2, font=1.2)
roc1=survivalROC(Stime=rt$futime, status=rt$fustat, marker = rt$riskScore,
predict.time =3, method="KM")
lines(roc1$FP, roc1$TP, type="l",col="#0072B5FF",xlim=c(0,1), ylim=c(0,1))
roc2=survivalROC(Stime=rt$futime, status=rt$fustat, marker = rt$riskScore,
predict.time =1, method="KM")
lines(roc2$FP, roc2$TP, type="l",col="#EE4C97FF",xlim=c(0,1), ylim=c(0,1))
legend(0.6,0.2,c(paste("AUC of 5 year = ",round(roc$AUC,3)),
paste("AUC of 3 year = ",round(roc1$AUC,3)),
paste("AUC of 1 year = ",round(roc2$AUC,3))),
x.intersp=1, y.intersp=0.8,
lty= 1 ,lwd= 2,col=c("#BC3C29FF","#0072B5FF","#EE4C97FF"),
bty = "n",# bty框的类型
seg.len=1,cex=0.8)#
abline(0,1,col="gray",lty=2)
dev.off()
生信小白:如果有疑问可以加群或者联系我,随时愿意解答。
Weixin: xuningbo6926
邮箱:nbxu1206@gmail.com
生信分析交流群:1098119483
qq生信分析交流群二维码:见下图,加入群聊,有最新代码及课程资料(生信自学网,生信技能树)更新!