我在R
中有一个生存对象。
print(surv)
给了我
> print(surv)
Call: survfit(formula = Surv(TAGE, EVENT) ~ 1, data = data_LTC[data_LTC$TYPE ==
"Job", ])
records n.max n.start events median 0.95LCL 0.95UCL
299510 299510 299510 252884 177 173 180
但是,quantile(surv)
不起作用并输出
> quantile(surv)
Error in is.na(y) : 'y' is missing
对我来说这有些奇怪,因为R
能够计算中位数(177)但不能计算其他四分位数。
我的生存对象出了什么问题?
[编辑]
也许这是问题的最小例子:
在文档(http://stat.ethz.ch/R-manual/R-patched/library/survival/html/quantile.survfit.html)中有这个例子:
> fit <- survfit(Surv(time, status) ~ ph.ecog, data=lung)
> quantile(fit)
$quantile
25% 50% 75%
ph.ecog=0 285 394 655
ph.ecog=1 181 306 550
ph.ecog=2 105 199 351
ph.ecog=3 118 118 118
...
现在,如果我想重复此输出的第一行,我会做
> fit <- survfit(Surv(time, status) ~ 1, data = lung[lung$ph.ecog == 0,])
> quantile(fit)
Error in is.na(y) : 'y' is missing
@Edwin建议在下面使用quantile(fit$time)
代替
> quantile(fit$time)
0% 25% 50% 75% 100%
5.00 224.25 301.50 439.75 1010.00
然而,会导致不同的结果。
[关闭]
请忽略以下答案,因为他们没有使用quantile.survfit
包中的survival
,而是使用R
内置的quantile
- 函数。
更新到最新版本的survival
- 包以解决此问题。
使用
执行此操作update.packages()
请注意,您可能需要root权限才能执行此操作。
答案 0 :(得分:2)
您正尝试在生存对象上应用quantile
函数,其中函数需要输入数字vector
。生存对象包含此向量,但您需要首先从中提取它。我以生存包中的白血病数据集为例;
library(survival)
data(leukemia)
surv.obj <- survfit(Surv(time = leukemia$time, event = leukemia$status) ~ 1)
names(surv.obj)
[1] "n" "time" "n.risk" "n.event" "n.censor" "surv" "type"
[8] "std.err" "upper" "lower" "conf.type" "conf.int" "call"
quantile(surv.obj$time)
0% 25% 50% 75% 100%
5.00 13.75 27.50 33.75 161.00
请注意,您可以使用quantile
和surv.obj$lower
上的surv.obj$upper
函数提取95%CI的下边界和上边界的分位数。
答案 1 :(得分:1)
我建议对象没有任何问题,而是你试图滥用它。 print(幸存)语句中的中位数使用来自Surv(TAGE,EVENT)数据的信息,但这并不意味着分位数(幸存)必须按预期工作。