<think>我们收到了用户的查询,要求使用timeROC包计算AUC并绘制生存分析中的ROC曲线。根据用户提供的引用内容,我们可以总结出以下步骤:
1. 准备数据:需要包含时间(T)、事件状态(delta)、标记物(marker)等数据。
2. 使用`timeROC()`函数计算特定时间点的AUC值。
3. 使用`plot()`函数绘制ROC曲线,并使用`add=TRUE`参数在同一图中添加多条曲线。
4. 添加图例(legend)说明每条曲线对应的AUC值。
根据引用[2]和引用[4],我们注意到在无竞争风险的情况下,计算的是多个时间点的ROC曲线。引用[5]提供了timeROC函数的基本参数说明。
具体步骤:
步骤1:安装并加载timeROC包(如果尚未安装,先安装)
步骤2:准备数据,至少包含时间、事件状态(0表示删失,1表示事件发生)和标记物(例如预测分数)
步骤3:使用timeROC函数计算多个时间点的AUC
步骤4:使用plot函数绘制第一个时间点的ROC曲线,然后使用add=TRUE参数添加其他时间点的曲线
步骤5:添加图例,显示每个时间点的AUC值
示例代码(参考引用[2]和引用[4]):
假设我们有一个数据框df,包含三列:
T:生存时间
delta:事件状态(1表示发生事件,0表示删失)
marker:标记物(如预测值)
注意:在无竞争风险的情况下,事件状态只有事件发生和删失。
根据引用[5],timeROC函数的参数说明:
T:生存时间向量
delta:事件状态向量(1表示感兴趣的事件,0表示删失)
marker:标记物向量(用于预测的连续变量)
cause:感兴趣的事件(在无竞争风险的情况下,通常设为1)
weighting:权重方法,默认为"marginal"(使用边际加权)
times:要计算AUC的时间点向量
示例代码:
```r
# 安装包(如果需要)
# install.packages("timeROC")
library(timeROC)
# 假设df是数据框,包含T(时间)、delta(事件状态)和marker(标记物)
# 设定要计算的时间点(例如:1年,2年,3年,这里的时间单位与生存时间单位一致)
times <- c(365, 730, 1095) # 假设时间单位是天
# 计算timeROC
ROC_result <- timeROC(T = df$T,
delta = df$delta,
marker = df$marker,
cause = 1, # 感兴趣的事件
weighting = "marginal", # 使用边际加权
times = times,
ROC = TRUE)
# 绘制第一个时间点的ROC曲线(红色)
plot(ROC_result, time = times[1], col = "red", lwd=2, title = "")
# 添加第二个时间点的ROC曲线(蓝色)
plot(ROC_result, time = times[2], col = "blue", add=TRUE, lwd=2)
# 添加第三个时间点的ROC曲线(橙色)
plot(ROC_result, time = times[3], col = "orange", add=TRUE, lwd=2)
# 添加图例
legend("bottomright",
c(paste0("AUC at 1 year: ", round(ROC_result$AUC[1], 2)),
paste0("AUC at 2 year: ", round(ROC_result$AUC[2], 2)),
paste0("AUC at 3 year: ", round(ROC_result$AUC[3], 2))),
col = c("red", "blue", "orange"),
lty = 1, lwd = 2, bty = "n")
```
注意:时间点的设定需要根据实际数据情况,比如如果生存时间的单位是年,那么时间点可能是1,2,3等。
另外,引用[4]中显示的结果包含了多个时间点的AUC值,我们可以通过ROC_result$AUC来获取。
如果用户需要绘制多个标记物在同一时间点的ROC曲线,可以分别计算每个标记物的ROC_result,然后在同一图中绘制(注意使用不同的颜色),并在图例中区分。
但是,用户的问题只要求一个标记物在多个时间点的ROC曲线。因此,上述代码即可满足。
注意:在计算时,函数要求事件状态中1表示事件发生,0表示删失。如果有竞争风险,则需要使用不同的方法(本例是无竞争风险)。
用户提供的引用[3]和引用[4]分别展示了有竞争风险和无竞争风险情况下的输出,但用户明确要求无竞争风险(引用[1]和[4]),所以我们按照无竞争风险来处理。
如果用户需要更详细的计算置信区间等,可以参考引用[5]提到的confint函数,但用户问题中未要求。
因此,我们按照上述步骤提供代码和说明。
</think>以下是使用 R 语言的 `timeROC` 包计算生存分析中时间依赖性 AUC 值并绘制 ROC 曲线的完整方法,整合了引用中的关键技术和最佳实践:
### 操作步骤
1. **安装加载包**
```r
install.packages("timeROC")
library(timeROC)
```
2. **数据准备**
数据需包含三列:
- `time`:生存时间(数值型)
- `status`:事件状态(1=事件发生,0=删失)
- `marker`:预测标记物值(数值型)
3. **计算时间依赖性 AUC**
```r
# 设置多个时间点(单位需与生存时间一致)
times <- c(999.2, 1307.4, 1839.5) # 示例时间点
# 核心计算函数
ROC_result <- timeROC(
T = df$time, # 生存时间向量
delta = df$status, # 事件状态向量
marker = df$marker, # 预测标记物向量
cause = 1, # 感兴趣的事件类型
weighting = "marginal", # 加权方法(可选"marginal"或"cox")
times = times, # 评估时间点
ROC = TRUE # 返回ROC曲线数据
)
```
4. **查看各时间点 AUC**
```r
print(ROC_result) # 输出类似:
# Time-dependent-Roc curve estimated using IPCW
# Cases Survivors Censored AUC (%)
# t=999.2 53 249 10 83.96
# t=1307.4 68 218 26 85.66
# t=1839.5 86 156 70 88.03
```
5. **绘制多时间点 ROC 曲线**
```r
# 初始化画布
plot(ROC_result, time = times[1], col = "red", lwd = 2,
xlab = "1 - Specificity", ylab = "Sensitivity")
# 添加后续曲线
plot(ROC_result, time = times[2], col = "blue", add = TRUE, lwd = 2)
plot(ROC_result, time = times[3], col = "orange", add = TRUE, lwd = 2)
# 添加图例
legend("bottomright",
legend = c(
paste0("AUC at ", times[1], ": ", round(ROC_result$AUC[1], 2)),
paste0("AUC at ", times[2], ": ", round(ROC_result$AUC[2], 2)),
paste0("AUC at ", times[3], ": ", round(ROC_result$AUC[3], 2))
),
col = c("red", "blue", "orange"),
lty = 1, lwd = 2, bty = "n")
```

*图:不同时间点的ROC曲线可视化(红色/蓝色/橙色分别对应三个时间点)[^2][^4]*
### 关键参数说明
1. **`weighting`** 选择:
- `"marginal"`:标准加权(无竞争风险时推荐)
- `"cox"`:使用Cox模型加权(存在竞争风险时使用)
2. **时间点选择原则**:
- 覆盖研究的主要时间节点(如1/3/5年)
- 确保每个时间点有足够事件数(AUC计算需≥10个事件)
- 通过 `quantile(df$time[df$status==1], probs=c(0.3,0.6,0.9))` 选取分位数点
3. **曲线解读**:
- X轴:1-特异性(假阳性率)
- Y轴:敏感性(真阳性率)
- 曲线越靠近左上角说明诊断效能越好
- 不同时间点的AUC比较需谨慎(样本量可能变化)
> **注意**:当存在竞争风险(如死亡和其他事件共存)时,需使用`cause`参数指定目标事件,并使用`weighting="cox"`进行校正[^3][^5]。