如何在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
相关产品推荐
相关产品推荐

