On Nov 25, 2010, at 10:08 AM, Ben Rhelp wrote:

Hi David,

Thank you for your reply. See below for more information.


From: David Winsemius


On Nov 25, 2010, at 7:27 AM, Ben Rhelp wrote:

I manage to achieve similar results with a Cox model as follows but I don't really understand why we have to take the inverse of the linear prediction
with
the Cox model

Different parameterization. You can find expanded answer(s) in the archives
and in the documentation of  survreg.distributions.


I understand (i think) the difference in model structures between a Cox (coxph)
and Proportional hazard model (survreg).

I couldn't tell whether this means you decided that those citations answered your question. If not, then refer to Therneau's or Lumley's replies in rhelp to a similar question earlier this month.:

https://stat.ethz.ch/pipermail/r-help/2010-November/259796.html
https://stat.ethz.ch/pipermail/r-help/2010-November/259747.html




and why we do not need to divide by the  number of days in the year
anymore?

Here I'm guessing (since you don't offer enough evidence to confirm) that the difference is in the time scales used in your Aidsp$survtime versus some other
example to which you are  comparing .

Both models are run from the same data, so I am not expecting any differences in
time scales.

To get similar results, I need to actually run the following equations: expected_lifetime_in_years = exp(fit)/365.25 ---> Linear
prediction of the Proportional hazard model
expected_lifetime_in_years = 1/exp(fit) ---> Linear
prediction of the Cox model
where fit come from the linear prediction of each models, respectively.

Actually, in the code below, I re-run the models and predictions based on a
yearly sampling time (instead of daily).
Again, to get similar results, I now need to actually run the following
equations:
expected_lifetime_in_years = exp(fit) ---> Linear
prediction of the Proportional hazard model
expected_lifetime_in_years = 1/exp(fit) ---> Linear
prediction of the Cox model

I think I understand the logic behind the results of the proportional hazard
model, but not for the prediction of the Cox model.

 Cox models are PH models.


Thank you for your help. I hope this is not a too stupid hole in my logic.

Here is the self contained R code to produce the charts:

library(MASS);
library(survival);

#Same data but parametric fit
make.aidsp <- function(){
  cutoff <- 10043 # July 1987 in julian days
  btime <- pmin(cutoff, Aids2$death) - pmin(cutoff, Aids2$diag)
  atime <- pmax(cutoff, Aids2$death) - pmax(cutoff, Aids2$diag)
  survtime <- btime + 0.5*atime
  status <- as.numeric(Aids2$status)
  data.frame(survtime, status = status - 1, state = Aids2$state,
  T.categ = Aids2$T.categ, age = Aids2$age, sex = Aids2$sex)
}
Aidsp <- make.aidsp()

# MASS example with the proportional hazard model
par(mfrow = c(1, 2));
(aids.ps <- survreg(Surv(survtime + 0.9, status) ~ state + T.categ +
pspline(age, df=6), data = Aidsp))
zz <- predict(aids.ps, data.frame(state = factor(rep("NSW", 83), levels =
levels(Aidsp$state)),
T.categ = factor(rep("hs", 83), levels = levels(Aidsp$T.categ)), age =
0:82), se = T, type = "linear")
plot(0:82, exp(zz$fit)/365.25, type = "l", ylim = c(0, 2), xlab = "age", ylab =
"expected lifetime (years)")
lines(0:82, exp(zz$fit+1.96*zz$se.fit)/365.25, lty = 3, col = 2)
lines(0:82, exp(zz$fit-1.96*zz$se.fit)/365.25, lty = 3, col = 2)
rug(Aidsp$age + runif(length(Aidsp$age), -0.5, 0.5), ticksize = 0.015)


# Same example but with a Cox model instead
(aids.pscp <- coxph(Surv(survtime + 0.9, status) ~ state + T.categ +
pspline(age, df=6), data = Aidsp))
zzcp <- predict(aids.pscp, data.frame(state = factor(rep("NSW", 83), levels =
levels(Aidsp$state)),
T.categ = factor(rep("hs", 83), levels = levels(Aidsp$T.categ)), age =
0:82), se = T, type = "lp")
plot(0:82, 1/exp(zzcp$fit), type = "l", ylim = c(0, 2), xlab = "age", ylab =
"expected lifetime (years)")
lines(0:82, 1/exp(zzcp$fit+1.96*zzcp$se.fit), lty = 3, col = 2)
lines(0:82, 1/exp(zzcp$fit-1.96*zzcp$se.fit), lty = 3, col = 2)
rug(Aidsp$age + runif(length(Aidsp$age), -0.5, 0.5), ticksize = 0.015)


# Change the sampling time from daily to yearly
par(mfrow = c(1, 1));
(aids.ps <- survreg(Surv((survtime + 0.9)/365.25, status) ~ state + T.categ +
pspline(age, df=6), data = Aidsp))
zz <- predict(aids.ps, data.frame(state = factor(rep("NSW", 83), levels =
levels(Aidsp$state)),
T.categ = factor(rep("hs", 83), levels = levels(Aidsp$T.categ)), age =
0:82), se = T, type = "linear")
plot(0:82, exp(zz$fit), type = "l", ylim = c(0, 2), xlab = "age", ylab =
"expected lifetime (years)")

(aids.pscp <- coxph(Surv((survtime + 0.9)/365.25, status) ~ state + T.categ +
pspline(age, df=6), data = Aidsp))
zzcp <- predict(aids.pscp, data.frame(state = factor(rep("NSW", 83), levels =
levels(Aidsp$state)),
T.categ = factor(rep("hs", 83), levels = levels(Aidsp$T.categ)), age =
0:82), se = T, type = "lp")
lines(0:82, 1/exp(zzcp$fit),col=4)





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