2

我在这里发布的问题与我两天前发布的关于 gompertz 老化分析的另一个问题密切相关。

我正在尝试构建一个生存对象,请参阅 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 只苍蝇。我现在需要帮助的是如何从上述数据框之一转换为有效的生存对象。这个物体是什么样子的?我如何从上面顺利到达生存对象?

4

1 回答 1

4

在注意到总数Deaths是 55 并且您说苍蝇的数量是“大约 50 只”之后,我认为可能的假设是这是一个完全观察到的过程。所以你需要复制重复的死亡,这样每个死亡都有一行,并分配一个事件标记 1。“长”格式显然是首选格式。然后,您可以Surv使用 'Day' 和 'event' 创建一个 -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 的预期用途没有详细描述,以了解是否可以进行没有扩展的加权分析。

于 2013-07-20T18:41:29.767 回答