R语言小白绘图系列|第42弹·多指标比较的时间依赖性生存ROC曲线

文摘   2024-11-04 16:26   德国  

R 语言小白绘图系列

第 42 弹|多指标比较的时间依赖性生存ROC曲线

多指标比较的时间依赖性生存ROC曲线简介

多指标比较的时间依赖性生存ROC曲线(time-dependent ROC curve for multiple markers)是一种用于系统评估多个生物标志物或模型在生存预测中性能差异的重要工具。在生物医学研究中,尤其是癌症预后、心血管疾病风险预测和多系统疾病的长期随访分析中,多个生物标志物的联合分析能够提高预测的准确性。然而,由于生存数据具有右删失性质,传统的ROC曲线无法直接应用于此类数据分析。
因此,多指标的时间依赖性生存ROC曲线提供了对不同时间点上各指标或模型的预测效能的可视化比较,使研究者能够更清晰地识别和评估哪些标志物或模型在特定随访期内表现更优。

详细介绍与计算方法

时间依赖性生存ROC曲线基于生存时间与事件状态,计算多个时间节点的灵敏度和特异性,通过Cumulative/Dynamic AUC(累计/动态AUC)来量化预测效能。其核心是利用Kaplan-Meier估计或Cox比例风险模型等生存分析方法,结合每个时间点上的受试者工作特征(ROC)曲线来计算时间依赖的AUC值。这一方法能够有效处理删失数据,确保分析结果的稳健性和一致性。

对于多指标的比较而言,分析流程通常包含以下几个步骤:

  • 数据预处理与特征选择:筛选适合纳入生存分析的标志物,确保数据集的完整性与一致性。

  • 模型拟合与预测风险计算:根据所选指标构建生存模型(例如Cox模型或加速失效时间模型),预测各指标的个体化风险值。

  • 构建时间依赖性ROC曲线:利用生存ROC方法,在每个时间点上计算灵敏度和特异性,生成多指标的时间依赖性生存ROC曲线。

  • 计算并比较AUC值:通过对各时间点上不同指标的AUC值进行比较,评价每个标志物或模型在随访期间的预测能力差异。通常情况下,AUC值越高,表示该标志物在该时间点的预测效能越佳。

应用与解读

在实际应用中,多指标时间依赖性生存ROC曲线能够帮助研究者在多个生物标志物之间做出最优选择。例如,在癌症预后研究中,分析不同基因、蛋白质或临床特征在不同随访期的AUC值,可以揭示其对生存率的预测价值,从而优化临床决策。解读多指标的时间依赖性生存ROC曲线时,应关注以下几点:

  • 时间节点的选择:不同的时间节点可能对应着生存曲线的不同阶段(如短期预后与长期预后),选择合适的时间点能够更准确地评估标志物的动态效能。

  • AUC曲线趋势:随时间变化的AUC趋势能够反映标志物的预测能力是否随时间衰减或增强,对于制定个性化的动态风险管理策略具有指导意义。

  • 显著性检验:通过Delong检验等方法对不同标志物的AUC进行显著性比较,可以判断标志物或模型在统计学上是否存在显著差异。

时间依赖性生存ROC曲线在精准医学、风险评估和生物标志物筛选领域展现了强大的实用价值,是复杂数据分析中的重要工具之一。

应用实例

如果有多个变量可以用于预测患者的生存期,我们想知道哪个变量预测的准确性最高,可以通过多指标比较的时间依赖性生存ROC曲线来实现。下图是一个多指标比较的时间依赖性生存ROC曲线,图中横坐标代表假阳性率(1-特异性),纵坐标代表真阳性率(敏感性);曲线下面积AUC用来衡量预测的准确性,AUC值越接近1,预测的准确性越高。图中有多条曲线,每条曲线都代表一个指标(见图例);其中AUC最大的为riskScore,这表明通过风险评分来预测患者生存期的准确性最高。

图 多指标比较的时间依赖性生存ROC曲线

源文件

输入文件包含

id: 样品名称

futime:生存时间

fustat:生存状态

年龄、性别、分期、风险评分等变量/指标

代码

环境准备

这段代码的目的是安装并加载survivalsurvminertimeROC三个R包,为多变量的时间依赖ROC分析做准备。它还设置了输入输出文件和工作目录。以下是逐行解释:

逐行解释:

# 安装必要的R包
install.packages("survival")
install.packages("survminer")
install.packages("timeROC")
  • 这三行代码分别安装survivalsurvminertimeROC包:
    • survival:用于生存分析,处理生存时间和生存状态。
    • survminer:用于生存分析结果的可视化,特别是生存曲线和统计分析的图形化输出。
    • timeROC:用于生成时间依赖的ROC曲线,评估模型在不同时间点的预测性能。
# 加载已安装的R包
library(survival)
library(survminer)
library(timeROC)
  • 加载三个已安装的R包,这些包包含了执行生存分析和时间依赖ROC曲线所需的功能。
# 设置输入文件、输出文件和工作目录
inputFile = "input.txt"  # 定义输入数据文件
outFile = "ROC.pdf"      # 定义输出文件名,保存ROC曲线
  • inputFile:设置要读取的数据文件,文件名为input.txt,这个文件包含生存分析数据和需要评估的变量。
  • outFile:定义输出PDF文件名,绘制的时间依赖ROC曲线将保存为ROC.pdf
# 设置工作目录
setwd("D:\\biowolf\\bioR\\44.multiVarTimeROC")
  • setwd():设置工作目录为D:\\biowolf\\bioR\\44.multiVarTimeROC,确保后续的文件读取和保存操作都在这个路径下进行。

总结

这段代码的目的是为后续的多变量时间依赖ROC分析做准备,安装并加载了相关的R包,设置了数据文件的路径和输出结果的存储位置。接下来,可以基于这些设置进行时间依赖的ROC曲线分析,评估模型在不同时间点的分类性能。

读取输入文件

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

# 读取输入数据文件
rt = read.table(inputFile, header = TRUE, sep = "\t", check.names = FALSE, row.names = 1)

参数解释:

  1. inputFile

  • 指向之前定义的输入文件,文件名为"input.txt"
  • 该文件包含生存分析所需的数据,如生存时间、生存状态以及其他自变量(如基因表达、分数等)。
  • header = TRUE

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

    • 指定文件的列是以制表符(Tab)分隔的。如果输入文件是制表符分隔的文本文件,这个参数可以正确解析数据。
  • check.names = FALSE

    • 默认情况下,R会自动修改列名(如果列名中有不合法字符,比如空格等)。check.names = FALSE会保留原始列名,不进行自动修改。
  • row.names = 1

    • 将第一列的数据作为行名,而不是包含在数据矩阵中。如果第一列是样本ID或标识符,可以使用这个参数来设定它们为行名。

    总结

    这段代码的作用是从指定的文件中读取数据,并加载到数据框 rt 中。它会将第一行作为列名,第一列作为行名,使用制表符分隔各个字段。这个步骤通常是生存分析的预处理阶段,确保数据可以正确导入,以便后续分析使用。

    颜色设置

    这行代码的目的是为即将进行的可视化操作(例如绘制多变量的时间依赖性ROC曲线)创建一个颜色向量。具体解释如下:

    bioCol = rainbow(ncol(rt) - 2)

    解释:

    1. ncol(rt):

    • ncol()函数返回数据框 rt 的列数。这里的rt是之前读取的数据框。
    • 由于数据框中可能包含与生存时间(futime)和生存状态(fustat)等列,减去2以排除这两列。这样,颜色将只为剩余的变量(如预测变量)生成。
  • rainbow():

    • rainbow()函数生成一个颜色向量,颜色是按彩虹色谱分布的。这个函数的参数是生成颜色的数量。
    • ncol(rt) - 2作为参数,确保生成与数据框中剩余列数相匹配的颜色数。这个颜色向量将用于绘制不同变量的ROC曲线,每个变量用不同的颜色。

    效果:

    • 该行代码生成一个与变量数量相匹配的彩虹颜色向量,并将其存储在变量 bioCol 中。你可以在后续绘制多个曲线(如多变量时间依赖性ROC曲线)时使用这些颜色,使每条曲线有独特的颜色。

    总结

    这段代码根据数据框 rt 中的列数生成一个彩虹色谱的颜色列表,去除前两列(通常是生存时间和状态列),为剩余的预测变量生成颜色。这有助于在可视化中区分不同变量。

    绘制

    这段代码的目的是绘制多个变量在同一时间点的时间依赖性ROC曲线,并显示每个变量的AUC(曲线下面积)值。具体操作如下:

    逐行解释:

    aucText = c()
    • 这里初始化一个空向量 aucText,用于存储每个变量的名称及其对应的AUC值。
    # 打开PDF设备,准备绘图
    pdf(file = outFile, width = 6, height = 6)
    • pdf() 函数用于创建一个PDF文件,指定了文件名 outFile(之前定义)以及图形的宽度和高度。生成的图像将保存到这个PDF文件中。
    # 初始化第一个ROC曲线的绘制
    i = 3  # 从第3列开始,因为前两列可能是生存时间和生存状态
    ROC_rt = timeROC(T = rt$futime, delta = rt$fustat, marker = rt[, i], cause = 1, weighting = 'aalen', times = c(1), ROC = TRUE)
    • timeROC() 函数用于计算时间依赖的ROC曲线:
      • T = rt$futime: 生存时间。
      • delta = rt$fustat: 生存状态。
      • marker = rt[, i]: 第 i 列的变量(即第3列)作为预测变量。
      • cause = 1: 指定感兴趣的事件(如死亡)。
      • weighting = 'aalen': 使用Aalen加权法。
      • times = c(1): 预测1年生存的ROC曲线。
      • ROC = TRUE: 指定生成ROC曲线对象。
    plot(ROC_rt, time = 1, col = bioCol[i - 2], title = FALSE, lwd = 2)
    • plot() 函数绘制第一个时间依赖的ROC曲线:
      • time = 1: 绘制1年的ROC曲线。
      • col = bioCol[i - 2]: 选择 bioCol 中对应的颜色绘制曲线。
      • lwd = 2: 设置线条宽度为2。
    aucText = c(paste0(colnames(rt)[i], ", AUC=", sprintf("%.3f", ROC_rt$AUC[2])))
    • 这里将第3列变量的名称和AUC值存储到 aucText 向量中。ROC_rt$AUC[2] 返回1年时的AUC值,sprintf("%.3f", ...) 将AUC值格式化为三位小数。
    abline(01)
    • 在图上添加对角线(y=x),这是完全随机预测的基线,通常用于比较ROC曲线的效果。
    # 迭代绘制剩余的ROC曲线
    for(i in 4:ncol(rt)){
        ROC_rt = timeROC(T = rt$futime, delta = rt$fustat, marker = rt[, i], cause = 1, weighting = 'aalen', times = c(1), ROC = TRUE)
        plot(ROC_rt, time = 1, col = bioCol[i - 2], title = FALSE, lwd = 2, add = TRUE)
        aucText = c(aucText, paste0(colnames(rt)[i], ", AUC=", sprintf("%.3f", ROC_rt$AUC[2])))
    }
    • 使用 for 循环从第4列开始,迭代地计算每个变量的时间依赖ROC曲线并将其绘制到同一张图上:
      • add = TRUE: 确保新的ROC曲线被叠加到已有的图中。
      • 同时将每个变量的名称及其AUC值添加到 aucText 向量中。
    # 添加图例,显示每个变量的名称和对应的AUC值
    legend("bottomright", aucText, lwd = 2, bty = "n", col = bioCol[1:(ncol(rt) - 2)])
    • legend() 函数用于在图的右下角添加图例:
      • aucText: 图例显示变量的名称和AUC值。
      • lwd = 2: 设置图例中的线条宽度。
      • bty = "n": 去掉图例的边框。
      • col = bioCol[1:(ncol(rt) - 2)]: 为每个ROC曲线指定对应的颜色。
    # 关闭PDF设备,保存绘图
    dev.off()
    • 关闭PDF设备,完成图形的保存。

    总结

    这段代码从第3列开始绘制多变量的时间依赖性ROC曲线(针对1年生存率),每个变量使用不同颜色的曲线。图例显示了每个变量的名称及其对应的AUC值,并将最终的图形保存为PDF文件。这是用于比较多个变量在相同时间点的预测能力的常用方法。

    图 多指标比较的时间依赖性生存ROC曲线

    本文作者:充电宝团队


    现在:


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


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


    即可直接解锁:


    《R语言小白绘图系列|第42弹·多指标比较的时间依赖性生存ROC曲线》对应资源哦~


    看到这里你还不心动吗?


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



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


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

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



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