Is the best way to find the median survival time from a survival plot just to draw a horizontal line from $p = 0.5$ to the curve and project down to the x-axis?


Assuming your survival curve is the basic Kaplan-Meier type survival curve, this is a way to obtain the median survival time. From Machin et al. Survival Analysis: A Practical Approach:

If there are no censored observations (...) the median survival time, $M$, is estimated by the middle observation of the ranked survival times $t_{(1)}, t_{(2)},\ldots,t_{(n)}$ if the number of observations, $n$, is odd, and by the average of $t_{(\frac{n}{2})}$ and $t_{(\frac{n}{2}+1)}$ if $n$ is even, that is,
$$ M = \left\{\begin{array}{ll} {t_{(\frac{n + 1}{2})}} & \text{if}\ n\ \text{odd}; \\ \frac{1}{2}\left[{t_{(\frac{n}{2})}} + {t_{(\frac{n}{2} + 1)}}\right] & \text{otherwise}. \end{array}\right. $$
In the presence of censored survival times the median survival is estimated by first calculating the Kaplan-Meier survival curve, then finding the value of $M$ that satisfies the equation $S(M) = 0.5$.

This can either be done, as you suggested, using a graphical technique with your curve, or using the survival function estimates used to construct said curve.

  • $\begingroup$ @EpiGard: +1, I have posted an answer in which I give formula to do what you recommend for computing the median survival time. $\endgroup$ – ocram Nov 27 '11 at 8:45
  • $\begingroup$ Here you are... the main trick is to use double-dollar enclosure even for math environment. $\endgroup$ – user88 Nov 27 '11 at 9:51
  • $\begingroup$ @mbq It seems we texified the text at the same time :) (EpiGrad: A further Markdown trick, add two spaces to insert a <br /> statement; useful to keep the text within the quoting environment.) $\endgroup$ – chl Nov 27 '11 at 10:40
  • $\begingroup$ @chl Yup; anyway your version is better. $\endgroup$ – user88 Nov 27 '11 at 11:43

In case you wanted a hands-on example on how to get the median survival in R:

# Get the survival curve by x groups
leukemia.surv <- survfit(Surv(time, status) ~ x, data = aml) 
# Get the median time

# Do a KM plot
col = c("blue", "red")
     xlim=c(0, 50), ylab="Survival", xlab="Time")
# Mark the 50 % survival
abline(a=.5, b=0)
legend("topright", fill=col, inset=.1, legend=c("Nonmaintained", "Maintained"))

This gives you this plot: Kaplan Meier plot

and the print(leukemia.surv) gives the exact median survival:

> print(leukemia.surv)
Call: survfit(formula = Surv(time, status) ~ x, data = aml)

                records n.max n.start events median 0.95LCL 0.95UCL
x=Maintained         11    11      11      7     31      18      NA
x=Nonmaintained      12    12      12     11     23       8      NA

Here is some extra:

In SAS 9.1, the $p$th sample percentile of the survival time distribution is computed as

$q_{p} = \frac{1}{2} \left( \inf \left\{ t: 1 - \hat{S}(t) \geq p \right\} + \sup \left\{ t: 1 - \hat{S}(t) \leq p \right\} \right)$

where the $t$'s are those from your observed survival times.

For example, the first sample quartile is given by

$q_{0.25} = \frac{1}{2} \left( \inf \left\{ t: 1 - \hat{S}(t) \geq 0.25 \right\} + \sup \left\{ t: 1 - \hat{S}(t) \leq 0.25 \right\} \right)$

The associated $100(1 - \alpha)\%$ confidence interval is calculated as the set

$I_{p} = \left\{ t: -z_{1 - \tfrac{\alpha}{2}} \leq \frac{\hat{S}(t) - (1-p)}{\sqrt{\hat{V}(\hat{S}(t))}} \leq z_{1 - \tfrac{\alpha}{2}} \right\}$

where $z_{1 - \tfrac{\alpha}{2}}$ stands for the $(1 - \tfrac{\alpha}{2})$th percentile of a standard normal distribution and where $\hat{V}(\hat{S}(t))$ is given by Greenwood's formula. Note that, for instance, if there is no $t$ such that $\frac{\hat{S}(t) - (1-p)}{\sqrt{\hat{V}(\hat{S}(t))}} \leq z_{1 - \tfrac{\alpha}{2}}$ then the upper limit of $I_{p}$ is undetermined.

You can also use the conftype= option to construct a confidence interval based on a $g$-transformed confidence interval for $S(t)$:

$I'_{p} = \left\{ t: -z_{1 - \tfrac{\alpha}{2}} \leq \frac{g(\hat{S}(t)) - g((1-p))}{g'(\hat{S}(t)) \sqrt{\hat{V}(\hat{S}(t))}} \leq z_{1 - \tfrac{\alpha}{2}} \right\}$

By default in SAS 9.1, conftype=linear for which $g(x)=x$. We obtain slightly different results when conftype=loglog for example but the prevailing tendency is unchanged.

Of note, the confidence of the interval is generally less than $95\%$ and SAS extends it to the next event time (not included).


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.