转录组分析五:ROC曲线
简介
ROC(Receiver Operating Characteristic)曲线分析是一种广泛用于分类模型性能评估的工具,尤其适用于处理二分类问题。在基因研究中,ROC曲线通常用于评估不同基因在预测疾病状态、临床分型或其他生物学现象中的敏感性和特异性。它通过比较基因的表达水平与实际的类别标签(如健康与疾病)之间的关系,评估该基因在区分不同类别的能力。
AUC(Area Under the Curve)是ROC曲线下方的面积值,它可以作为模型性能的一个量化指标。AUC值越接近1,表示模型的预测能力越强。AUC = 1:表示完美分类器。AUC = 0.5:表示分类器没有任何区分能力,相当于随机预测。AUC < 0.5:表示分类器性能较差,预测结果不可靠。
今天生信分析实习生来分享如何使用R语言进行多基因的ROC 分析,并计算AUC值绘制ROC曲线,后台私信发送“转录组分析五”可领取示例数据与源代码。
step1 加载必要的包和读取数据
数据主要有三个文件:
“deseq2_result_diff_count.csv”文件为转录组分析一里面获取的差异基本丰度数据,该节内容也包含了“group.csv”文件。
“string_node_degrees.tsv”文件为转录组分析四获得的基因互作强度文件
## 加载必要的包
library(ggplot2)
library(tidyverse)
library(pROC)
# 读取degree数据和所有差异基因的表达数据
degree_data <- read.csv('string_node_degrees.tsv',comment.char = '',header = T,sep = '\t',check.names = F)
exp_data <- read.csv('deseq2_result_diff_count.csv',header = T,row.names = 1)
group <- read.csv('group.csv',header = T)
step2 提取基因丰度合并数据
根据基因的degree强度提取5个Hub基因名,然后提取这些基因的丰度数据绘制ROC曲线。
# 按照node_degree降序排序,并选取前5个节点,然后提取对应的基因表达数据
top5_nodes <- degree_data %>%
arrange(desc(node_degree)) %>%
head(5) %>%
pull(`#node`)
top5_nodes <- as.data.frame(t(exp_data[top5_nodes,]))
## 将基因表达数据的样本顺序排序设置为group里面的样本顺序,然后合并分组信息
top5_nodes <- top5_nodes[group$sample,]
rownames(top5_nodes)==group$sample
top5_nodes$Group <- group$group
step3 将分组信息转为二分类变量
# 将Group列转换为二元变量,Control = 0, 其他组 = 1
top5_nodes$Group_binary <- ifelse(top5_nodes$Group == "Control", 0, 1)
step4 进行多物种ROC分析,并提取数据
# 初始化一个空数据框,用于存储所有基因的ROC结果
roc_results <- data.frame(Gene = character(),
Sensitivity = numeric(),
Specificity = numeric(),
AUC = numeric(),
stringsAsFactors = FALSE)
# 遍历每个基因进行ROC分析
for (gene in names(top5_nodes)[1:(ncol(top5_nodes)-2)]) { # 遍历基因列
# 计算ROC
roc_obj <- roc(top5_nodes$Group_binary, top5_nodes[[gene]], smooth=T)
# 提取每个基因的多行数据
temp_data <- data.frame(
Gene = rep(gene, length(roc_obj$sensitivities)), # 每行对应同一个基因
Sensitivity = roc_obj$sensitivities, # 敏感性
Specificity = roc_obj$specificities, # 特异性
AUC = rep(auc(roc_obj), length(roc_obj$sensitivities)) # 重复AUC值
)
# 合并到总数据框
roc_results <- rbind(roc_results, temp_data)
}
step5 绘图
# 修改Gene列以包含AUC值
roc_results$Gene <- paste0(roc_results$Gene, " (AUC=", round(roc_results$AUC, 2), ")")
## 绘制多基因ROC曲线
ROC_plot <- ggplot(roc_results, aes(x = 1 - Specificity, y = Sensitivity, color = Gene)) +
geom_line(size=1.5) + # 绘制基因ROC曲线
geom_abline(intercept = 0, slope = 1, linetype = "dashed", color = "gray",size=1.5) + # 添加对角线
scale_x_continuous(expand = c(0,0))+
scale_y_continuous(expand = c(0,0))+
theme_bw() +
labs(
title = "ROC Curves with AUC for Hub Genes",
x = "1 - Specificity",
y = "Sensitivity",
color = "Gene (AUC)"
) +
theme(legend.position = "right",
axis.title = element_text(size = 25,face = 'bold'),
axis.text = element_text(size = 20,color = 'black'),
legend.title = element_text(size = 25,face = 'bold'),
axis.ticks = element_blank(),
legend.text = element_text(size = 20),
plot.margin = unit(c(4,4,4,4),'cm'),
plot.title = element_text(hjust = 0.5,size = 30,face = 'bold'))
ggsave(plot = ROC_plot,'ROC_plot.png',width = 12,height = 8,dpi = 300)
ggsave(plot = ROC_plot,'ROC_plot.pdf',width = 12,height = 8)

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)