R 语言小白绘图系列
第 41 弹|多时间点依赖的生存ROC曲线
多时间点依赖的生存ROC曲线简介
多时间点依赖的生存ROC曲线(time-dependent ROC curve)是一种用于评估生存模型预测性能的关键工具。它通过在不同时间节点上计算敏感性和特异性,展示了模型在各时间点对结局事件的预测能力。相较于传统的ROC曲线,此方法能够捕捉到生存数据的动态特性,有助于揭示模型在不同随访期的准确度和稳定性。多时间点依赖的生存ROC曲线广泛应用于生物医学研究,尤其是在癌症预后、心血管风险预测等领域,提供了对模型性能更为全面的评估。
应用实例
下图是一个多时间点依赖的生存ROC曲线,图中横坐标代表假阳性率,纵坐标代表真阳性率;曲线下面积AUC用来衡量预测的准确性,AUC值越接近1,预测的准确性越高。图中有三条曲线,代表同一变量的三个不同时间点(见图例),可以看出:绿色曲线的AUC最大,红色曲线的AUC最小;即可得出,通过该变量预测患者的1年生存率准确性最高,预测3年生存率其准确性最低。
源文件
输入文件包含
id: 样品名称
futime:生存时间
fustat:生存状态
score:风险评分(或基因表达量)
代码
环境准备
这段代码的目的是安装并加载survival
、survminer
和timeROC
三个R包,设置输入输出文件和工作目录,为多时间点的ROC曲线分析做准备。以下是逐行解释:
逐行解释:
# 安装必要的R包
install.packages("survival")
install.packages("survminer")
install.packages("timeROC")
这三行代码分别用于安装 survival
、survminer
和timeROC
包:survival
:用于生存分析,处理生存时间和状态。survminer
:用于生存分析结果的可视化,特别是生存曲线的绘制。timeROC
:用于生成时间依赖的ROC曲线,以评估不同时间点上的模型性能。
# 加载已安装的R包
library(survival)
library(survminer)
library(timeROC)
这三行代码加载了 survival
、survminer
和timeROC
包,以便在接下来的分析中使用这些包中的函数。
# 设置输入文件、输出文件和变量名
inputFile = "input.txt" # 定义输入数据文件
outFile = "ROC.pdf" # 定义输出文件名,保存ROC曲线
var = "score" # 指定用于分析的变量,称为“score”
inputFile
:设置输入数据文件的名称为input.txt
,这个文件将包含用于生存分析的数据。outFile
:设置输出文件名为ROC.pdf
,最终绘制的ROC曲线将保存为这个PDF文件。var = "score"
:指定用于分析的变量为"score"
,将用于生成时间依赖的ROC曲线。
# 设置工作目录
setwd("D:\\biowolf\\bioR\\43.multiTimeROC")
setwd()
:设置当前工作目录为D:\\biowolf\\bioR\\43.multiTimeROC
,所有文件的读取和保存都将在这个目录下进行。
总结
这段代码的主要作用是安装和加载survival
、survminer
和timeROC
包,设置输入输出文件以及工作目录,为后续基于score
变量的多时间点ROC分析做准备。通过这些设置,接下来可以根据指定的变量绘制不同时间点的ROC曲线,并保存到PDF文件中。
读取输入文件
这段代码的目的是从指定的文件 input.txt
中读取数据,并将其存储在数据框 rt
中。以下是逐行解释:
# 读取输入数据文件
rt = read.table(inputFile, header = TRUE, sep = "\t", check.names = FALSE)
参数解释:
inputFile
:指向你之前定义的输入文件(即input.txt
)。
该文件包含生存时间(如 futime
)、生存状态(如fustat
)以及你需要进行时间依赖ROC分析的变量(如score
)。
header = TRUE
:
表示文件的第一行是列名。R会将第一行解析为列名,而不是数据的一部分。
sep = "\t"
:
指定文件中的列是以制表符( Tab
)分隔的。如果输入文件是制表符分隔的文本文件,使用这个参数可以正确解析数据。
check.names = FALSE
:
不自动修改列名。默认情况下,R会自动修改列名中包含非法字符的部分,但设置为 FALSE
后,列名将保持原样。
总结
这段代码通过read.table()
函数从input.txt
中读取数据,并存储到数据框rt
中。你可以在后续分析中对rt
进行操作,生成时间依赖的ROC曲线。
绘制
这段代码的目的是绘制基于生存数据的多时间点ROC曲线(1年、2年、3年)并显示各时间点的AUC值。以下是逐行解释:
# 计算时间依赖的ROC曲线
ROC_rt = timeROC(T = rt$futime, delta = rt$fustat,
marker = rt[, var], cause = 1,
weighting = 'aalen',
times = c(1, 2, 3), ROC = TRUE)
T = rt$futime
:futime
表示生存时间,将其作为时间变量。delta = rt$fustat
:fustat
表示生存状态,1表示事件发生(如死亡),0表示事件未发生。marker = rt[, var]
:var
是指定的用于计算ROC的变量(如"score"),表示预测变量。cause = 1
:指定感兴趣的事件是1
(通常表示死亡)。weighting = 'aalen'
:使用Aalen加权法进行时间依赖ROC计算。times = c(1, 2, 3)
:指定多个时间点,分别计算1年、2年、3年的ROC曲线。ROC = TRUE
:生成ROC曲线对象。
# 打开PDF设备,开始保存绘图
pdf(file = outFile, width = 5, height = 5)
pdf()
:设置PDF输出,将生成的ROC曲线图保存为指定的文件outFile
(即ROC.pdf
),宽度为5英寸,高度为5英寸。
# 绘制不同时间点的ROC曲线
plot(ROC_rt, time = 1, col = 'green', title = FALSE, lwd = 2) # 1年
plot(ROC_rt, time = 2, col = 'blue', add = TRUE, title = FALSE, lwd = 2) # 2年
plot(ROC_rt, time = 3, col = 'red', add = TRUE, title = FALSE, lwd = 2) # 3年
plot(ROC_rt, time = 1, ...)
:绘制1年的ROC曲线,线条颜色为绿色。plot(ROC_rt, time = 2, ..., add = TRUE)
:在同一图上添加2年的ROC曲线,线条颜色为蓝色。plot(ROC_rt, time = 3, ..., add = TRUE)
:在同一图上再添加3年的ROC曲线,线条颜色为红色。lwd = 2
:设置线条宽度为2。
# 添加图例,显示各时间点的AUC
legend('bottomright',
c(paste0('AUC at 1 year: ', sprintf("%.03f", ROC_rt$AUC[1])),
paste0('AUC at 2 years: ', sprintf("%.03f", ROC_rt$AUC[2])),
paste0('AUC at 3 years: ', sprintf("%.03f", ROC_rt$AUC[3]))),
col = c("green", 'blue', 'red'), lwd = 2, bty = 'n')
legend()
:在图的右下角添加图例。'bottomright'
:指定图例显示的位置为右下角。paste0('AUC at 1 year: ', sprintf("%.03f", ROC_rt$AUC[1]))
:显示1年时的AUC值,保留三位小数。类似地,ROC_rt$AUC[2]
和ROC_rt$AUC[3]
分别是2年和3年的AUC值。col = c("green", 'blue', 'red')
:分别为1年、2年和3年的曲线指定颜色。lwd = 2
:设置图例线条的宽度。bty = 'n'
:去除图例的边框。
# 关闭PDF设备,保存绘图
dev.off()
** dev.off()
**:关闭PDF设备,完成文件的保存。绘制的ROC曲线已保存为指定的PDF文件。
总结
这段代码使用时间依赖的ROC分析,绘制了1年、2年、3年的ROC曲线,并显示每个时间点的AUC值。绘制结果保存为ROC.pdf
文件,且在图例中显示各时间点的AUC。
本文作者:充电宝团队
现在:
长按扫码关注:科研生信充电宝
10元赞赏本文,即喜欢作者~
即可直接解锁:
《R语言小白绘图系列|第41弹·多时间点依赖性的生存ROC曲线》对应资源哦~
看到这里你还不心动吗?
赶紧关注、转发、点赞、分享,领取你的专属福利吧~
好啦,以上就是今天推文的全部内容啦!
版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本公众号不拥有所有权,也不承担相关法律责任。
如果您发现本公众号中有涉嫌抄袭的内容,欢迎发送邮件至:kysxcdb@163.com 进行举报,一经查实,本公众号将立刻删除涉嫌侵权内容。