I've been out for a week, with one more to go.  I'll look at this in 
earnest when I return.
  Terry T

On 06/17/2012 04:07 AM, Jürgen Biedermann wrote:
> Dear John,
>
> Thank you very much for your help! It was very important for getting 
> along further.
>
> I found out some additional things which I want to give back to you as 
> feedback (maybe other persons will have the same problems).
>
> It's also possible to leave away the individual=T argument.
> Instead you can use:
>
> newdata.1<- 
> data.frame(unique(Rossi.2[c("start","stop")]),fin=0,age=30,prio=5,Id=1,arrest.time=0)
> fit <- survfit(mod.allison.5, newdata.1, id=Id) *but not* fit <- 
> survfit(mod.allison.5, newdata.1, id="Id")
>
> so you have to leave away the "" in specifying the id variable --> 
> maybe the help file could be more precise here.
>
> Additionally I found out some more things while dealing with my 
> original data.
>
> It's very important to specify the Surv object and the formula 
> directly in the coxph function, *so don't do this:*
>
> SurvO <- Surv(Rossi.2$start, Rossi.2$stop, Rossi.2$arrest.time)
> form <- as.formula(SurvO ~ fin + age + age:stop + prio)
> mod.allison.5<- coxph(form,
>       data=Rossi.2)
> mod.allison.5
>
> newdata.1<- 
> data.frame(unique(Rossi.2[c("start","stop")]),fin=0,age=30,prio=5,arrest.time=0)
> fit <- survfit(mod.allison.5, newdata.1, individual=T)
> > Fehler in model.frame.default(data = newdata.1, formula = SurvO ~ 
> fin +  :
>   Variablenlängen sind unterschiedlich (gefunden für 'fin')
> --> Error, length of variables are different
>
> I think the error message is not optimal here, anyway.
>
> The problem obviously consists in the survfit-function not recognizing 
> the names of the variables anymore.
> It seems completely logic, but anyway, it took me many hours.
>
> Thanks again,
> Jürgen
>
>
>
> --------- Korrespondenz ----------
>
> Betreff: Re: How to specify "newdata" in a Cox-Modell with a time 
> dependent interaction term?
> Von: John Fox <j...@mcmaster.ca>
> An: J?rgen Biedermann <juergen.biederm...@googlemail.com>
> Datum: 16.06.2012 17:22
>> Dear Jurgen,
>>
>>> fit<- survfit(mod.allison.5, newdata.1, individual=TRUE)
>>> fit
>> Call: survfit(formula = mod.allison.5, newdata = newdata.1, individual = 
>> TRUE)
>>
>> records   n.max n.start  events  median 0.95LCL 0.95UCL
>>    19809     432     432     114      NA      NA      NA
>>
>> plot(fit)  # shows one survival curve
>>
>> See ?survfit.coxph.
>>
>> Best,
>>   John
>>
>>
>> On Sat, 16 Jun 2012 16:23:41 +0200
>>   Jürgen Biedermann<juergen.biederm...@googlemail.com>  wrote:
>>> Dear John,
>>>
>>> Thank you very much for the quick answer. I will use the mentioned citation 
>>> of your book in the future.
>>>
>>> However:
>>> The Id argument is necessary for the function to know that the different 
>>> rows belong to one individual.
>>>
>>> Or how the Help-File says:
>>>
>>> id:
>>> optional variable name of subject identifiers. If this is present, then 
>>> each group
>>> of rows with the same subject id represents the covariate path through time 
>>> of
>>> a single subject, and the result will contain one curve per subject. If the 
>>> coxph
>>> fit had strata then that must also be specified in newdata. If missing, 
>>> then each
>>> individual row of newdata is presumed to represent a distinct subject and 
>>> there
>>> will be nrow(newdata) times the number of strata curves in the result (one 
>>> for
>>> each strata/subject combination).
>>>
>>> I tried your proposal anyway, but, as expected, fifty different survival 
>>> curves appeared.
>>>
>>> So, there is still no solution.
>>>
>>> Best regards
>>> Jürgen
>>>
>>> -- 
>>> -----------------------------------
>>> Jürgen Biedermann
>>> Bergmannstraße 3
>>> 10961 Berlin-Kreuzberg
>>> Mobil: +49 176 247 54 354
>>> Home: +49 30 940 53 044
>>> e-mail:juergen.biederm...@gmail.com
>>>
>>>
>>> --------- Korrespondenz ----------
>>>
>>> Betreff: Re: How to specify "newdata" in a Cox-Modell with a time dependent 
>>> interaction term?
>>> Von: John Fox<j...@mcmaster.ca>
>>> An: J?rgen Biedermann<juergen.biederm...@googlemail.com>
>>> Datum: 16.06.2012 15:55
>>>> Dear Jürgen,
>>>>
>>>> All the values of your Id variable are equal to 1; how can that make 
>>>> sense? Removing the argument Id=id may get you what you want.
>>>>
>>>> By the way, the document to which you refer was an appendix to a 2002 book 
>>>> that has been superseded by Fox and Weisberg, An R Companion to Applied 
>>>> Regression, Second Edition (Sage, 2011). Appendices for that book are 
>>>> available 
>>>> at<http://socserv.socsci.mcmaster.ca/jfox/Books/Companion/appendix.html>.
>>>>
>>>> I hope this helps,
>>>>    John
>>>>
>>>> ------------------------------------------------
>>>> John Fox
>>>> Sen. William McMaster Prof. of Social Statistics
>>>> Department of Sociology
>>>> McMaster University
>>>> Hamilton, Ontario, Canada
>>>> http://socserv.mcmaster.ca/jfox/
>>>>    
>>>> On Sat, 16 Jun 2012 15:04:48 +0200
>>>>    Jürgen Biedermann<juergen.biederm...@googlemail.com>   wrote:
>>>>> Dear Mr. Therneau, Mr. Fox, or to whoever, who has some time...
>>>>>
>>>>> I don't find a solution to use the "survfit" function (package: survival) 
>>>>>  for a defined pattern of covariates with a Cox-Model including a time 
>>>>> dependent interaction term. Somehow the definition of my "newdata" 
>>>>> argument seems to be erroneous.
>>>>> I already googled the problem, found many persons having the same or a 
>>>>> similar problem, but still no solution.
>>>>> I want to stress that my time-dependent covariate does not depend on the 
>>>>> failure of an individual (in this case it doesn't seem sensible to 
>>>>> predict a survivor function for an individual). Rather one of my effects 
>>>>> declines with time (time-dependent coefficient).
>>>>>
>>>>> For illustration, I use the example of John Fox's paper "Cox Proportional 
>>>>> - Hazards Regression for Survival Data".
>>>>> http://cran.r-project.org/doc/contrib/Fox-Companion/appendix-cox-regression.pdf
>>>>>
>>>>> Do you know any help? See code below
>>>>>
>>>>> Thanks very much in advance
>>>>> Jürgen Biedermann
>>>>>
>>>>> #----------------------------------------
>>>>> #Code
>>>>>
>>>>> Rossi<- 
>>>>> read.table("http://cran.r-project.org/doc/contrib/Fox-Companion/Rossi.txt";,
>>>>>  header=T)
>>>>>
>>>>> Rossi.2<- fold(Rossi, time='week',
>>>>>        event='arrest', cov=11:62, cov.names='employed')
>>>>>
>>>>> # see below for the fold function from John Fox
>>>>>
>>>>> # modeling an interaction with time (Page 14)
>>>>>
>>>>> mod.allison.5<- coxph(Surv(start, stop, arrest.time) ~
>>>>>        fin + age + age:stop + prio,
>>>>>        data=Rossi.2)
>>>>> mod.allison.5
>>>>>
>>>>> # Attempt to get the survivor function of a person with age=30, fin=0 and 
>>>>> prio=5
>>>>>
>>>>> newdata.1<- 
>>>>> data.frame(unique(Rossi.2[c("start","stop")]),fin=0,age=30,prio=5,Id=1,arrest.time=0)
>>>>> fit<- survfit(mod.allison.5,newdata.1,id="Id")
>>>>>
>>>>> Error message:
>>>>>
>>>>>    >Fehler in model.frame.default(data = newdata.1, id = "Id", formula =
>>>>> Surv(start,  :
>>>>>      Variablenlängen sind unterschiedlich (gefunden für '(id)')
>>>>>
>>>>> -->   failure, length of variables are different.
>>>>>
>>>>> #-----------------------------------------------------------------
>>>>> fold<- function(data, time, event, cov,
>>>>>        cov.names=paste('covariate', '.', 1:ncovs, sep=""),
>>>>>        suffix='.time', cov.times=0:ncov, common.times=TRUE, lag=0){
>>>>>        vlag<- function(x, lag) c(rep(NA, lag), x[1:(length(x)-lag)])
>>>>>        xlag<- function(x, lag) apply(as.matrix(x), 2, vlag, lag=lag)
>>>>>        all.cov<- unlist(cov)
>>>>>        if (!is.list(cov)) cov<- list(cov)
>>>>>        ncovs<- length(cov)
>>>>>        nrow<- nrow(data)
>>>>>        ncol<- ncol(data)
>>>>>        ncov<- length(cov[[1]])
>>>>>        nobs<- nrow*ncov
>>>>>        if (length(unique(c(sapply(cov, length), length(cov.times)-1)))>   
>>>>> 1)
>>>>>            stop(paste(
>>>>>                "all elements of cov must be of the same length and \n",
>>>>>                "cov.times must have one more entry than each element of
>>>>> cov."))
>>>>>        var.names<- names(data)
>>>>>        subjects<- rownames(data)
>>>>>        omit.cols<- if (!common.times) c(all.cov, cov.times) else all.cov
>>>>>        keep.cols<- (1:ncol)[-omit.cols]
>>>>>        nkeep<- length(keep.cols)
>>>>>        if (is.numeric(event)) event<- var.names[event]
>>>>>        times<- if (common.times) matrix(cov.times, nrow, ncov+1, byrow=T)
>>>>>            else data[, cov.times]
>>>>>        new.data<- matrix(Inf, nobs, 3 + ncovs + nkeep)
>>>>>        rownames<- rep("", nobs)
>>>>>        colnames(new.data)<- c('start', 'stop', paste(event, suffix, 
>>>>> sep=""),
>>>>>            var.names[-omit.cols], cov.names)
>>>>>        end.row<- 0
>>>>>        for (i in 1:nrow){
>>>>>            start.row<- end.row + 1
>>>>>            end.row<- end.row + ncov
>>>>>            start<- times[i, 1:ncov]
>>>>>            stop<- times[i, 2:(ncov+1)]
>>>>>            event.time<- ifelse (stop == data[i, time]&   data[i, event] ==
>>>>> 1, 1, 0)
>>>>>            keep<- matrix(unlist(data[i, -omit.cols]), ncov, nkeep, 
>>>>> byrow=T)
>>>>>            select<- apply(matrix(!is.na(data[i, all.cov]), ncol=ncovs),
>>>>> 1, all)
>>>>>            rows<- start.row:end.row
>>>>>            cov.mat<- xlag(matrix(unlist(data[i, all.cov]),
>>>>> nrow=length(rows)), lag)
>>>>>            new.data[rows[select], ]<-
>>>>>                cbind(start, stop, event.time, keep, cov.mat)[select,]
>>>>>            rownames[rows]<- paste(subjects[i], '.', seq(along=rows), 
>>>>> sep="")
>>>>>            }
>>>>>        row.names(new.data)<- rownames
>>>>>        as.data.frame(new.data[new.data[, 1] != Inf&
>>>>>            apply(as.matrix(!is.na(new.data[, cov.names])), 1, all), ])
>>>>>        }
>>>>> #-----------------------------------------------------------------
>>>>>

        [[alternative HTML version deleted]]

______________________________________________
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