0

我有一个生存对象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

quantile(fit$time)@Edwin建议在下面使用

> quantile(fit$time)
     0%     25%     50%     75%    100% 
   5.00  224.25  301.50  439.75 1010.00 

然而,这显然会导致不同的结果。

[已关闭]
请忽略下面的答案,因为它们没有quantile.survfitsurvival包中使用,而是使用Rs 内置quantile函数。

更新到最新版本的survival-package 以解决此问题。

这样做

update.packages()

请注意,您可能需要 root 权限才能执行此操作。

4

2 回答 2

2

您正在尝试将该quantile函数应用于生存对象,该函数需要输入一个 numeric 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请注意,您也可以使用函数 onsurv.obj$lower和提取 95% CI 的下边界和上边界的分位数surv.obj$upper

于 2013-03-13T11:58:24.110 回答
1

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

于 2013-03-13T11:40:11.987 回答