[R] Re: variations on the theme of survSplit

Thomas Lumley tlumley at u.washington.edu
Wed Nov 17 16:48:19 CET 2004


On Wed, 17 Nov 2004, David Duffy wrote:

> Danardono <daodao99 at student.umu.se> wrote:
>>
>> While waiting for 2.1, for those who need function[s] for this
>> survival-splitting business, as I do,   this 'survcut' function below
>> might be helpful.

You don't need to wait for 2.1.  survival_2.16 is available on CRAN.

 	-thomas



>> It is not an elegant nor efficient function but it works, at least for
>> some examples below.
>>
> Ditto the following, for the case where there are multiple time-varying
> (irreversible) binary covariates, here slicing as coarsely as possible.
>
> #
> # Create dataset for survival analysis with time-dependent covariate
> # Gill-Anderson model
> #
> x <- data.frame(onset=c(46, 32, 53, 76, 64, 43),
>                case=c(1,1,1,0,0,0),
>                ooph=c(NA, 30, 38, 50, NA, NA),
>                ocp=c(1,1,0,0,1,0),
>                parity=c(2,0,1,3,3,2),
>                age.preg=c(28,NA,27,20,22,23))
>
> make.dep <- function(onset, case, time.dep, covs=NULL) {
>  if (is.null(n.time.dep <- ncol(time.dep))) {
>    if (!is.null(time.dep)) {
>      n.time.dep <- 1
>      time.dep <- as.matrix(time.dep)
>    }else{
>      n.time.dep <- 0
>      warning("No time dependent covariates")
>    }
>  }
>  if (is.null(n.covs <- ncol(covs))) {
>    if (!is.null(covs)) {
>      n.covs <- 1
>      covs <- as.matrix(covs)
>    }else{
>      n.covs <- 0
>    }
>  }
>  ordered.t <- t(apply(cbind(onset,time.dep),1,sort,na.last=TRUE))
>  tot.time.dep <- apply(ordered.t,1,function(x) sum(!is.na(x)))
>  ordered.t <- cbind(rep(0, nrow(ordered.t)), ordered.t)
>  npars <- 4+n.time.dep+n.covs
>  nrecs <- sum(tot.time.dep)
>  new.x <- as.data.frame(matrix(nr=nrecs, nc=npars))
>  names(new.x) <- c("start", "stop", "event", names(time.dep),names(covs),"episode")
>  this.rec<-0
>  for(i in 1:length(onset)) {
>    for(j in 1:tot.time.dep[i]) {
>      this.rec <- this.rec+1
>      new.x[this.rec,1] <- ordered.t[i, j]
>      new.x[this.rec,2] <- ordered.t[i, j+1]
>      new.x[this.rec,3] <- 0
>      new.x[this.rec,4:(3+n.time.dep)] <- (ordered.t[i,j]>=time.dep[i,])
>      missing <- is.na(new.x[this.rec,])
>      new.x[this.rec,missing] <- 0
>      if (n.covs>0) {
>        new.x[this.rec, (4+n.time.dep):(4+n.time.dep+n.covs)] <- covs[i,]
>      }
>      new.x[this.rec, npars]<-paste(i,j,sep=".")
>    }
>    new.x[this.rec,3]<-case[i]
>  }
>  new.x
> }
>
> David Duffy.
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>

Thomas Lumley			Assoc. Professor, Biostatistics
tlumley at u.washington.edu	University of Washington, Seattle




More information about the R-help mailing list