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 26.08.22 Index]