bioinfoer

找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖

0

收听

12

听众

406

主题
发表于 昨天 10:37 | 查看: 9| 回复: 1

背景

绘制不同拟合模型的time-dependent AUC。

出自PMID: 29741566文章

应用场景

绘制不同拟合模型的timeROC曲线。

环境设置

使用国内镜像安装包

options("repos"= c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(BioC_mirror="http://mirrors.ustc.edu.cn/bioc/")
install.packages("timeROC")

加载包

library(timeROC)
library(survival)

Sys.setenv(LANGUAGE = "en") #显示英文报错信息
options(stringsAsFactors = FALSE) #禁止chr转成factor

输入文件

比普通的ROC的输入多了一列时间变量time

tr <- read.csv("easy_input.csv", row.names = 1)
head(tr)
#查看数据集的例数和变量数
dim(tr)

开始计算

根据需要拟合不同的模型,此处的三个拟合模型分别为:

  • 指标a、age、sex构建的模型1
  • 指标b、age、sex构建的模型2
  • 以及指标c、age、sex构建的模型3

以ROC.a为例,使用的函数为timeROC。

  • T,数据集中的时间变量
  • delta,数据集中的结局变量(该函数要求删失数据的赋值一定设置为0)
  • marker为主要研究变量
  • other_markers为其他校正的协变量
  • cause为结局事件对应的赋值
  • weighting为计算权重的方式,可以设置为marginal(采用KM方法),也可以设置为cox(采用Cox方法)
  • times为计算AUC的时间点,根据实际需求设置
  • iid的默认设置为FALSE,如果后续需要使用AUC的置信区间,则设置为TRUE,如果不需要的话,则可不进行设置。本例中可以不进行设置。
ROC.a <- timeROC(T=tr$time, 
                 delta=tr$status, marker=tr$a,
                 other_markers=as.matrix(tr[,c("age","sex")]),
                 cause=1,
                 weighting="marginal",
                 times=c(0,50,100,150,200,250,300,350,400),
                 iid=TRUE)

# ROC.b的设置与其他两个相比,marker设置不同,可以看到tr$b前后多一个负号(“-”)
# 原因在于该变量和结局事件的关系是该变量数值增大,结局事件发生率反而降低。
ROC.b <- timeROC(T= tr$time, delta= tr$status, marker=-tr$b,
               other_markers=as.matrix(tr[,c("age","sex")]),
               cause=1,weighting="marginal",
               times=c(0,50,100,150,200,250,300,350,400),
               iid=TRUE)

ROC.c <- timeROC(T=tr$time, delta=tr$status,marker=tr$c,
               other_markers=as.matrix(tr[,c("age","sex")]),
               cause=1,weighting="marginal",
               times=c(0,50,100,150,200,250,300,350,400),
               iid=TRUE)

开始画图

分别绘制三个模型对应的timeROC曲线,采用的函数为plotAUCcurve。

  • 该函数的第一部分为前面模型输出的结果;
  • 第二部分conf.int指图中是否绘制置信区间,若为FALSE,则不添加置信区间,若为TRUE,则绘制相应置信区间线;
  • 第三部分为线条的颜色设置,除第一条曲线外,后面的都需添加add=TRUE,以保证全部的曲线绘制在一张图上。
pdf("timeROC.pdf", 6, 5)
plotAUCcurve(ROC.a, conf.int=FALSE, col="red")
plotAUCcurve(ROC.b, conf.int=FALSE, col="darkblue", add=TRUE)
plotAUCcurve(ROC.c, conf.int=FALSE, col="darkgreen", add=TRUE)

# 图例设置
legend("topright", c("A model","B model","C model"),
       col=c("red","darkblue","darkgreen"),
       bty='n', lty=1, lwd=2, cex=0.8)
dev.off()

收藏回复 显示全部楼层 道具 举报

发表于 昨天 10:42

文中所用数据可以关注公众号“生信喵实验柴”

发送关键词“20250512”获取

回复 显示全部楼层 道具 举报

您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|小黑屋|bioinfoer ( 萌ICP备20244422号 )

GMT+8, 2025-12-8 03:39 , Processed in 0.083721 second(s), 34 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表