[R] Actual vs. predicted survival times

Bonnett, Laura L.J.Bonnett at liverpool.ac.uk
Wed Feb 8 10:52:21 CET 2012

Dear David,

Thank you for your input.  I was under the impression that it was not possible to obtain survival times using the predict.coxph function.  In a post to the R help group I noticed someone had suggested calculating survival times in the manner I have used although obviously this is not appropriate.

Are you able to provide any suggestions as to how I might achieve the graph of actual vs. Predicted survival times?

Many thanks,

-----Original Message-----
From: David Winsemius [mailto:dwinsemius at comcast.net] 
Sent: 07 February 2012 16:59
To: Bonnett, Laura
Cc: 'r-help at r-project.org'
Subject: Re: [R] Actual vs. predicted survival times

On Feb 7, 2012, at 10:32 AM, Bonnett, Laura wrote:

> Dear R-help,
> I am using R 2.14.1 on Windows 7.
> I would like to produce a plot like the attached - although  
> simplified to actual vs. Predicted survival time with distinguishing  
> marks for censored and observed points.  I have a dataset and have  
> fitted a Cox model to it.  In an attempt to visualise how accurate  
> the model is it would be ideal if I could plot the actual survival  
> times against the predicted survival times.
> I have been looking on the internet to see if there are ways to do  
> this in R.  The only post I found (https://stat.ethz.ch/pipermail/r-help/2009-February/189888.html 
> ) that seemed directly relevant suggested that I shouldn't be  
> generating survival times at all.  Given that, I was concerned about  
> proceeding but I would like to have access to a plot to make a  
> decision on its usefulness.
> I appreciate that there are predict.coxph and predict.cph options  
> available to me.
> My first attempt was as follows:
> # fit Cox model #
> coxfita = coxph(Surv(tsecond,seccens)~stroke(smess)+rels(smess) 
> +asleep(smess)+eeg1(smess)+eeg2(smess)+ct1(smess)+ct2(smess) 
> +treat(smess),data=smess)
> # Find censored and observed groups #
> messcens <- subset(smess,seccens==1)
> messobs <- subset(smess,seccens==0)
> # Obtain predicted survival times #
> explp <- exp(predict(coxfita,type="lp"))

That gives you relative risks, not survival times.

> explp2 <- mean(ssmess$tsecond,na.rm=TRUE)*explp

Why are you multiplying times by relative risks? That makes no sense.

> smess2 <- data.frame(ssmess,explp2)
> # Find censored and observed groups #
> smesscens <- subset(smess2,seccens==1)
> smessobs <- subset(smess2,seccens==0)
> # Produce plot #
> plot(smesscens$explp2,messcens$tsecond,pch=4,col="blue",ylab="Actual  
> Survival Time",xlab="Predicted Survival Time",main="Survival  
> Times",xlim=c(0,3500),ylim=c(0,3500))
> points(smessobs$explp2,messobs$tsecond,pch=4,col="red")
> This leads to the attached plot.  It doesn't seem correct though as  
> the predicted times all start over 500 days.
> Any suggestions would be very welcome.
> Many thanks,
> Laura
> <Actual vs. Survival  
> LJB.pdf>______________________________________________
> R-help at 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.

David Winsemius, MD
West Hartford, CT

More information about the R-help mailing list