8.受试者工作特征曲线(ROC)

#======================================
# 原创代码无删减,编写不易,论文使用本代码绘图,请引用:www.tcmbiohub.com

# 祝大家投稿顺利!

##############################

# 安装需要的R包(首次使用需运行)
#install.packages("glmnet")
#install.packages("pROC")

# 配置R包路径,确保能正确加载依赖包
.libPaths(c(Sys.getenv("R_LIBS_USER"), .libPaths()))

# 加载需要的R包
library(glmnet)
library(pROC)

# 定义输入文件与工作路径
expFile="merge.normalize.txt"         # 表达矩阵文件
geneFile="interFeatureGenes.txt"     # 待分析基因列表文件
setwd("C:/Users/Administrator/Desktop/9.ROC")    # 设置工作目录

# 读取基因表达矩阵文件
rt=read.table(expFile, header=T, sep="\t", check.names=F, row.names=1)

# 提取样本分组信息(Control为0,疾病/其他组为1)
y=gsub("(.*)\\_(.*)\\_(.*)", "\\3", colnames(rt))
y=ifelse(y=="Control", 0, 1)

# 读取需要绘制ROC曲线的基因列表
geneRT=read.table(geneFile, header=F, sep="\t", check.names=F)

# 为每个基因生成不同的绘图颜色
bioCol=rainbow(nrow(geneRT), s=0.9, v=0.9)

# 循环对每个基因绘制ROC曲线
aucText=c()
k=0
for(x in as.vector(geneRT[,1])){
	k=k+1
	# 计算单个基因的ROC曲线
	roc1=roc(y, as.numeric(rt[x,]))
	# 绘制ROC曲线,第一个基因新建PDF,后续基因叠加到同一张图
	if(k==1){
		pdf(file="ROC.genes.pdf", width=5, height=4.5)
		plot(roc1, print.auc=F, col=bioCol[k], legacy.axes=T, main="", lwd=3)
		aucText=c(aucText, paste0(x,", AUC=",sprintf("%.3f",roc1$auc[1])))
	}else{
		plot(roc1, print.auc=F, col=bioCol[k], legacy.axes=T, main="", lwd=3, add=TRUE)
		aucText=c(aucText, paste0(x,", AUC=",sprintf("%.3f",roc1$auc[1])))
	}
}

# 添加图例,显示每个基因的名称和AUC值
legend("bottomright", aucText, lwd=3, bty="n", cex=0.9, col=bioCol[1:nrow(geneRT)])
dev.off()

#======================================
# 原创代码无删减,编写不易,论文使用本代码绘图,请引用:www.tcmbiohub.com

# 祝大家投稿顺利!