【问题标题】:R Function for Handling Survival Data in intervals用于处理间隔中的生存数据的 R 函数
【发布时间】:2021-11-25 19:13:59
【问题描述】:

您好,我正在学习生存分析,我很好奇是否可以在这种形式的生存数据上使用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 不起作用,那么对于此类数据,还有哪些其他软件包。 如果没有可以轻松估计生存函数的包或函数,我可以使用以下等式轻松计算自己的生存时间。

【问题讨论】:

  • 请不要发布数据或代码的照片!如果您这样做,愿意帮助您的人将不得不输入所有这些文本。而是提供minimal reproducible example这里是a good overview on how to ask a good question
  • 对于使用生存包的生存分析,您应该对每位患者进行一次观察,这是该领域的标准
  • @dario 添加了一些代码来帮助以这种形式生成一些数据
  • @csgroen 如果我想使用生存包,是否需要转换数据以按死亡人数复制特定的生存间隔?
  • 我想是这样的......这个包不是用你想到的格式的数据构建的。但是,您可以手动绘制 Kaplan-Meier 曲线。

标签: r survival-analysis


【解决方案1】:

由于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)

【讨论】:

  • 关于有风险的不同数字,我在 Cross Validated link 上提出了问题
猜你喜欢
  • 1970-01-01
  • 2021-05-08
  • 2016-06-27
  • 1970-01-01
  • 2014-08-15
  • 2016-07-25
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多