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

如何在中位随访时间计算研究人群的人年事件发生率?

计算中位随访时间点的事件发生率

要解决这个问题,你可以按以下步骤操作:

步骤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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:10:24