R 语言小白绘图系列
第 39 弹|多指标ROC曲线
多指标ROC曲线简介
MultiVarROC 是一种用于评估多变量分类器性能的扩展技术。它类似于常规的ROC(接收者操作特征)曲线,但专注于处理涉及多个特征或变量的复杂分类问题。MultiVarROC 主要用于以下几种场景:
多变量分类模型的性能评估 在涉及多个输入变量或特征的模型中,MultiVarROC 可以评估模型在处理这些多维特征时的分类性能。与单一变量不同,模型在多维度上可能表现得更加复杂,MultiVarROC 可以帮助量化这些复杂情况。 不同特征组合下的模型表现 MultiVarROC 可以帮助分析多个变量组合对模型性能的影响。通过观察不同特征组合下的ROC曲线,可以了解哪些特征组合对模型的分类性能影响最大。 模型比较 MultiVarROC 曲线通常可以用于对多个不同模型在多变量数据集上的表现进行对比。在同一图上绘制多个模型的 ROC 曲线,可以帮助我们直观地了解不同模型在面对多维特征时的分类效果。
计算 MultiVarROC
TPR (True Positive Rate, 真阳性率) 和 FPR (False Positive Rate, 假阳性率) 在多维度特征下仍然是关键指标,ROC曲线会展示模型在不同阈值下的真阳性率和假阳性率。 AUC (Area Under the Curve, 曲线下面积) 是一个常用的性能评估指标,AUC 越大,表明分类器性能越好。
MultiVarROC 的应用场景
医学诊断:在医疗诊断中,常常涉及多个生物标志物的组合,MultiVarROC 可以用于评估基于多变量的诊断模型的性能。 金融风控:评估多个特征(如收入、信用评分、还款历史等)在预测信用风险模型中的表现。 基因组学研究:用于分析多个基因特征在分类疾病类型或预测疾病风险中的作用。
通过 MultiVarROC,可以更清楚地了解多维特征对模型分类性能的影响,从而帮助我们优化模型并选择最佳特征组合。
应用实例
下图是一个多指标ROC曲线,它展示了通过三个基因(见图例)去预测患者的生存状态,比较哪个基因的预测准确性最高。图中横坐标代表特异性,纵坐标代表敏感性;曲线下面积AUC(Area Under Curve)用来衡量预测的准确性,AUC值越接近1,预测的准确性越高。下图中红色曲线的AUC值最大,说明TTYH3基因的预测准确性最好;绿色曲线的AUC值最小,说明SNRPGP14基因的预测准确性最差。
源文件
输入文件包含
id: 样品名称
Type:预测结论(正常/肿瘤)
基因的表达量
代码
环境准备
这段代码的目的是为多变量ROC分析做好准备工作。它安装并加载了pROC
包,设置输入、输出文件和工作目录,并读取输入数据。以下是逐行解释:
# 安装并加载pROC包
install.packages("pROC")
library(pROC)
这行代码用于安装并加载 pROC
包。pROC
包在R中用于生成和分析ROC曲线,并计算AUC(曲线下面积)等指标。
# 设置输入文件、输出文件和工作目录
inputFile = "input.txt" # 输入数据文件名
outFile = "ROC.pdf" # 输出PDF文件名
setwd("D:\\biowolf\\bioR\\41.multiVarROC") # 设置工作目录
inputFile
:指定要读取的输入文件,文件名为"input.txt"
。outFile
:指定生成的ROC图像输出文件,保存为"ROC.pdf"
。setwd()
:设置当前的工作目录为D:\\biowolf\\bioR\\41.multiVarROC
,确保所有读取和写入操作都在该目录下进行。
# 读取数据并处理
rt = read.table(inputFile, header = TRUE, sep = "\t", check.names = FALSE, row.names = 1)
read.table()
:读取制表符分隔的数据文件inputFile
。header = TRUE
:表示文件的第一行是列名。sep = "\t"
:文件列由制表符分隔。check.names = FALSE
:不修改列名,保留原始列名。row.names = 1
:将第一列作为行名。
# 提取第一个列名作为响应变量
y = colnames(rt)[1]
colnames(rt)
:提取数据框rt
的所有列名。colnames(rt)[1]
:获取第一列的列名并存储到变量y
中,这通常是ROC分析中的目标变量(如标签或实际状态)。
总结
这段代码的功能是为后续的多变量ROC分析做好准备。它读取了输入数据,提取第一列的列名作为响应变量(y
),并设置了输出文件名和工作目录。后续将基于这些数据进行多变量ROC曲线分析和绘制。
定义颜色
这段代码的目的是根据输入数据的列数动态生成用于绘制ROC曲线的颜色方案。具体解释如下:
bioCol = c("red", "blue", "green", "yellow")
这行代码定义了一个包含4种颜色的初始颜色方案 bioCol
,分别为红色、蓝色、绿色和黄色。这是默认的颜色方案。
if(ncol(rt) > 4){
bioCol = rainbow(ncol(rt))
}
ncol(rt)
:返回数据框rt
中的列数。如果列数大于4(即变量数量多于4个),则会执行条件语句。bioCol = rainbow(ncol(rt))
:当rt
的数据框有超过4列时,使用rainbow()
函数生成一个包含与列数相同数量的彩虹颜色数组,以确保每个变量都有不同的颜色。
总结
这段代码根据数据的维度动态调整颜色方案。如果列数小于或等于4,使用预定义的4种颜色。如果列数大于4,则根据列数生成一个彩虹色数组,确保每列都有独特的颜色。这一步通常在可视化(例如绘制多个ROC曲线)时非常有用。
绘制
这段代码的目的是绘制多个ROC曲线,并将曲线图保存为PDF文件。它还会计算并显示每个变量的AUC值。以下是逐行解释:
# 开始保存绘图到PDF文件
pdf(file = outFile, width = 5, height = 5)
pdf()
:设置PDF输出设备,将图形保存为outFile
(即"ROC.pdf"),并设置宽度为5英寸,高度为5英寸。
# 绘制第一个ROC曲线并计算AUC
roc1 = roc(rt[, y], as.vector(rt[, 2]))
aucText = c(paste0(colnames(rt)[2], ", AUC=", sprintf("%0.3f", auc(roc1))))
plot(roc1, col = bioCol[1])
roc(rt[, y], as.vector(rt[, 2]))
:计算第一个ROC曲线,rt[, y]
是目标变量,as.vector(rt[, 2])
是第2列的预测值。auc()
:计算第一个ROC曲线的AUC值,并使用sprintf()
函数将其格式化为小数点后三位。aucText
:创建一个字符向量,存储第2列的列名以及其对应的AUC值,后面会用于图例的显示。plot(roc1, col = bioCol[1])
:绘制第一个ROC曲线,颜色由bioCol[1]
指定。
# 循环绘制剩余的ROC曲线,并计算AUC值
for(i in 3:ncol(rt)) {
roc1 = roc(rt[, y], as.vector(rt[, i]))
lines(roc1, col = bioCol[i - 1]) # 添加新的ROC曲线
aucText = c(aucText, paste0(colnames(rt)[i], ", AUC=", sprintf("%0.3f", auc(roc1)))) # 添加AUC文本
}
for(i in 3:ncol(rt))
:从第3列开始遍历数据的所有列。roc(rt[, y], as.vector(rt[, i]))
:计算当前列的ROC曲线。lines(roc1, col = bioCol[i - 1])
:使用lines()
函数将每个ROC曲线绘制到同一图中,颜色为bioCol[i - 1]
。aucText = c(aucText, ...)
:将每个变量的列名及其对应的AUC值追加到aucText
向量中,方便后续在图例中展示。
# 绘制图例
legend("bottomright", aucText, lwd = 2, bty = "n", col = bioCol[1:(ncol(rt) - 1)])
legend()
:在图的右下角显示图例。"bottomright"
:设置图例的位置为右下角。aucText
:显示包含列名和AUC值的字符向量。lwd = 2
:图例线条宽度设置为2。bty = "n"
:去掉图例的边框。col = bioCol[1:(ncol(rt) - 1)]
:为每条ROC曲线对应的颜色设置图例颜色。
# 关闭PDF设备,保存绘图
dev.off()
dev.off()
:关闭PDF设备,完成文件的保存。
总结
这段代码实现了以下功能:
读取数据中的多个变量,计算每个变量的ROC曲线和AUC值。 将多个ROC曲线绘制在同一个图中,并为每条曲线添加不同的颜色。 计算每条ROC曲线的AUC值,并在图例中显示每个变量的名称和对应的AUC值。 最后,将绘图保存为PDF文件。
该代码非常适合用于同时比较多个变量的分类性能,通过AUC来评估它们的区分能力。
本文作者:充电宝团队
现在:
长按扫码关注:科研生信充电宝
10元赞赏本文,即喜欢作者~
即可直接解锁:
《R语言小白绘图系列|第39弹·多指标ROC曲线》对应资源哦~
看到这里你还不心动吗?
赶紧关注、转发、点赞、分享,领取你的专属福利吧~
好啦,以上就是今天推文的全部内容啦!
版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本公众号不拥有所有权,也不承担相关法律责任。
如果您发现本公众号中有涉嫌抄袭的内容,欢迎发送邮件至:kysxcdb@163.com 进行举报,一经查实,本公众号将立刻删除涉嫌侵权内容。