[R] creating log-log survival plots that are not inverted

Marc Schwartz marc_schwartz at comcast.net
Sun Mar 1 18:42:49 CET 2009


Using Frank's survplot() which allows for user definable functions as
the 'fun' argument, one could also do something like this:


library(Design)

neg.ll <- function(x) -log(-log(x))

survplot(fit, fun = neg.ll, conf = "none")


and the subsequent examples seem to work as well, so if the output is
acceptable, this would be a more flexible option than my llplot()
function below.

HTH,

Marc

on 03/01/2009 11:27 AM Marc wrote:
> Here is a modification of some simplistic code that I had sent Bob
> offlist for the gastric data specifically.
> 
> I created a function and made it a bit more generic, for multiple
> 'strata', though there is no real error checking, etc. which would be
> needed to make it more robust for production along with more flexibility
> in the esthetics.
> 
> It would appear that the y axis in the referenced plot in T&G is
> -log(-log(Surv)) based upon the y axis label and playing around with things.
> 
> 
> llplot <- function(x,
>                    main = NULL,
>                    ylab = "-Log(-Log(Survival))", xlab = "Time")
> {
>   strata <- cbind(1:sum(x$strata), rep(1:length(x$strata), x$strata))
>   ind <- split(strata[, 1], strata[, 2])
> 
>   finite.y <- is.finite(-log(-log(x$surv)))
>   ylim <- range(-log(-log(x$surv))[finite.y])
> 
>   xlim <- c(0, max(x$time))
> 
>   plot(xlim, ylim, type = "n", main = main,
>        ylab = ylab, xlab = xlab)
> 
>   for (i in seq(along = ind))
>   {
>     lines(x$time[ind[[i]]],
>           -log(-log(x$surv[ind[[i]]])),
>           lty = i, type = "s")
>   }
> }
> 
> 
> Thus:
> 
> library(survival)
> library(surv2sample)
> data(gastric)
> 
> fit <- survfit(Surv(time, event) ~ treatment, data = gastric)
> 
> # This seems to be roughly the right hand plot on page 128 of T&G
> # albeit the gastric data in surv2sample seems to have longer follow up
> # now
> llplot(fit)
> 
> 
> Other examples would be:
> 
> fit2 <- survfit(Surv(time, status) ~ x, data = aml)
> llplot(fit2)
> 
> 
> fit3 <- survfit(Surv(time, status) ~ celltype, data = veteran)
> llplot(fit3)
> 
> 
> HTH,
> 
> Marc Schwartz
> 
> 
> on 02/28/2009 10:09 PM David Winsemius wrote:
>> I think what you want may be produced by this code for InvNormal(S) vs
>> log(time):
>>
>> survplot(fit, fun=qnorm, logT=T, conf = "none")
>>
>> That is not what you describe, however.
>>
>> I am worried about the plot on the page you cite, because it is not
>> similar to other log(-log(S)) (complementary log-log)  plots I am
>> familiar with. I checked the errata listing and do not see a correction,
>> but I am still concerned it might not be not a log(-log(S)) vs time plot.
>>
>> Terry Therneau has always been very helpful to readers of this group and
>> I suspect he can clarify any confusion I may be laboring under.
>>
> 
>> On Feb 28, 2009, at 5:48 PM, Bob Green wrote:
>>
>>> I am hoping for some advice regarding how to obtain a log-log survival plot that is not in the inverse. On page 128 of Modelling survival data by Therneau & Grambsch there is the an example of the type of desired plot, with a log of the survival curve  by years.  Marc Schwartz has provided me with some reproducible code.
>>>
>>> The code below produces inverted plots.
>>>
>>> library(surv2sample)
>>> data(gastric)
>>> fit <- survfit ( Surv(time, event) ~ treatment, data = gastric)
>>> #Default plot:
>>> plot(fit)
>>> plot(fit, fun = "cloglog")
>>>
>>> library(Design)
>>> survplot(fit, loglog = TRUE, conf = "none")
>>>
>>> Any assistance is much appreciated,
>>>
>>> regards
>>>
>>> Bob




More information about the R-help mailing list