[R] creating log-log survival plots that are not inverted
David Winsemius
dwinsemius at comcast.net
Sun Mar 1 19:21:41 CET 2009
Thanks Marc;
That provides the answer that I had missed (and glaringly obvious
now). The plot on p 128 of Therneau and Grambsch is correctly labeled
with -Log(-Log(Survival). I was expecting Log(-Log(S)) based on my
other references.
--
David Winsemius
On Mar 1, 2009, at 12:42 PM, Marc Schwartz wrote:
> 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