使用'survival'包中的'tmerge'为生存数据添加时变协变量

时间:2015-07-07 14:56:41

标签: r survival-analysis

我正在尝试使用生存包中的tmerge向数据集添加几个时间相关的协变量以进行生存分析。我的意思是按照vignette中关于主题的推荐顺序添加每个,但是第一次添加的输出不能按照我的预期工作。

更具体地说,我有一个简单的data.frame,其中包含个人(组织)的ID以及组织停止活动之前的天数(年龄)。第二个data.frame具有id和组织经历“转换”事件之前的天数。并非所有组织都经历过转换,因此并非所有组织都出现在第二个数据框架中。

在第一次调用tmerge时,我按照包使用的格式格式化第一个data.frame。在第二步中,我尝试添加一个变量来计算组织经历的过渡次数。对于大多数组织来说,结果是我所期望的,但是对于少数组织而言,结果没有意义,并且没有明显的理由告诉我为什么它会失败。

data.frames很小,所以我将它们与下面的代码一起发布。

ages <- structure(list(id = c(1L, 2L, 5L, 6L, 9L, 10L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 20L, 21L, 24L, 26L, 27L, 28L, 29L, 30L, 31L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 42L, 45L, 46L, 43L, 48L, 49L, 50L, 51L, 52L, 54L, 55L, 57L, 58L, 59L, 60L, 61L, 62L, 63L, 64L, 65L, 66L, 68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L, 8L, 19L, 22L, 23L, 33L, 41L), age = c(13668, 21550, 15249, 21550, 16045, 21550, 14976, 14976, 6574, 21550, 4463, 16927, 16927, 15706, 4567, 21306, 17235, 22158, 19692, 17632, 17597, 4383, 5811, 7704, 5063, 17351, 17015, 16801, 4383, 5080, 13185, 12604, 19784, 5310, 15369, 13239, 1638, 21323, 10914, 21262, 7297, 17214, 17508, 14199, 14062, 2227, 8434, 4593, 14429, 21323, 4782, 10813, 2667, 2853, 5709, 3140, 12237, 7882, 21550, 15553, 16466, 16621, 19534, 21842)), .Names = c("id", "age"), row.names = c(NA, 64L), class = "data.frame")
ages1 <- tmerge(ages, ages, id=id, tstop=age)
transitions <- structure(list(id = c(2L, 2L, 6L, 8L, 10L, 19L, 22L, 23L, 24L, 31L, 33L, 41L, 43L, 43L, 52L, 55L, 66L), transition = structure(c(18993, 13668, 15249, 15706, 15887, 11609, 4023, 9316, 16193, 1461, 4584, 17824, 3713, 11261, 16818, 10670, 15479), class = "difftime", units = "days")), .Names = c("id", "transition"), row.names = c(3L, 4L, 7L, 8L, 11L, 20L, 25L, 27L, 28L, 35L, 38L, 47L, 49L, 51L, 59L, 61L, 73L), class = "data.frame")
newdata <- tmerge(ages1, transitions, id=id, transition=cumtdc(transition))

作为失败的示例,请考虑id = 22。它在4023天之后经历了一次转变。因此,tmerge应该创建id = 22的两个新行:一个用于0到4023,一个用于4023到16466(组织'死'的年龄)。这两个都是创建的,但是id = 22的第三个不必要的行也是如此,其开头为0,停止时间为16466.

在64个组织中共有17个转换,我计算了3个错误,如上面的那个,并且无法弄清楚这些3与其余(成功)案例的区别。我可以很容易地修复这3个但是随着其他TVC的增加,检测和修复这些错误的时间成本将呈指数级增长。关于我缺少什么的任何想法?

1 个答案:

答案 0 :(得分:4)

问题通过id简单排序解决。 ages1 <- ages1[order(ages1$id),]。包创建者提供了此解决方案。