用于按时间间隔处理生存数据的 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)
你好,我正在学习生存分析,我很好奇我是否可以在这种形式的生存数据上使用 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)