生信喵 发表于 2025-12-7 10:37:13

timeROC

<h1>背景</h1>
<p>绘制不同拟合模型的time-dependent AUC。</p>
<p><img src="https://tcapi.voiceclouds.cn:8444/uploads/2025/12/07/miv3sp734pakbv04kqv.png" alt="" /></p>
<p>出自PMID: 29741566文章</p>
<h1>应用场景</h1>
<p>绘制不同拟合模型的timeROC曲线。</p>
<h1>环境设置</h1>
<p>使用国内镜像安装包</p>
<pre><code class="language-r">options(&quot;repos&quot;= c(CRAN=&quot;https://mirrors.tuna.tsinghua.edu.cn/CRAN/&quot;))
options(BioC_mirror=&quot;http://mirrors.ustc.edu.cn/bioc/&quot;)
install.packages(&quot;timeROC&quot;)
</code></pre>
<p>加载包</p>
<pre><code class="language-{r}">library(timeROC)
library(survival)

Sys.setenv(LANGUAGE = &quot;en&quot;) #显示英文报错信息
options(stringsAsFactors = FALSE) #禁止chr转成factor
</code></pre>
<h1>输入文件</h1>
<p>比普通的ROC的输入多了一列时间变量time</p>
<pre><code class="language-{r}">tr &lt;- read.csv(&quot;easy_input.csv&quot;, row.names = 1)
head(tr)
#查看数据集的例数和变量数
dim(tr)
</code></pre>
<h1>开始计算</h1>
<p>根据需要拟合不同的模型,此处的三个拟合模型分别为:</p>
<ul>
<li>指标a、age、sex构建的模型1</li>
<li>指标b、age、sex构建的模型2</li>
<li>以及指标c、age、sex构建的模型3</li>
</ul>
<p>以ROC.a为例,使用的函数为timeROC。</p>
<ul>
<li>T,数据集中的时间变量</li>
<li>delta,数据集中的结局变量(该函数要求删失数据的赋值一定设置为0)</li>
<li>marker为主要研究变量</li>
<li>other_markers为其他校正的协变量</li>
<li>cause为结局事件对应的赋值</li>
<li>weighting为计算权重的方式,可以设置为marginal(采用KM方法),也可以设置为cox(采用Cox方法)</li>
<li>times为计算AUC的时间点,根据实际需求设置</li>
<li>iid的默认设置为FALSE,如果后续需要使用AUC的置信区间,则设置为TRUE,如果不需要的话,则可不进行设置。本例中可以不进行设置。</li>
</ul>
<pre><code class="language-{r}">ROC.a &lt;- timeROC(T=tr$time,
               delta=tr$status, marker=tr$a,
               other_markers=as.matrix(tr[,c(&quot;age&quot;,&quot;sex&quot;)]),
               cause=1,
               weighting=&quot;marginal&quot;,
               times=c(0,50,100,150,200,250,300,350,400),
               iid=TRUE)

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

ROC.c &lt;- timeROC(T=tr$time, delta=tr$status,marker=tr$c,
               other_markers=as.matrix(tr[,c(&quot;age&quot;,&quot;sex&quot;)]),
               cause=1,weighting=&quot;marginal&quot;,
               times=c(0,50,100,150,200,250,300,350,400),
               iid=TRUE)
</code></pre>
<h1>开始画图</h1>
<p>分别绘制三个模型对应的timeROC曲线,采用的函数为plotAUCcurve。</p>
<ul>
<li>该函数的第一部分为前面模型输出的结果;</li>
<li>第二部分conf.int指图中是否绘制置信区间,若为FALSE,则不添加置信区间,若为TRUE,则绘制相应置信区间线;</li>
<li>第三部分为线条的颜色设置,除第一条曲线外,后面的都需添加add=TRUE,以保证全部的曲线绘制在一张图上。</li>
</ul>
<pre><code class="language-{r}">pdf(&quot;timeROC.pdf&quot;, 6, 5)
plotAUCcurve(ROC.a, conf.int=FALSE, col=&quot;red&quot;)
plotAUCcurve(ROC.b, conf.int=FALSE, col=&quot;darkblue&quot;, add=TRUE)
plotAUCcurve(ROC.c, conf.int=FALSE, col=&quot;darkgreen&quot;, add=TRUE)

# 图例设置
legend(&quot;topright&quot;, c(&quot;A model&quot;,&quot;B model&quot;,&quot;C model&quot;),
       col=c(&quot;red&quot;,&quot;darkblue&quot;,&quot;darkgreen&quot;),
       bty='n', lty=1, lwd=2, cex=0.8)
dev.off()
</code></pre>
<p><img src="https://tcapi.voiceclouds.cn:8444/uploads/2025/12/07/miv41c0q9cy2jq9v93g.png" alt="" /></p>

生信喵 发表于 2025-12-7 10:42:52

<p>文中所用数据可以关注公众号“生信喵实验柴”<br />
<img src="https://tcapi.voiceclouds.cn:8444/uploads/2025/09/07/mf9nu72s90ofyseu9hl.png" alt="" /><br />
发送关键词“20250512”获取</p>
页: [1]
查看完整版本: timeROC