如何在中位随访时间计算研究人群的人年事件发生率?
计算中位随访时间点的事件发生率
要解决这个问题,你可以按以下步骤操作:
步骤1:计算中位随访时间
先提取所有研究对象的随访时长(无论是否发生事件),再计算其中位数:
# 提取所有个体的随访时间 followup_days <- dat1$days2death # 计算中位随访时间(单位:天) median_followup <- median(followup_days) median_followup
步骤2:截断数据至中位随访时间
对每个个体的随访时间和事件状态做截断处理:
- 若个体实际随访时间 ≤ 中位随访时间:保留原随访时间和事件状态
- 若个体实际随访时间 > 中位随访时间:随访时间取中位值,事件状态设为0(到该时间点未发生事件)
# 创建截断后的数据集 dat_trunc <- dat1 %>% mutate( truncated_days = pmin(days2death, median_followup), truncated_death = ifelse(days2death <= median_followup, death, 0) )
步骤3:计算事件数和总人时,推导发生率
# 统计到中位随访时间点的事件总数 event_count <- sum(dat_trunc$truncated_death) # 计算总人时(转换为年,除以365.25) total_person_years <- sum(dat_trunc$truncated_days) / 365.25 # 计算事件发生率(事件数/人年) incidence_rate <- event_count / total_person_years incidence_rate
用pyears()函数直接实现(可选)
也可以直接结合pyears()的截断逻辑来计算,指定随访时间上限为中位随访时间:
# 使用pyears计算截断到中位随访时间的人年和事件数 py_result <- pyears(Surv(pmin(days2death, median_followup), truncated_death) ~ 1, data = dat_trunc, scale = 365.25) # 提取事件数和人年 event_count_py <- py_result$events person_years_py <- py_result$pyears # 计算发生率 incidence_rate_py <- event_count_py / person_years_py incidence_rate_py
两种方法结果一致,可根据习惯选择。
内容的提问来源于stack exchange,提问作者Fabian.m
相关产品推荐
相关产品推荐

