【问题标题】:How do I create a survival object in R?如何在 R 中创建生存对象?
【发布时间】:2013-07-20 07:45:08
【问题描述】:

我在这里发布的问题与另一个question I posted two days ago about gompertz aging analysis. 密切相关

我正在尝试构建一个生存对象,请参阅 R 中的 ?Surv。这有望用于执行 Gompertz 分析以产生两个值的输出(有关详细信息,请参阅原始问题)。

我有来自苍蝇实验的生存数据,该实验检查了各种基因型的衰老率。这些数据以多种布局形式提供给我,因此您可以选择哪种布局最适合您。

一个数据框(wide.df)看起来像这样,其中每个基因型(Exp,其中有约 640 个)都有一行,并且从第 4 天到第 98 天按顺序水平排列,每个基因型都有新的死亡人数两天。

Exp      Day4   Day6    Day8    Day10   Day12   Day14    ...
A        0      0       0       2       3       1        ...

我用这个来做例子:

wide.df2<-data.frame("A",0,0,0,2,3,1,3,4,5,3,4,7,8,2,10,1,2)
colnames(wide.df2)<-c("Exp","Day4","Day6","Day8","Day10","Day12","Day14","Day16","Day18","Day20","Day22","Day24","Day26","Day28","Day30","Day32","Day34","Day36")

另一个版本是这样的,每天每个'Exp'都有一行,并记录当天的死亡人数。

Exp     Deaths  Day     
A       0       4    
A       0       6
A       0       8
A       2       10
A       3       12
..      ..      ..

做这个例子:

df2<-data.frame(c("A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A"),c(0,0,0,2,3,1,3,4,5,3,4,7,8,2,10,1,2),c(4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36))
    colnames(df2)<-c("Exp","Deaths","Day")

每个基因型中大约有 50 只苍蝇。我现在需要帮助的是如何从上述数据框之一转换为有效的生存对象。这个物体是什么样子的?以及如何从上面顺利到达生存对象?

【问题讨论】:

  • 是否有任何审查意见?如果有,每天审查多少?
  • @gung 生存对象中的审查是什么意思?这是让我感到困惑的事情之一!
  • 想象一下,您想知道苍蝇的平均寿命。所以你会得到一堆刚出生(孵化?)的苍蝇,观察它们长达 30 天。有些苍蝇在第 4 天死亡,有些在第 10 天死亡,等等。到第 30 天,只有 1 只苍蝇还活着。关于这只苍蝇的寿命,你所知道的只是它在第 30 天还活着,所以它的寿命大于 30 天,但你不知道实际数字。这只苍蝇在第 30 天被审查
  • 您说实验持续了 98 天,但最后一个事件是在第 38 天。我们是否应该假设在第 98 天进行了观察并且没有进一步的死亡?或者我们应该假设在这种情况下观察的总数是 55,这意味着你没有审查,并且在实验结束时所有的苍蝇都死了。
  • @dwin 这只是一个虚拟数据集,在真实数据中,每个基因型通常有 50 只苍蝇,但有些丢失/杀死等,所有 32000 只苍蝇在 98 天内死亡,平均为 60 天

标签: r survival-analysis


【解决方案1】:

在注意到Deaths 的总数是 55 并且您说苍蝇的数量是“大约 50 只”之后,我认为可能的假设是这是一个完全观察到的过程。因此,您需要复制重复的死亡,因此每个死亡都有一行,并分配一个事件标记 1。“长”格式显然是首选格式。然后,您可以使用“Day”和“event”创建一个Surv-object

?Surv
df3 <- df2[rep(rownames(df2), df2$Deaths), ]
str(df3)
#---------------------
'data.frame':   55 obs. of  3 variables:
 $ Exp   : Factor w/ 1 level "A": 1 1 1 1 1 1 1 1 1 1 ...
 $ Deaths: num  2 2 3 3 3 1 3 3 3 4 ...
 $ Day   : num  10 10 12 12 12 14 16 16 16 18 ...
#----------------------
df3$event=1
str(with(df3, Surv(Day, event) ) )
#------------------
 Surv [1:55, 1:2] 10  10  12  12  12  14  16  16  16  18  ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:2] "time" "status"
 - attr(*, "type")= chr "right"

注意:如果这是在 coxph 函数中完成的,则可能不需要扩展到单个日期行,因为该函数允许指定案例重量。 (我猜测生存包中的其他回归函数也不需要这样做。)过去,Terry Therneau 曾对人们在coxph 的公式界面之外创建生存对象表示困惑。 htis Surv-object 的预期用途没有详细描述,以了解是否可以进行不扩展的加权分析。

【讨论】:

  • 嗨,如果这不是一个完全观察到的过程,你会怎么做(即在实验结束时仍有苍蝇活着)?谢谢!
  • 我应该澄清一下,我不支持在回归函数调用之外构建Surv-objects。 Therneau 认可的方法是在公式调用的 LHS 上使用 Surv-call,并为 data 参数提供数据帧。
  • survival 包具有多种功能,用于处理被审查的数据情况。如果您正在处理具有不同生存过程的多个组,您将需要更多级别的因子变量。每个组的最后一个条目将有一个事件变量,除了最后一个“周期”为 0 和一个死亡条目,它是实验结束时活着的苍蝇数量外,所有时间都为 1。 (正如我的一个 cmets 中所解释的那样...... 4 年前。)
猜你喜欢
  • 2011-06-10
  • 2021-12-26
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 2014-10-03
  • 1970-01-01
相关资源
最近更新 更多