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

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to