如何用R基础绘图为mstate::Cuminc()结果添加真实风险人数表?
竞争风险累积发病率曲线自动添加真实风险表(R基础绘图实现)
核心思路
mstate::Cuminc()返回的结果对象中已经包含了各时间点的真实风险人数(n.risk字段),无需手动统计。只需提取这些数据,再用R基础绘图函数(text()、par()等)将其添加到累积发病率曲线下方即可。
步骤实现
1. 提取风险人数数据
先运行Cuminc()得到累积发病率结果,再直接从结果对象中提取各组的时间点和对应风险人数:
library(mstate) # 替换为你的真实数据和参数 cuminc_result <- Cuminc(time = your_data$time, status = your_data$status, group = your_data$group) # 提取WW、WM组的风险人数(组名需匹配你的实际分组) ww_risk <- data.frame(time = cuminc_result$WW$time, n_risk = cuminc_result$WW$n.risk) wm_risk <- data.frame(time = cuminc_result$WM$time, n_risk = cuminc_result$WM$n.risk)
2. 绘制累积发病率曲线
用基础plot()函数生成核心曲线:
# 绘制曲线,自定义样式 plot(cuminc_result, col = c("darkred", "steelblue"), lwd = 2, main = "WW vs WM 竞争风险累积发病率", xlab = "随访时间", ylab = "累积发病率") # 添加图例 legend("bottomright", legend = c("WW组", "WM组"), col = c("darkred", "steelblue"), lwd = 2)
3. 添加真实风险表
调整绘图区域范围,用text()标注风险人数,配合rect()优化表格样式:
# 调整y轴范围,预留风险表空间 par(usr = c(par("usr")[1:2], -0.18, par("usr")[4])) # 筛选关键时间点(避免标注过密) common_times <- sort(unique(c(ww_risk$time, wm_risk$time))) selected_times <- seq(0, max(common_times), by = 10) # 可自定义时间间隔 x_coords <- axTicks(1)[axTicks(1) %in% selected_times] # 绘制风险表边框 rect(par("usr")[1], -0.18, par("usr")[2], 0, border = "gray80") # 标注组名 text(x = par("usr")[1], y = -0.06, labels = "WW组风险人数", col = "darkred", adj = 0, cex = 0.8) text(x = par("usr")[1], y = -0.12, labels = "WM组风险人数", col = "steelblue", adj = 0, cex = 0.8) # 标注对应时间点的风险人数 text(x = x_coords, y = rep(-0.06, length(x_coords)), labels = ww_risk$n.risk[match(x_coords, ww_risk$time)], col = "darkred", cex = 0.8) text(x = x_coords, y = rep(-0.12, length(x_coords)), labels = wm_risk$n.risk[match(x_coords, wm_risk$time)], col = "steelblue", cex = 0.8)
关键说明
- 若你的
Cuminc()结果中组名不是WW/WM,需替换为实际分组名称(可通过names(cuminc_result)查看)。 - 可根据需求调整
selected_times的间隔、风险表的位置(y参数)和字体大小(cex)。 match()函数用于确保时间点与风险人数一一对应,避免错位。
内容的提问来源于stack exchange,提问作者geek45
相关产品推荐
相关产品推荐

