如何为带聚类的多变量Cox模型生存曲线添加风险人数表?
问题分析与解决方案
你遇到的核心问题是对工具函数的参数逻辑理解偏差,以下是具体问题拆解和修复方案:
一、你之前的错误点
- ggadjustedcurves不支持risk.table参数:该函数仅用于生成校正后的生存曲线,本身没有风险人数表的输出功能,设置
risk.table = TRUE不会生效。 - finalfit::surv_plot的参数误用:
explanatory参数仅需指定你要分组展示曲线的变量(比如Sex),而非所有模型协变量;多变量模型需要通过coxfit参数传入预先拟合好的Cox模型,而非把所有协变量塞进explanatory。
二、可行解决方案
方案1:用finalfit正确生成多变量校正曲线+风险人数表
这是最简洁的方法,只需调整参数逻辑即可:
library(finalfit) library(survival) library(haven) # 读取数据 aa <- read_sav("data.sav") # 先拟合带聚类的多变量Cox模型 fit_cox <- coxph( Surv(time, status) ~ Sex + variable1 + variable2 + variable3 + cluster(institution), data = aa ) # 生成校正曲线+风险人数表:explanatory指定分组变量,coxfit传入多变量模型 aa %>% surv_plot( dependent = "Surv(time, status)", explanatory = "Sex", # 仅指定分组展示的变量 coxfit = fit_cox, # 传入已拟合的多变量(含聚类)模型 xlab = "Time (days)", pval = TRUE, legend = "none", risk_table = TRUE # 开启风险人数表 )
方案2:用survminer+adjustedcurves手动拼接(备选)
如果finalfit仍有兼容问题,可手动生成校正曲线和风险表后拼接:
library(survival) library(survminer) library(adjustedcurves) library(gridExtra) # 拟合带聚类的多变量Cox模型 fit <- coxph( Surv(time, status) ~ Sex + variable1 + variable2 + variable3 + cluster(institution), data = aa ) # 1. 生成校正曲线数据并绘图 adj_curve <- adjusted_curve( fit, variable = "Sex", data = aa, method = "direct" # 适用于Cox模型的直接校正方法 ) p_curve <- ggplot(adj_curve, aes(x = time, y = survival, color = group)) + geom_step() + labs(x = "Days", y = "Outcome", color = "Sex") + xlim(0, 365) + theme_bw() # 2. 生成风险人数表 # 基于模型协变量典型值拟合生存曲线,用于提取风险数 surv_fit <- survfit(fit, newdata = expand.grid( Sex = unique(aa$Sex), variable1 = mean(aa$variable1, na.rm = TRUE), variable2 = mean(aa$variable2, na.rm = TRUE), variable3 = mean(aa$variable3, na.rm = TRUE), institution = unique(aa$institution) # 聚类变量保留所有水平,按需调整 )) p_risk <- ggsurvplot( surv_fit, risk.table = TRUE, risk.table.y.text.col = TRUE, risk.table.y.text = FALSE, xlim = c(0, 365) )$table # 3. 拼接曲线和风险表 grid.arrange(p_curve, p_risk, ncol = 1, heights = c(4, 1))
内容的提问来源于stack exchange,提问作者Chris987tape
相关产品推荐
相关产品推荐

