Tools to convert a Cox proportional hazard model into Poisson regression

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

Arguments

formula

The formula for the coxph model where the reponse 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.

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

debug

Print debug-information

...

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

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)
#>   x  y  z yy zz
#> 1 1  2  3 NA NA
#> 2 2  3  4 NA NA
#> 3 3 NA NA  4  5
#> 4 4 NA NA  5  6

## 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)
#> Error in !is.null(h) && !is.null(h[[key]]) && !(is.na(h[[key]])): 'length = 2' in coercion to 'logical(1)'
summary(r)
#> Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'summary': object 'r' not found

## 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)
#> Error in !is.null(h) && !is.null(h[[key]]) && !(is.na(h[[key]])): 'length = 2' in coercion to 'logical(1)'