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

如何在R语言中计算Cox模型的非累积基线风险?

如何从Anderson-Gill模型中估计非累积基线风险率

针对你构建的带strata(sex)和cluster(id)的Anderson-Gill模型,要获取非累积瞬时基线风险率(区别于basehaz()返回的累积基线风险),可以通过以下两种方法实现:

方法一:对累积基线风险做数值差分近似

Cox模型中,累积基线风险$H_0(t)$是瞬时风险率$h_0(t)$的积分,因此可以通过相邻时间点的累积风险变化量除以时间间隔,近似得到瞬时风险率:

library(dplyr)
library(survival)

# 获取带分层信息的累积基线风险(centered=FALSE确保从0开始累积)
bh <- basehaz(fit, centered = FALSE)

# 按分层计算瞬时风险率
bh_with_hazard <- bh %>%
  group_by(strata) %>%
  mutate(
    # 计算相邻时间点的间隔
    time_interval = time - lag(time, default = first(time)),
    # 计算累积风险的变化量
    hazard_increment = hazard - lag(hazard, default = 0),
    # 近似瞬时风险率
    instantaneous_hazard = hazard_increment / time_interval
  ) %>%
  ungroup()

# 查看结果
print(bh_with_hazard)

说明

  • 按strata分组计算,因为你的模型包含strata(sex),不同分层的基线风险独立
  • 第一个时间点的瞬时风险率用初始累积风险除以从0到该时间点的间隔近似

方法二:使用survfit()直接估计瞬时风险率

通过survfit()拟合基线生存曲线,指定type="aalen"可以直接得到Aalen估计的瞬时风险率:

# 为每个分层生成基线生存曲线(需指定对应sex值)
sf <- survfit(fit, newdata = data.frame(sex = c("0", "1")), type = "aalen")

# 提取包含瞬时风险率的结果
sf_summary <- summary(sf)

# 查看各时间点的瞬时风险率
print(sf_summary$hazard)
# 对应时间点和分层信息
print(data.frame(time = sf_summary$time, strata = sf_summary$strata, hazard = sf_summary$hazard))

说明

  • newdata参数必须包含每个分层的sex取值,确保为每个分层单独计算基线风险
  • type="aalen"会基于Aalen加法模型估计风险率,结果更直接反映瞬时风险

注意事项

Cox模型属于半参数模型,不对基线风险的函数形式做假设,因此所有瞬时风险率的估计都是数值近似结果,不同方法的结果可能存在细微差异,可根据研究需求选择合适的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:52:40