[R] issues with calling predict.coxph.penal (survival) inside a function - subset-vector not found. Because of NextMethod?

Simon Zehnder szehnder at uni-bonn.de
Wed Nov 13 16:35:54 CET 2013


Works for me:

predicting_function(fit2,test1)
         1          2          3          4          5          6          7
-1.0481141  0.1495946  0.4492597  0.4492597  0.9982492 -0.4991246 -0.4991246

Best

Simon

On 13 Nov 2013, at 15:46, julian.bothe at elitepartner.de wrote:

> Hello everyone, 
> 
> 
> 
> I got an issue with calling predict.coxph.penal inside a function. 
> 
> 
> 
> Regarding the context: My original problem is that I wrote a function that
> uses predict.coxph and survfit(model) to predict
> 
> a lot of survival-curves using only the basis-curves for the strata (as
> delivered by survfit(model) ) and then adapts them with 
> 
> the predicted risk-scores. Because there are cases where my new data has
> strata which didn't exist in the original model I exclude 
> 
> them, using a Boolean vector inside the function.
> 
> I end up with a call like this: predict (coxph_model,
> newdata[subscript_vector,] ) 
> 
> 
> 
> This works fine for coxph.model, but when I fit a model with a spline
> (class coxph.penal), I get an error: 
> 
> "Error in `[.data.frame`(newdata, [subscript_vector, ) : object
> '[subscript_vector ' not found"
> 
> 
> 
> I suppose this is because of NextMethod, but I am not sure how to work
> around it. I also read a little bit about all those
> matching-and-frame-issues, 
> 
> But must confess I am not really into it. 
> 
> 
> 
> I attach a reproducible example. 
> 
> Any help or suggestions of work-arounds will be appreciated. 
> 
> 
> 
> Thanks 
> 
> Julian
> 
> 
> 
>> version
> 
>               _                           
> 
> platform       x86_64-w64-mingw32          
> 
> arch           x86_64                      
> 
> os             mingw32                     
> 
> system         x86_64, mingw32             
> 
> status                                     
> 
> major          3                           
> 
> minor          0.1                         
> 
> year           2013                        
> 
> month          05                          
> 
> day            16                          
> 
> svn rev        62743                       
> 
> language       R                           
> 
> version.string R version 3.0.1 (2013-05-16)
> 
> nickname       Good Sport    
> 
> 
> 
> 
> 
> ##TEST-DATA
> 
> 
> 
> # Create the simplest test data set 
> 
> test1 <- data.frame(time=c(4,3,1,1,2,2,3), 
> 
>              status=c(1,1,1,0,1,1,0), 
> 
>              x=c(0,2,1,1,1,0,0), 
> 
>              sex=c(0,0,0,0,1,1,1)) 
> 
> 
> 
> # Fit a stratified model 
> 
> fit1 <- coxph(Surv(time, status) ~ x + strata(sex), test1) 
> 
> summary(fit1)
> 
> 
> 
> #fit stratified wih spline
> 
> fit2 <- coxph(Surv(time, status) ~ pspline(x, df=2) + strata(sex), test1) 
> 
> summary(fit2)
> 
> 
> 
> #function to predict within
> 
> 
> 
> predicting_function <- function(model, newdata){
> 
>  subs <-vector(mode='logical', length=nrow(newdata))
> 
>  subs[1:length(subs)]<- TRUE
> 
> 
> 
>  ret <- predict (model, newdata=newdata[subs,])
> 
>  return(ret)
> 
> }
> 
> 
> 
> predicting_function(fit1, test1) # works
> 
> 
> 
> predicting_function(fit2,test1) #doesnt work - Error in
> `[.data.frame`(newdata, subs, ) : object 'subs' not found
> 
>                                # probably because of NextMethod
> 
> 
> 
> #--------
> 
>> traceback()
> 
> #12: `[.data.frame`(newdata, subs, )
> 
> #11: newdata[subs, ]
> 
> #10: is.data.frame(data)
> 
> #9: model.frame.default(data = newdata[subs, ], formula = ~pspline(x, 
> 
> #       df = 2) + strata(sex), na.action = function (object, ...) 
> 
> #   object)
> 
> #8: model.frame(data = newdata[subs, ], formula = ~pspline(x, df = 2) + 
> 
> #       strata(sex), na.action = function (object, ...) 
> 
> #   object)
> 
> #7: eval(expr, envir, enclos)
> 
> #6: eval(tcall, parent.frame())
> 
> #5: predict.coxph(model, newdata = newdata[subs, ])
> 
> #4: NextMethod("predict", object, ...)
> 
> #3: predict.coxph.penal(model, newdata = newdata[subs, ])
> 
> #2: predict(model, newdata = newdata[subs, ]) at #5
> 
> #1: predicting_function(fit2, test1)
> 
> 
> 
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> 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.



More information about the R-help mailing list