library(survival)
# Make sample data
set.seed(123)
nsub <- 20
follow <- 5
x <- rnorm(nsub)
rate <- exp(-0.5 + x)
etime <- rweibull(nsub, 1, 1/rate)
status <- as.integer(etime < follow)
time <- pmin(follow, etime)
dat <- data.frame(status, x, time)
coxph(Surv(time, status)~x, data=dat)
modelexpr <- "cox(time,status)~exp(beta*x)"
epifit(modelexpr=modelexpr, data=dat)
glm(status ~ x + offset(log(time)), family=poisson(), data=dat)
preexpr <- "mu <- time*exp(beta0 + beta1*x)"
modelexpr <- "pois(mu) ~ status"
epifit(modelexpr=modelexpr, preexpr=preexpr, data=dat)
# The simplest test data set from coxph function
test1 <- list(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))
# Cox regressions with strata
coxph(Surv(time, status) ~ x + strata(sex), data=test1)
modelexpr <- "cox(time,status)/strata=sex~exp(beta*x)"
epifit(modelexpr=modelexpr, data=test1)
# Tie specification example in Cox regressions
coxph(Surv(time, status) ~ x + strata(sex), data=test1, ties="breslow")
modelexpr <- "cox(time,status)/strata=sex,ties=breslow~exp(beta*x)"
epifit(modelexpr=modelexpr, data=test1)
# Average partial likelihood
modelexpr <- "cox(time,status)/strata=sex,ties=average~exp(beta*x)"
epifit(modelexpr=modelexpr, data=test1)
# Conditional logistic regression for matched case-control studies
# hypothetical data
conlog <- data.frame(strata=c(1,1,2,2,3,3,4,4,5,5), outcome=c(1,0,1,0,1,0,1,0,1,0),
cov=c(1,3,2,1,5,2,4,2,2,2))
# Make dummy survival time so that all the cases in a matched set have the same survival
# time value, and the corresponding controls are censored at later times
conlog <- cbind(conlog, dummy=(2 - conlog$outcome))
coxph(Surv(dummy, outcome)~cov + strata(strata), ties="exact", data=conlog)
modelexpr <- "cox(dummy,outcome)/ties=discrete,strata=strata~exp(beta*cov)"
epifit(modelexpr=modelexpr, data=conlog)
# Joint model example (for demonstrating technical specifications)
nsub <- 1000
follow <- 10
x <- rnorm(nsub)
dose <- rweibull(nsub, 0.5, 1/(2.84)^2)
rate <- exp(-1 + x)*(1 + 0.5*dose)
# Generate survival data
etime <- rweibull(nsub, 1, 1/rate)
status <- as.integer(etime < follow)
time <- pmin(follow, etime)
dat2 <- data.frame(event=status, py=time, x, dose, model=1)
# Generate person-year table (baseline is different)
py <- runif(nsub)*follow
rate2 <- exp(-0.5 + 0.5*x)*(1 + 0.5*dose)
event <- sapply(rate2*py, function(x){rpois(1, x)})
dat3 <- cbind(pytable(event, py, cbind(x,dose)), model=2)
dat4 <- rbind(dat2, dat3)
modelexpr <- c("cox(py,event)/subset=(model==1)~exp(beta0*x)*(1 + beta*dose)",
"pois(py*exp(beta1 + beta2*x)*(1 + beta*dose))/subset=(model==2) ~ event")
epifit(modelexpr, data=dat4)
# Time dependent covariate example
id <- 1:8
group <- c(0, 0, 0, 0, 1, 1, 1, 1)
time <- c(4, 5, 7, 9, 6, 10, 11, 12)
event <- c(1, 1, 0, 1, 1, 1, 1, 0)
dat5 <- data.frame(id=id, group=group, time=time, event=event)
modelexpr <- "cox(time, event) ~ exp(beta1*group + beta2*t_g)"
# t_g is time-dependent variable created by using event time time_inner_ (created automatically)
timedepexpr <- "t_g <- time_inner_ * group"
epifit(modelexpr=modelexpr, timedepexpr=timedepexpr, data=dat5)
coxph(Surv(time, event) ~ group + tt(group),
tt = function(x, t, ...){x * t},data=dat5)
cov0 <- data.frame(id=id, time=0, value=0*group)
cov4 <- data.frame(id=id, time=3.9, value=4*group)
cov5 <- data.frame(id=id, time=4.9, value=5*group)
cov6 <- data.frame(id=id, time=5.9, value=6*group)
cov9 <- data.frame(id=id, time=8.9, value=9*group)
cov10 <- data.frame(id=id, time=9.9, value=10*group)
cov11 <- data.frame(id=id, time=10.9, value=11*group)
tdata <- data.frame(id=id, group=group)
tdata <- tmerge(tdata, dat5, id, status=event(time, event))
tdata <- tmerge(tdata, cov0, id, t_g=tdc(time, value))
tdata <- tmerge(tdata, cov4, id, t_g=tdc(time, value))
tdata <- tmerge(tdata, cov5, id, t_g=tdc(time, value))
tdata <- tmerge(tdata, cov6, id, t_g=tdc(time, value))
tdata <- tmerge(tdata, cov9, id, t_g=tdc(time, value))
tdata <- tmerge(tdata, cov10, id, t_g=tdc(time, value))
tdata <- tmerge(tdata, cov11, id, t_g=tdc(time, value))
coxph(Surv(tstart, tstop, status) ~ group + t_g, data=tdata)
epifit("cox(tstart, tstop, status) ~ exp(beta1*group + beta2*t_g)", data=tdata)
Run the code above in your browser using DataLab