如何使用R计算竞争风险分析中每个案例ID的累积发生率?

问题描述 投票:0回答:1

我正在使用 R 中的数据集,并尝试在存在竞争风险的情况下计算每个案例 ID 的累积发生率。我的数据集如下所示:

data <- data.frame(
  case_id = 1:8,
  exposure_time = c(5, 6, 7, 4, 3, 10, 11, 2),
  event = c(1, 1, 2, 2, 1, 0, 0, 2),
  weight = c(1.5, 2.0, 1.0, 0.5, 2.5, 1.2, 1.8, 1.3)
)

如何正确计算每个病例 ID 在事件发生时的累积发病率?

我一直在使用 cmprsk 包来计算累积发生率函数,但我正在努力提取每个病例 ID 的累积发生率。预期的结果是这样的:

data$cuminc <- c(1.5, 2.0, 3.5, 2.8, 1.3, NA, NA, 6.0)

任何帮助或指导将不胜感激!

dplyr survival-analysis survey
1个回答
0
投票

要计算具有竞争风险的每个 case_id 的累积发生率并为每个单独的案例提取它,您可以使用 cmprsk 包来处理竞争风险和加权累积发生率。关键步骤包括定义竞争风险、使用 cuminc 函数估计累积发生率,然后提取这些值并将其映射到每个 case_id。

library(cmprsk)

#a sample of data, you can replace it by your own
data <- data.frame(
  case_id = 1:8,
  exposure_time = c(5, 6, 7, 4, 3, 10, 11, 2),
  event = c(1, 1, 2, 2, 1, 0, 0, 2),
  weight = c(1.5, 2.0, 1.0, 0.5, 2.5, 1.2, 1.8, 1.3)
)

calculate_cuminc <- function(data) {
  # Create a cumulative incidence object
  cuminc_obj <- cuminc(data$exposure_time, data$event, cencode = 0, weights = data$weight)
  
  cuminc_event1 <- as.data.frame(cuminc_obj$`1 1`$est)
  times <- cuminc_obj$`1 1`$time
  
  data$cuminc <- sapply(1:nrow(data), function(i) {
    event_time <- data$exposure_time[i]
    # Find cumulative incidence at the event time (or closest time available)
    closest_time_index <- which.min(abs(times - event_time))
    if (data$event[i] != 0) { # Only if the event actually occurred
      return(cuminc_event1[closest_time_index, 1])
    } else {
      return(NA) # For censored cases, assign NA
    }
  })
  
  return(data)
}

result_data <- calculate_cuminc(data)
print(result_data)
© www.soinside.com 2019 - 2024. All rights reserved.