inla.coxph {INLA}R Documentation

Convert a Cox proportional hazard model into Poisson regression

Description

Tools to convert a Cox proportional hazard model into Poisson regression

Usage

inla.coxph(formula, data, control.hazard = list(), debug = FALSE, tag = "")

inla.rbind.data.frames(...)

Arguments

formula

The formula for the coxph model where the response must be a inla.surv-object.

data

All the data used in the formula, as a list.

control.hazard

Control the model for the baseline-hazard; see ?control.hazard.

debug

Print debug-information

tag

An optional tag added to the names of the new variables created (to make them unique when combined with several calls of inla.coxph. Note that E..coxph is not included, as its usually merged into one vector over different expansions.

...

Data.frames to be rbind-ed, padding with NA.

Value

inla.coxph returns a list of new expanded variables to be used in the inla-call. Note that element data and data.list needs to be merged into a list to be passed as the data argument. See the example for details.

inla.rbind.data.frames returns the rbinded data.frames padded with NAs. There is a better implementation in dplyr::bind_rows, which is used if package dplyr is installed.

Author(s)

Havard Rue hrue@r-inla.org

Examples


## How the cbind.data.frames works:
df1 = data.frame(x=1:2, y=2:3, z=3:4)
df2 = data.frame(x=3:4, yy=4:5, zz=5:6)
inla.rbind.data.frames(df1, df2)

## Standard example of how to convert a coxph into a Poisson regression
n = 1000
x = runif(n)
lambda = exp(1+x)
y = rexp(n, rate=lambda)
event = rep(1,n)
data = list(y=y, event=event, x=x)
y.surv = inla.surv(y, event)
intercept1 = rep(1, n)
p = inla.coxph(y.surv ~ -1 + intercept1 + x,
               list(y.surv = y.surv,  x=x, intercept1 = intercept1))

r = inla(p$formula,
        family = p$family,
        data=c(as.list(p$data), p$data.list),
        E = p$E)
summary(r)

## How to use this in a joint model
intercept2 = rep(1, n)
y = 1 + x + rnorm(n, sd=0.1)
df = data.frame(intercept2, x, y)

## new need to cbind the data.frames, and then add the list-part of
## the data
df.joint = c(as.list(inla.rbind.data.frames(p$data, df)), p$data.list)
df.joint$Y = cbind(df.joint$y..coxph, df.joint$y)

## merge the formulas, recall to add '-1' and to use the new joint
## reponse 'Y'
formula = update(p$formula, Y ~ intercept2 -1 + .)

rr = inla(formula,
        family = c(p$family, "gaussian"),
        data = df.joint,
        E = df.joint$E..coxph)


## A check that automatic and manual approach gives the same result
data(Leuk)
## add some random stuff for testing. Note that variables needs to
## be in 'data' as they are expanded
Leuk$off <- runif(nrow(Leuk), min = -0.5, max = 0.5)
Leuk$off.form <- runif(nrow(Leuk), min = -0.5, max = 0.5)
Leuk$w <- runif(nrow(Leuk), min = 0.5, max = 1.0)
formula <- inla.surv(time, cens) ~ sex + age +
    wbc + tpi + offset(off.form)
r <- inla(formula, family = "coxph", data = Leuk,
          offset = off, weights = w)
cph <- inla.coxph(formula = formula, data = Leuk)
cph.data = c(as.list(cph$data), cph$data.list)
rr <- inla(cph$formula, family = cph$family,  data = cph.data, 
           E = cph$E, offset = off, weights = w)
print(cbind(r$mlik, rr$mlik, r$mlik - rr$mlik))


[Package INLA version 25.06.13 Index]