我的生存对象有什么问题?

时间:2013-03-13 10:41:29

标签: r na quantile survival-analysis

我在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权限才能执行此操作。

2 个答案:

答案 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 

请注意,您可以使用quantilesurv.obj$lower上的surv.obj$upper函数提取95%CI的下边界和上边界的分位数。

答案 1 :(得分:1)

我建议对象没有任何问题,而是你试图滥用它。 print(幸存)语句中的中位数使用来自Surv(TAGE,EVENT)数据的信息,但这并不意味着分位数(幸存)必须按预期工作。