2025-01-12 00:52:51 +08:00

57 lines
2.0 KiB
R

options(na.action=na.exclude) # preserve missings
options(contrasts=c('contr.treatment', 'contr.poly')) #ensure constrast type
library(survival)
#
# Test the coxph program on the Ovarian data
summary(survfit(Surv(futime, fustat)~1, data=ovarian), censor=TRUE)
# Various models
coxph(Surv(futime, fustat)~ age, data=ovarian)
coxph(Surv(futime, fustat)~ resid.ds, data=ovarian)
coxph(Surv(futime, fustat)~ rx, data=ovarian)
coxph(Surv(futime, fustat)~ ecog.ps, data=ovarian)
coxph(Surv(futime, fustat)~ resid.ds + rx + ecog.ps, data=ovarian)
coxph(Surv(futime, fustat)~ age + rx + ecog.ps, data=ovarian)
coxph(Surv(futime, fustat)~ age + resid.ds + ecog.ps, data=ovarian)
coxph(Surv(futime, fustat)~ age + resid.ds + rx, data=ovarian)
# Residuals
fit <- coxph(Surv(futime, fustat)~ age + resid.ds + rx + ecog.ps, data=ovarian)
resid(fit)
resid(fit, 'dev')
resid(fit, 'scor')
resid(fit, 'scho')
fit <- coxph(Surv(futime, fustat) ~ age + ecog.ps + strata(rx), data=ovarian)
summary(fit)
summary(survfit(fit))
sfit <- survfit(fit, list(age=c(30,70), ecog.ps=c(2,3))) #two columns
sfit
summary(sfit)
# Check of offset + surv, added 7/2000
fit1 <- coxph(Surv(futime, fustat) ~ age + rx, ovarian,
control=coxph.control(eps=1e-8))
fit2 <- coxph(Surv(futime, fustat) ~ age + offset(rx*fit1$coef[2]), ovarian,
control=coxph.control(eps=1e-8))
all.equal(fit1$coef[1], fit2$coef[1])
fit <- coxph(Surv(futime, fustat) ~ age + offset(rx), ovarian)
survfit(fit, censor=FALSE)$surv^exp(-1.5)
# Check it by hand -- there are no tied times
# Remember that offsets from survfit are centered, which is 1.5 for
# this data set.
eta <- fit$coef*(ovarian$age - fit$mean) + (ovarian$rx - 1.5)
ord <- order(ovarian$futime)
risk <- exp(eta[ord])
rsum <- rev(cumsum(rev(risk))) # cumulative risk at each time point
dead <- (ovarian$fustat[ord]==1)
baseline <- cumsum(1/rsum[dead])
all.equal(survfit(fit, censor=FALSE)$surv, exp(-baseline))
rm(fit, fit1, fit2, ord, eta, risk, rsum, dead, baseline, sfit)