无法在某些 data.frames 上使用 survfit
Can´t use survfit on some data.frames
我有一个要用于生存分析的数据集,当我使用整个数据集时它似乎工作正常。但是,一旦我使用 data[which(data$variable1=="somevalue")]
将它分割成更小的数据帧,事情似乎就崩溃了。
大多数生成的较小数据帧都可以正常工作,但有些是有问题的。在有问题的情况下,我可以毫无问题地使用 summary(survfit(Surv(time, status)~variable2, data=smalldataframe))$surv
,但是当我尝试 summary(survfit(Surv(time, status)~variable2, data=smalldataframe), time=5)$surv
时,它会抛出 Error in array(xx, dim = dd) : negative length vectors are not allowed
.
我试着查看数据,看看我是否有任何奇怪的值,比如负数,但没有。此外,如果这有问题,完整的数据帧也应该抛出错误,但事实并非如此。所有较小的数据帧都是使用同一行代码创建的,所以我也不明白为什么它们的行为不同。大多数情况下,我不明白为什么 summary(survfit(...))$surv
和 plot(survfit(...))
一样工作正常,但是当我想计算特定时间的生存率时,它突然不再喜欢这些数据了。
这是一个有问题的数据帧
test <-
structure(list(time2 = c(0.15, 2.08, 2.06, 0.32, 39.45, 39.09,
2.57, 3.64, 13.57, 36.57, 36.26, 0.78, 0.1, 33.94, 3.1, NA, 1.77,
28.38, 1.24, NA, 1.87, 25.83, 2.62, 1.57, 1.6, 22.74, 21.03,
20.54, 20.03, 0.97, 19.35, 18.09, 2.61, 17.68, NA, 3.85, 3.52,
11.22, 11.52, 11.04, 10.51, 1.68, 10.4, 10.61, 9.01, 9.05, 7.8,
0.11, 4.83), status = c(1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1,
0, 1, NA, 1, 1, 1, NA, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1,
0, NA, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0), cas_dg = c(1,
2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5,
6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8,
8, 9, 9, 9, 9, 9)), .Names = c("time2", "status", "cas_dg"), row.names = c(NA, -49L), class = "data.frame")
给我带来麻烦的调用是 summary(survfit(Surv(time2, status)~cas_dg, data=test), time=5)$surv
,而且只有一些较小的数据帧。
您需要在 summary
中使用参数 extend=TRUE
;根据 ?summary.survfit
:
extend: logical value: if TRUE, prints information for all specified
‘times’, even if there are no subjects left at the end of the
specified ‘times’. This is only valid if the ‘times’
argument is present.
因此对于您的样本数据,您可以这样做:
fit <- survfit(Surv(time2, status) ~ cas_dg, data = test);
summary(fit, time = 5, extend = TRUE)$surv;
#[1] 0.0000000 0.0000000 0.5555556 0.5000000 0.3333333 0.5714286 0.6000000
#[8] 0.6666667 0.8000000
我有一个要用于生存分析的数据集,当我使用整个数据集时它似乎工作正常。但是,一旦我使用 data[which(data$variable1=="somevalue")]
将它分割成更小的数据帧,事情似乎就崩溃了。
大多数生成的较小数据帧都可以正常工作,但有些是有问题的。在有问题的情况下,我可以毫无问题地使用 summary(survfit(Surv(time, status)~variable2, data=smalldataframe))$surv
,但是当我尝试 summary(survfit(Surv(time, status)~variable2, data=smalldataframe), time=5)$surv
时,它会抛出 Error in array(xx, dim = dd) : negative length vectors are not allowed
.
我试着查看数据,看看我是否有任何奇怪的值,比如负数,但没有。此外,如果这有问题,完整的数据帧也应该抛出错误,但事实并非如此。所有较小的数据帧都是使用同一行代码创建的,所以我也不明白为什么它们的行为不同。大多数情况下,我不明白为什么 summary(survfit(...))$surv
和 plot(survfit(...))
一样工作正常,但是当我想计算特定时间的生存率时,它突然不再喜欢这些数据了。
这是一个有问题的数据帧
test <-
structure(list(time2 = c(0.15, 2.08, 2.06, 0.32, 39.45, 39.09,
2.57, 3.64, 13.57, 36.57, 36.26, 0.78, 0.1, 33.94, 3.1, NA, 1.77,
28.38, 1.24, NA, 1.87, 25.83, 2.62, 1.57, 1.6, 22.74, 21.03,
20.54, 20.03, 0.97, 19.35, 18.09, 2.61, 17.68, NA, 3.85, 3.52,
11.22, 11.52, 11.04, 10.51, 1.68, 10.4, 10.61, 9.01, 9.05, 7.8,
0.11, 4.83), status = c(1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1,
0, 1, NA, 1, 1, 1, NA, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1,
0, NA, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0), cas_dg = c(1,
2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5,
6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8,
8, 9, 9, 9, 9, 9)), .Names = c("time2", "status", "cas_dg"), row.names = c(NA, -49L), class = "data.frame")
给我带来麻烦的调用是 summary(survfit(Surv(time2, status)~cas_dg, data=test), time=5)$surv
,而且只有一些较小的数据帧。
您需要在 summary
中使用参数 extend=TRUE
;根据 ?summary.survfit
:
extend: logical value: if TRUE, prints information for all specified ‘times’, even if there are no subjects left at the end of the specified ‘times’. This is only valid if the ‘times’ argument is present.
因此对于您的样本数据,您可以这样做:
fit <- survfit(Surv(time2, status) ~ cas_dg, data = test);
summary(fit, time = 5, extend = TRUE)$surv;
#[1] 0.0000000 0.0000000 0.5555556 0.5000000 0.3333333 0.5714286 0.6000000
#[8] 0.6666667 0.8000000