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

