Learn R Programming

JSM (version 1.0.1)

jmodelTM: Semiparametric Joint Models for Survival and Longitudinal Data

Description

This function applies a maximum likelihood approach to fit the semiparametric joint models of survival and normal longitudinal data. The survival model is assumed to come from a class of transformation models, including the Cox proportional hazards model and the proportional odds model as special cases. The longitudinal process is modeled by liner mixed-effects models.

Usage

jmodelTM(fitLME, fitCOX, data, model = 1, rho = 0, timeVarY = NULL, 
         timeVarT = NULL, control = list(), …)

Arguments

fitLME

an object inheriting from class lme representing a fitted linear mixed-effects model. See Note.

fitCOX

an object inheriting from class coxph representing a fitted Cox proportional hazards regression model. Specifying x = TRUE is required in the call to coxph() to include the design matrix in the object fit. See Note.

data

a data.frame containing all the variables included in the joint modeling. See Note.

model

an indicator specifying the dependency between the survival and longitudinal outcomes. Default is 1. See Details.

rho

a nonnegative real number specifying the transformation model you would like to fit. Default is 0, i.e. the Cox proportional hazards model. See Details.

timeVarY

a character string indicating the time variable in the linear mixed-effects model. See Examples.

timeVarT

a character string indicating the time variable in the coxph object. Normally it is NULL. See Note and Examples.

control

a list of control values for the estimation algorithm with components:

tol.P

tolerance value for convergence in the parameters with default value 1e-03. See Details.

tol.L

tolerance value for convergence in the log-likelihood with default value 1e-06. See Details.

max.iter

the maximum number of EM iterations with default value 250.

SE.method

a character string specifying the standard error estimation method. Default is "PRES". See Details and Note.

delta

a positive value used for numerical differentiation in the SE.method. Default is 1e-05 if "PRES" is used and 1e-03 otherwise. See Details.

nknot

the number of Gauss-Hermite quadrature knots used to approximate the integrals over the random effects. Default is 9 and 7 for one- and two-dimensional integration, respectively, and 5 for those with higher dimensions.

additional options to be passed to the control argument.

Value

See jmodelTMObject for the components of the fit.

Details

The jmodelTM function fits joint models for survival and longitudinal data. Linear mixed-effects models are assumed for the longitudinal processes. With the Cox proportional hazards model and the proportional odds model as special cases, a general class of transformation models are assumed for the survival processes. The baseline hazard functions are left unspecified, i.e. no parametric forms are assumed, thus leading to semiparametric models. For detailed model formulation, please refer to Xu, Baines and Wang (2014).

The longitudinal model is written as $$Y_i(t)=\mu_i(t) + \varepsilon_i(t) = \mathbf{X}_i^\top(t)\boldsymbol\beta + \mathbf{Z}_i^\top(t)\mathbf{b}_i + \varepsilon_i(t).$$, then the linear predictor for the survival model is expressed as $$\eta(t) = \mathbf{W}_i^\top(t)\boldsymbol\phi + \alpha\mu_i(t),$$ indicating that the entire longitudinal process (free of error) enters the survival model as a covariate. If other values are assigned to the model argument, the linear predictor for the surival model is then expressed as $$\eta(t) = \mathbf{W}_i^\top(t)\boldsymbol\phi + \alpha\mathbf{Z}_i^\top(t)\mathbf{b}_i,$$ suggesting that the survival and longitudinal models only share the same random effects.

The survival model is written as $$\Lambda(t|\eta(t)) = G\left[\int_0^t\exp{\eta(s)}d\Lambda_0(s)\right],$$ where \(G(x) = \log(1 + \rho x) / \rho\) with \(\rho \geq 0\) is the class of logarithmic transfomrations. If rho = 0, then \(G(x) = x\), yielding the Cox proportional hazards model. If rho = 1, then \(G(x) = \log(1 + x)\), yielding the proportional odds model. Users could assign any nonnegative real value to rho.

An expectation-maximization (EM) algorithm is implemented to obtain parameter estimates. The convergence criterion is either of (i) \(\max \{ | \boldsymbol\theta^{(t)} - \boldsymbol\theta^{(t - 1)} | / ( | \boldsymbol\theta^{(t - 1)} | + .Machine\$double.eps \times 2 ) \} < tol.P\), or (ii) \(| L(\boldsymbol\theta^{(t)}) - L(\boldsymbol\theta^{(t - 1)})| / ( | L(\theta^{(t - 1)}) | + .Machine\$double.eps \times 2 ) < tol.L\), is satisfied. Here \(\boldsymbol\theta^{(t)}\) and \(\boldsymbol\theta^{(t-1)}\) are the vector of parameter estimates at the \(t\)-th and \((t-1)\)-th EM iterations, respectively; \(L(\boldsymbol\theta)\) is the value of the log-likelihood function evaluated at \(\boldsymbol\theta\). Users could specify the tolerance values tol.P and tol.L through the control argument.

For standard error estimation for the parameter estimates, three methods are provided, namely "PRES", "PFDS" and "PLFD" (detailed information are referred to Xu, Baines and Wang (2014)). In the control argument, if SE.method = "PRES", numerically differentiating the profile Fisher score vector with Richardson extrapolation is applied; if SE.method = "PFDS", numerically differentiating the profile Fisher score vector with forward difference is applied; if SE.method = "PLFD", numerially (second) differentiating the profile likelihood with forward difference is applied. Generally, numerically differentiating a function \(f(x)\) (an arbitrary function) with forward difference is expressed as $$f^\prime(x) = \frac{f(x + \delta) - f(x)}{\delta},$$ and that with Richardson extrapolation is expressed as $$f^\prime(x) = \frac{f(x - 2\delta) - 8f(x - \delta) + 8f(x + \delta) - f(x + 2\delta)}{12\delta}.$$ Users could specify the value of \(\delta\) through the delta item in the control argument.

References

Dabrowska, D. M. and Doksun K. A. (1988) Partial Likelihood in Transformation Models with Censored Data. Scandinavian Journal of Statistics 15, 1--23.

Tsiatis, A. A. and Davidian, M. (2004) Joint modeling of longitudinal and time-to-event data: an overview. Statistica Sinica 14, 809--834.

Wulfsohn, M. S. and Tsiatis, A. A. (1997) A joint model for survival and longitudinal data measured with error. Biometrics 53, 330--339.

Xu, C., Baines, P. D. and Wang, J. L. (2014) Standard error estimation using the EM algorithm for the joint modeling of survival and longitudinal data. Biostatistics 15, 731--744.

Xu, C., Hadjipantelis, P. Z. and Wang, J. L. (2020) Semiparametric joint modeling of survival and longitudinal data: the R package JSM. Journal of Statistical Software <doi:10.18637/jss.v093.i02>.

Zeng, D. and Lin, D. (2007) Maximum likelihood estimation in semiparametric regression models with censored data. Journal of the Royal Statistical Society: Series B 69, 507--564.

See Also

jmodelTMObject, lme, coxph, Surv

Examples

Run this code
# NOT RUN {
# linear mixed-effects model fit with random intercept
fitLME <- lme(sqrt(CD4) ~ obstime + I(obstime ^ 2) + drug : obstime + drug : I(obstime ^ 2), 
              random = ~ 1 | ID, data = aids)
# Cox proportional hazards model fit with a single time-independent covariate
fitCOX <- coxph(Surv(start, stop, event) ~ drug, data = aids, x = TRUE)

# joint model fit which assumes the Cox proportional hazards model for the survival process
# Use 'max.iter = 5', 'nknot = 3' and the 'PFDS' method to calculate standard 
# error estimates as a quick toy example 
fitJT.ph <- jmodelTM(fitLME, fitCOX, aids, timeVarY = 'obstime', 
                     control = list(SE.method = 'PFDS', max.iter = 5, nknot = 3))
summary(fitJT.ph)

# }
# NOT RUN {
# joint model fit with the default control
fitJT.ph2 <- jmodelTM(fitLME, fitCOX, aids, timeVarY = 'obstime')
summary(fitJT.ph2)
# joint model fit where the survival and longitudinal processes only share 
# the same random effect
fitJT.ph3 <- jmodelTM(fitLME, fitCOX, aids, model = 2, timeVarY = 'obstime')
summary(fitJT.ph3)

# joint model fit which assumes the proportional odds model for the survival process
fitJT.po <- jmodelTM(fitLME, fitCOX, aids, rho = 1, timeVarY = 'obstime')
summary(fitJT.po)
# joint model fit where the survival and longitudinal processes only share 
# the same random effect
fitJT.po2 <- jmodelTM(fitLME, fitCOX, aids, model = 2, rho = 1, timeVarY = 'obstime')
summary(fitJT.po2)

# linear mixed-effects model fit with random intercept and random slope
fitLME2 <- lme(sqrt(CD4) ~ drug + obstime + I(obstime ^ 2) + drug : obstime + 
               drug : I(obstime ^2), random = ~ obstime | ID, data = aids)
# Cox proportional hazards model fit with a time-dependent covariate
fitCOX2 <- coxph(Surv(start, stop, event) ~ drug + as.numeric(drug) : obstime, 
                 data = aids, x = TRUE)
# joint model fit in which \code{timeVarT} must be specified
fitJT.ph4 <- jmodelTM(fitLME2, fitCOX2, aids, timeVarY = 'obstime', timeVarT = 'obstime')
summary(fitJT.ph4)
# }

Run the code above in your browser using DataLab