R语言小白绘图系列|第40弹·生存时间依赖性ROC曲线

文摘   2024-11-03 18:39   德国  

R 语言小白绘图系列

第 40 弹|生存时间依赖性ROC曲线

生存ROC曲线简介

生存时间依赖性ROC曲线(Time-dependent ROC Curve)是用于生存分析中的工具,其主要目的是评估模型对生存时间和生存状态的预测能力。生存时间是指个体在研究中存活的时间,生存状态是指个体是否经历了特定事件(如死亡、复发等)。生存ROC曲线通过处理生存数据中的删失现象,生成时间依赖的ROC曲线,从而评估模型在不同时间点的预测准确性。

关联解释:

  • 生存时间:是研究的核心变量,表示个体在研究中的生存时长。
  • 生存状态:表示在观察期间,个体是否发生了感兴趣的事件(如死亡、复发等)。在生存分析中,状态通常是二分类变量(事件发生与否)。

通过生存ROC曲线,模型能够在多个时间点上评估其对生存时间和状态的预测性能。

应用实例

下图是一个生存时间依赖性ROC曲线,图中横坐标代表假阳性率,纵坐标代表真阳性率;曲线下面积AUC(Area Under Curve)用来衡量预测的准确性,AUC值越接近1,预测的准确性越高。下图反映了通过风险score来预测患者1年生存率的准确性,其AUC为0.772。

图 生存时间依赖性ROC曲线

源文件

图 源文件示意图

输入文件包含

  • id: 样品名称
  • futime:生存时间
  • fustat:生存状态
  • score:风险评分(或基因表达量)

代码

环境准备

这段代码的目的是安装并加载R包 survivalsurvminertimeROC,为时间依赖的ROC分析准备数据。具体解释如下:

逐行解释:

# 安装必要的R包
install.packages("survival")
install.packages("survminer")
install.packages("timeROC")
  • 这三行代码分别用于安装survivalsurvminertimeROC包:
    • survival:用于生存分析。
    • survminer:用于生存分析结果的可视化。
    • timeROC:用于绘制随时间变化的ROC曲线,适合生存数据的评估。
# 加载所需的R包
library(survival)
library(survminer)
library(timeROC)
  • 这三行代码加载了刚刚安装的三个包,使得后续代码可以使用这些包中的函数来进行生存分析和时间依赖的ROC曲线绘制。
# 设置输入文件、输出文件和变量名
inputFile = "input.txt"  # 定义输入数据文件
outFile = "ROC.pdf"      # 定义输出文件名
var = "score"            # 定义需要进行ROC分析的变量
  • inputFile:指定输入文件,数据将从input.txt中读取。
  • outFile:指定输出文件,将绘制的时间依赖的ROC曲线保存为PDF文件"ROC.pdf"
  • var:指定用于分析的变量名,这里为"score"
# 设置工作目录
setwd("D:\\biowolf\\bioR\\42.timeROC")
  • 这行代码设置当前工作目录为D:\\biowolf\\bioR\\42.timeROC。所有读取输入文件和写入输出文件的操作都会在这个目录中进行。

总结

这段代码的目的是安装必要的包并设置好工作环境,为接下来的生存分析和时间依赖的ROC曲线绘制做准备。通过timeROC包,可以生成随时间变化的ROC曲线,来评估生存模型的预测性能。

读取输入文件

这段代码的目的是读取输入文件 input.txt,并将其内容存储到数据框 rt 中。以下是逐行解释:

rt = read.table(inputFile, header = TRUE, sep = "\t", check.names = FALSE)

参数解释:

  1. inputFile

  • 之前定义的变量,指向要读取的文件,文件名为 input.txt
  • header = TRUE

    • 表示文件的第一行是列名。R将第一行数据解析为列名。
  • sep = "\t"

    • 指定文件的列是以制表符(Tab,\t)分隔的。适用于制表符分隔的文本文件。
  • check.names = FALSE

    • 默认情况下,read.table() 会自动修改不合法的列名(例如带有空格的列名)。设置 check.names = FALSE,可以保留原始的列名。

    总结:

    这段代码的功能是从 input.txt 文件中读取数据并加载到数据框 rt 中,保留原始的列名,并将第一行作为列名处理。这是读取生存分析数据或时间依赖ROC分析数据的常见步骤。

    绘制

    这段代码的目的是基于生存数据,使用timeROC包来绘制预测1年生存的时间依赖ROC曲线,并计算AUC(曲线下面积)。以下是逐行解释:

    # 计算时间依赖的ROC曲线
    ROC_rt = timeROC(T = rt$futime, delta = rt$fustat,
                     marker = rt[, var], cause = 1,
                     weighting = 'aalen',
                     times = c(1), ROC = TRUE)  # 预测时间1年
    • T = rt$futimefutime表示生存时间,作为时间变量传递给timeROC
    • delta = rt$fustatfustat表示生存状态,通常1表示事件(如死亡),0表示未发生事件。
    • marker = rt[, var]var是之前定义的用于ROC分析的变量(如score),rt[, var]表示提取这个变量的值。
    • cause = 1:指定感兴趣的事件是1,例如死亡等事件。
    • weighting = 'aalen':使用Aalen加权法进行分析,常用于时间依赖的生存分析。
    • times = c(1):指定要分析的时间点为1年,表示计算1年生存率的ROC曲线。
    • ROC = TRUE:生成ROC曲线对象。
    # 保存ROC曲线到PDF文件
    pdf(file = outFile, width = 5, height = 5)
    • pdf():设置绘图设备为PDF,将绘制的ROC曲线保存为outFileROC.pdf),页面宽度为5英寸,高度为5英寸。
    # 绘制1年生存率的ROC曲线
    plot(ROC_rt, time = 1, col = 'red', title = FALSE, lwd = 2)
    • plot(ROC_rt, time = 1):绘制在1年时的ROC曲线。
    • col = 'red':将曲线颜色设置为红色。
    • title = FALSE:不显示图的标题。
    • lwd = 2:设置曲线的线条宽度为2。
    # 在图上显示AUC值
    text(0.650.45, paste0('AUC = ', sprintf("%.03f", ROC_rt$AUC[2])), cex = 1.2)
    • text(0.65, 0.45, ...):在图中位置(0.65, 0.45)处显示文本,具体位置可以根据曲线和图形的需求调整。
    • paste0('AUC = ', sprintf("%.03f", ROC_rt$AUC[2])):计算并格式化AUC值,保留三位小数。
      • ROC_rt$AUC[2]:提取1年时的AUC值(时间依赖ROC计算的结果)。
    • cex = 1.2:设置文本大小为1.2倍。
    dev.off()
    • dev.off():关闭PDF设备,完成图形的保存。

    总结

    这段代码的作用是基于时间依赖的ROC分析,绘制预测1年生存率的ROC曲线,并计算和显示AUC值。绘制的图形保存为PDF文件(ROC.pdf),并在图中标注了AUC值,用于评估模型的分类性能。

    图 生存时间依赖性ROC曲线

    本文作者:充电宝团队


    现在:


    长按扫码关注:科研生信充电宝


    10元赞赏本文,即喜欢作者~


    即可直接解锁:


    《R语言小白绘图系列|第40弹·生存时间依赖性ROC曲线》对应资源哦~


    看到这里你还不心动吗?


    赶紧关注、转发、点赞、分享,领取你的专属福利吧~



    好啦,以上就是今天推文的全部内容啦!


    版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本公众号不拥有所有权,也不承担相关法律责任。

    如果您发现本公众号中有涉嫌抄袭的内容,欢迎发送邮件至:kysxcdb@163.com 进行举报,一经查实,本公众号将立刻删除涉嫌侵权内容。


    科研生信充电宝
    介绍科研;介绍统计;介绍生信;
     最新文章