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

如何在R中生成正确的生存风险表?

生存分析风险表问题解析与解决方案

问题原因解释

ggsurvtable生成的风险表中n.risk最终降至0,是因为它默认会在所有个体退出的时间点(包括删失和事件发生)更新风险人数,将所有退出的个体都从风险集中移除。但实际场景中,删失个体只是停止了观察,并没有发生目标事件,风险集应该是总人数减去累计发生事件的人数,而非所有退出人数,因此默认生成的风险表不符合需求。

正确风险表生成方法(导出数据框用于LaTeX)

我们可以直接从survfit对象提取核心数据,手动整理出符合要求的风险表,步骤如下:

1. 提取survfit结果中的关键数据

# 从已拟合的survfit对象中提取数据
surv_df <- data.frame(
  时间 = fit$time,
  当前风险人数 = fit$n.risk,
  事件发生数 = fit$n.event,
  删失数 = fit$n.censor
)

2. 筛选仅包含事件发生的时间点(可选)

如果只需要展示有事件发生的时间点,筛选出事件数大于0的行,并计算累计事件数和剩余风险人数:

event_only_df <- surv_df[surv_df$事件发生数 > 0, ]
event_only_df$累计事件数 <- cumsum(event_only_df$事件发生数)
event_only_df$剩余风险人数 <- nrow(df) - event_only_df$累计事件数

3. 按年龄区间分组生成风险表(可选)

如果需要按固定年龄区间(比如每5岁)展示,可通过分组统计生成:

# 定义年龄区间
df$年龄区间 <- cut(df$exit, breaks = seq(0, 50, by = 5))

# 统计每个区间内的事件数
bin_stats <- aggregate(event ~ 年龄区间, data = df, sum)
# 计算每个区间起始时的风险人数(总人数减去之前区间的累计事件数)
bin_stats$区间起始风险人数 <- nrow(df) - c(0, cumsum(bin_stats$event[-nrow(bin_stats)]))
# 计算区间结束时的风险人数
bin_stats$区间结束风险人数 <- bin_stats$区间起始风险人数 - bin_stats$event

4. 导出为LaTeX格式

使用xtable包将整理好的数据框转换为LaTeX代码:

library(xtable)
# 以区间分组的表为例
print(xtable(bin_stats), type = "latex", include.rownames = FALSE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:47:36