You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R的cmprsk包为两个事件生成独立的竞争风险CIF图?

解决竞争风险分析中生成独立事件图的问题

有两种方法可以实现为两个事件生成独立图的需求,具体如下:

方法1:利用ggcompetingrisks内置分面板功能

直接将multiple_panels参数设为TRUE,函数会自动按事件拆分出独立面板,同时你可以保留原有的标度和标签设置(注意要移除冲突的scale_color_discrete,避免覆盖手动颜色设置):

library(cmprsk)
library(ggplot2)

# 拟合竞争风险模型
fit <- cuminc(leuk$censor_time, leuk$competing_risk, group = leuk$group)

# 生成分面板的独立事件图
p <- ggcompetingrisks(fit, multiple_panels = TRUE,
                      title = "Competing Risks Analysis") +
  # 设置事件线型
  scale_linetype_manual(name = "Competing Events", 
                        values = c(1, 2), 
                        labels = c("TRM", "Relapse")) +
  # 设置分组颜色与标签
  scale_color_manual(name = "my group",
                     values = c("black", "orange", "blue"),
                     labels = c(A = "low", B = "med", C = "high")) +
  labs(x = "Time", y = "Cumulative Incidence")

print(p)

方法2:手动提取数据生成独立绘图对象

如果需要完全独立的两张图(可单独保存或调整),可以从拟合结果中提取数据框,按事件筛选后分别绘图:

# 提取拟合结果的底层数据
cr_data <- fit$data

# 针对TRM事件(假设对应event=1)绘图
p_trm <- ggplot(cr_data[cr_data$event == 1, ], 
                aes(x = time, y = est, colour = group)) +
  geom_step() +
  labs(title = "Cumulative Incidence: TRM",
       x = "Time", y = "Cumulative Incidence",
       colour = "my group") +
  scale_color_manual(values = c("black", "orange", "blue"),
                     labels = c(A = "low", B = "med", C = "high")) +
  theme_bw()

# 针对Relapse事件(假设对应event=2)绘图
p_relapse <- ggplot(cr_data[cr_data$event == 2, ], 
                    aes(x = time, y = est, colour = group)) +
  geom_step() +
  labs(title = "Cumulative Incidence: Relapse",
       x = "Time", y = "Cumulative Incidence",
       colour = "my group") +
  scale_color_manual(values = c("black", "orange", "blue"),
                     labels = c(A = "low", B = "med", C = "high")) +
  theme_bw()

# 分别查看两张图
print(p_trm)
print(p_relapse)

# 若需并排展示,可使用gridExtra包
# library(gridExtra)
# grid.arrange(p_trm, p_relapse, ncol = 2)

注意事项

  • 原代码中同时使用scale_color_discrete和scale_color_manual会导致冲突,后者会覆盖前者,因此只需保留scale_color_manual并在其中统一设置标签和颜色。
  • 确认event列的取值对应正确的事件(比如1对应TRM,2对应Relapse),可通过unique(cr_data$event)查看具体取值。

内容的提问来源于stack exchange,提问作者Donniq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:42:29