On Dec 19, 2011, at 3:34 AM, aajit75 wrote:

Dear R-users,

I would like to determine the probability of event at specific time using
cox model fit. On the development sample data I am able to get the
probability of a event at time point(t).
I need probability score of a event at specific time, using scoring scoring dataset which will have only covariates and not the response variables.

Here is the sample code:

n = 1000
beta1 = 2; beta2 = -1;
lambdaT = .02 # baseline hazard
lambdaC = .4  # hazard of censoring
x1 = rnorm(n,0)
x2 = rnorm(n,0)

# true event time
T = rweibull(n, shape=1, scale=lambdaT*exp(-beta1*x1-beta2*x2))
C = rweibull(n, shape=1, scale=lambdaC)   #censoring time
time = pmin(T,C)  #observed time is min of censored and true
event = time==T   # set to 1 if event is observed
dataphr=data.frame(time,event,x1,x2)

library(survival)
fit_coxph <- coxph(Surv(time, event)~ x1 + x2 , method="breslow")

library(peperr)
predictProb.coxph(fit_coxph, Surv(dataphr$time, dataphr$event), dataphr,
0.003)

# Using predictProb.coxph function, probability of event at time (t) is
estimated for cox fit models,

No , it should not be the probability at time T (which would be infinitesimally small at any time point), but rather the probability prior to time T. I am puzzled why one would not use predict.coxph with type="expected".

?predict.coxph

I want to estimate this probability on scoring
dataset score_data as below with covariate x1 and x2.

Is it possible/ is there any way to get these probabilities? since in
predictProb.coxph function it requires response, which is not preseent on
scoring sample.

Raising what would seem to be the obvious question: Why didn't you make one? Or use the derivation Surv object?


n = 1000
set.seed(1)
x1 = rnorm(n,0)
x2 = rnorm(n,0)
score_data <- data.frame(x1,x2)

> n = 100
> set.seed(1)
> x1 = rnorm(n,0)
> x2 = rnorm(n,0)
> score_data <- data.frame(x1,x2)
> s.scr <- survival::Surv(rep(2, n),rep(1, n) )
> predictProb.coxph(fit_coxph, s.scr, score_data, 0.003)
Error in model.frame.default(formula = Surv(time, event) ~ x1 + x2) :
  variable lengths differ (found for 'x1')

After getting that model.frame error with the 10000 element test set: "variable lengths differ (found for 'x1')", I changed it to the same length as in the derivation set and ran:

predictProb.coxph(fit_coxph, Surv(time, event), score_data, 0.003)
                [,1]
   [1,] 9.977413e-01
   [2,] 9.879081e-01
   [3,] 9.893564e-01
   [4,] 5.857123e-01
   [5,] 9.550606e-01
   [6,] 9.761398e-01
   [7,] 9.699297e-01
   snipped

So apparently that function will accept a dataframe even though its help page says it should be a matrix and it will run if the same number of records aare present as in the derivation set. This next version also worked and gave identical results, so it appears the Surv object is really just a place holder.

 s.scr <- survival::Surv(rep(2, n),rep(0, n) )
> predictProb.coxph(fit_coxph, s.scr, score_data,  0.003)
                [,1]
   [1,] 9.977413e-01
   [2,] 9.879081e-01
   [3,] 9.893564e-01
   [4,] 5.857123e-01
   [5,] 9.550606e-01
   snipped

Since I am not a regular user I cannot really answer the question about whether a Surv() object and a dataframe of different dimensions than the fit object should be valid input to that function.

(Copied the peperr author.)


David Winsemius, MD
West Hartford, CT

______________________________________________
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