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

如何为带聚类的多变量Cox模型生存曲线添加风险人数表?

问题分析与解决方案

你遇到的核心问题是对工具函数的参数逻辑理解偏差,以下是具体问题拆解和修复方案:

一、你之前的错误点

  1. ggadjustedcurves不支持risk.table参数:该函数仅用于生成校正后的生存曲线,本身没有风险人数表的输出功能,设置risk.table = TRUE不会生效。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:53:13