用于按时间间隔处理生存数据的 R 函数

R Function for Handling Survival Data in intervals

你好,我正在学习生存分析,我很好奇我是否可以在这种形式的生存数据上使用 survival 包:

这里有一些代码可以生成这种形式的数据

start_interval <-  seq(0, 13)
end_interval <-  seq(1, 14)
living_at_start <- round(seq(1000, 0, length.out = 14))
dead_in_interval <- c(abs(diff(living_at_start)), 0)
df <- data.frame(start_interval, end_interval, living_at_start, dead_in_interval)

到目前为止,从我对 survival 包的使用来看,似乎每个人都是一个生存时间,但我可能误读了 Surv 函数的文档。如果 survival 不起作用,还有哪些其他软件包可以处理此类数据。 如果没有可以轻松估计生存函数的包或函数,我可以使用以下等式自己轻松计算生存时间。

由于 survival 包每个生存时间需要一次观察,我们需要做一些转换。使用模拟数据。

模拟数据:

library(survival)
start_interval <-  seq(0, 13)
end_interval <-  seq(1, 14)
living_at_start <- round(seq(1000, 0, length.out = 14))
dead_in_interval <- c(abs(diff(living_at_start)), 0)
df <- data.frame(start_interval, end_interval, living_at_start, dead_in_interval)

将数据复制为死亡人数

duptimes <- df$dead_in_interval
rid <- rep(1:nrow(df), duptimes)
df.t <- df[rid,]

使用 Surv 函数

test <- Surv(time = df.t$start_interval,
     time2 = df.t$end_interval,
     event = rep(1, nrow(df.t)), #Every Observation is a death
     type = "interval")

拟合生存曲线

summary(survfit(test ~ 1))

与根据原始数据手工计算比较

df$living_at_start/max(df$living_at_start)

他们匹配。

问题

当使用 survfit 函数时,当数据中只有 1000 人时,为什么风险数在时间 0 时为 1001?

length(test)