我正在使用 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)
任何帮助或指导将不胜感激!
要计算具有竞争风险的每个 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)