[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