[R] Median In Survival

Marc Schwartz marc_schwartz at me.com
Thu Feb 23 05:18:43 CET 2012

On Feb 22, 2012, at 7:47 PM, David Winsemius wrote:

> On Feb 22, 2012, at 6:59 PM, niloo javan wrote:
>> hi
>> I have a problem with  Median in Survival.
>> when I use
>> S1=survfit(Surv(Time,Status))
>> the result shows the median but I cannot use it as numeric!
>> S1$median in Null
> That does not look like a formula.

Yeah, the OP is missing the '~ 1' part:

  survfit(Surv(Time, Status) ~ 1, data = ...)

> Furthermore I do not think there is an element in a survfit.object named 'median'. (It's certainly not documented on the help pages.)  Objects are passed to their print methods and the `print.survfit` function passes off its data argument first to `survmean`, then to `pfun`, then to `minmin` which does the job of calculating a median, which print.survfit then prints (as a side-effect using `cat`), but never stores in a returned object.
> Is this is homework?

Perhaps, but the information is available from ?summary.survfit, where the Value section indicates that the returned object includes a 'table' component:

> summary(survfit(Surv(futime, fustat) ~ 1, data = ovarian))$table
records   n.max n.start  events  median 0.95LCL 0.95UCL 
     26      26      26      12     638     464      NA 

> RES <- summary(survfit(Surv(futime, fustat) ~ 1, data = ovarian))$table

> RES["median"]

> RES["0.95LCL"]

> RES["0.95UCL"]

This will be a matrix rather than a vector, if the analysis consists of RHS covariates:

> summary(survfit(Surv(futime, fustat) ~ rx, data = ovarian))$table
     records n.max n.start events median 0.95LCL 0.95UCL
rx=1      13    13      13      7    638     268      NA
rx=2      13    13      13      5     NA     475      NA


> RES[, "median"]
rx=1 rx=2 
 638   NA 

If memory serves, the 'table' component was added about three years ago, as previously, one would have to use capture.output() on the result of explicitly using print.survfit() and then parse the textual results to get the median and CI's. It was one of those 'infelicities' in using these functions where the print method included code to calculate new values, rather than simply printing the results derived in the core function.


Marc Schwartz

More information about the R-help mailing list