[R] predicting from coxph with pspline

Hjellvik, Vidar Vidar.Hjellvik at fhi.no
Fri May 9 16:37:10 CEST 2008


Hello.

I get a bit confused by the output from the predict function when used
on an object from coxph in combination with p-spline, e.g. 

fit <- coxph(Surv(time1, time2, status)~pspline(x), Data)
predict(fit, newdata=data.frame(x=1:2))

It seems like the output is somewhat independent of the x-values to
predict at. For example x=1:2 gives the same result as x=21:22. Does the
result span the x-values in the original data set so that if I want to
predict a value at x=25, than x=c(min(Data$x), 25, max(Data$x)) would be
the right choice of x in newdata?

Below is some code and the output it produces. (An example with the
linear model "fit <- coxph(Surv(time1, time2, status)~x, Data)" which
gives more intuitive results is also included).

By the way, running the example in S-plus gives the same results in the
p-spline case, and slightly different results in the linear case.

require(survival)
Data <- data.frame(matrix(nc=4, byrow=T, c(
   37.6, 67.3, 0, 17.0,
   40.0, 69.7, 0, 22.7,
   47.5, 75.6, 0, 23.0,
   43.4, 62.9, 0, 23.1,
   43.1, 69.1, 1, 23.1,
   44.5, 73.1, 0, 23.1,
   41.7, 60.6, 0, 23.9,
   47.4, 75.5, 0, 23.9,
   42.9, 70.8, 0, 24.1,
   44.5, 63.8, 0, 24.1,
   44.8, 61.7, 0, 25.2,
   42.1, 55.8, 1, 25.9,
   41.0, 68.9, 1, 26.0,
   43.3, 61.2, 0, 26.2,
   38.0, 66.6, 0, 27.9,
   48.3, 77.9, 0, 28.3,
   42.5, 59.2, 0, 28.7,
   46.2, 74.3, 0, 29.3,
   39.9, 65.2, 1, 30.0,
   42.8, 73.2, 0, 44.0)))

names(Data) <- c("time1","time2","status","x")

print("Linear model")
fit <- coxph(Surv(time1, time2, status)~x, Data)
print(data.frame(x=21, pred=predict(fit, data.frame(x=21))))
print(data.frame(x=c(21,31), pred=predict(fit, data.frame(x=c(21,31)))))
print(data.frame(x=1:2, pred=predict(fit, data.frame(x=1:2))))
print(data.frame(x=1:3, pred=predict(fit, data.frame(x=1:3))))
print(data.frame(x=1:4, pred=predict(fit, data.frame(x=1:4))))
print(data.frame(x=c(1,2,4), pred=predict(fit, data.frame(x=c(1,2,4)))))
print(data.frame(x=c(1,3,4), pred=predict(fit, data.frame(x=c(1,3,4)))))

print("Pspline model")
fit <- coxph(Surv(time1, time2, status)~pspline(x), Data)
#print(data.frame(x=21, pred=predict(fit, data.frame(x=21)))) doesn't
work
print(data.frame(x=c(21,31), pred=predict(fit, data.frame(x=c(21,31)))))
print(data.frame(x=1:2, pred=predict(fit, data.frame(x=1:2))))
print(data.frame(x=1:3, pred=predict(fit, data.frame(x=1:3))))
print(data.frame(x=1:4, pred=predict(fit, data.frame(x=1:4))))
print(data.frame(x=c(1,2,4), pred=predict(fit, data.frame(x=c(1,2,4)))))
print(data.frame(x=c(1,3,4), pred=predict(fit, data.frame(x=c(1,3,4)))))



Output:
[1] "Linear model"
   x       pred
1 21 0.03244105
   x        pred
1 21  0.03244105
2 31 -0.03276709
  x      pred
1 1 0.1628573
2 2 0.1563365
  x      pred
1 1 0.1628573
2 2 0.1563365
3 3 0.1498157
  x      pred
1 1 0.1628573
2 2 0.1563365
3 3 0.1498157
4 4 0.1432949
  x      pred
1 1 0.1628573
2 2 0.1563365
3 4 0.1432949
  x      pred
1 1 0.1628573
2 3 0.1498157
3 4 0.1432949

[1] "Pspline model"
   x      pred
1 21 -4.023847
2 31 -4.012924
  x      pred
1 1 -4.023847
2 2 -4.012924
  x      pred
1 1 -4.023847
2 2  2.476954
3 3 -4.012924
  x      pred
1 1 -4.023847
2 2  1.537351
3 3  9.559708
4 4 -4.012924
  x      pred
1 1 -4.023847
2 2  1.537351
3 4 -4.012924
  x      pred
1 1 -4.023847
2 3  9.559708
3 4 -4.012924

Best regards,

Vidar Hjellvik
Norwegian Institute of Public Health
P.O.Box 4404 Nydalen
N-0403 Oslo
+47 21 07 82 66
vidar.hjellvik at fhi.no



More information about the R-help mailing list