Joint Modelling of Multivariate Longitudinal Data and Time-to-Event Outcomes

Fits the joint model proposed by Henderson and colleagues (2000) , but extended to the case of multiple continuous longitudinal measures. The time-to-event data is modelled using a Cox proportional hazards regression model with time-varying covariates. The multiple longitudinal outcomes are modelled using a multivariate version of the Laird and Ware linear mixed model. The association is captured by a multivariate latent Gaussian process. The model is estimated using a Monte Carlo Expectation Maximization algorithm. This project is funded by the Medical Research Council (Grant number MR/M013227/1).

joineRML is an extension of the joineR package for fitting joint models of time-to-event data and multivariate longitudinal data. The model fitted in joineRML is an extension of the Wulfsohn and Tsiatis (1997) and Henderson et al. (2000) models, which is comprised on (K + 1)-sub-models: a Cox proportional hazards regression model (Cox, 1972) and a K-variate linear mixed-effects model - a direct extension of the Laird and Ware (1982) regression model. The model is fitted using a Monte Carlo Expectation-Maximization (MCEM) algorithm, which closely follows the methodology presented by Lin et al. (2002).

As noted in Hickey et al. (2016), there is a lack of statistical software available for fitting joint models to multivariate longitudinal data. This is contrary to a growing methodology in the statistical literature. joineRML is intended to fill this void.


The main workhorse function is mjoint. As a simple example, we use the heart.valve dataset from the package and fit a bivariate joint model.

hvd <- heart.valve[!$log.grad) & !$log.lvmi), ]
fit <- mjoint(
    formLongFixed = list("grad" = log.grad ~ time + sex + hs,
                         "lvmi" = log.lvmi ~ time + sex),
    formLongRandom = list("grad" = ~ 1 | num,
                          "lvmi" = ~ time | num),
    formSurv = Surv(fuyrs, status) ~ age,
    data = list(hvd, hvd),
    timeVar = "time")

The fitted model is assigned to fit. We can apply a number of functions to this object, e.g. coef, logLik, plot, print, ranef, fixef, summary, AIC, getVarCov, vcov, confint, sigma, update, and formula. For example,

plot(fit, param = 'gamma')

mjoint automatically estimates approximate standard errors using the empirical information matrix (Lin et al., 2002), but the bootSE function can be used as an alternative.

Errors and updates

If you spot any errors or wish to see a new feature added, please file an issue at or email Graeme Hickey.

Further learning

For an overview of the model estimation being performed, please see the technical vignette, which can be accessed by

vignette('technical', package = 'joineRML')

For a demonstration of the package, please see the introductory vignette, which can be accessed by

vignette('joineRML', package = 'joineRML')


This project is funded by the Medical Research Council (Grant number MR/M013227/1).

Using the latest developmental version

To install the latest developmental version, you will need R version (version 3.1 or higher) and some additional software depending on what platform you are using.

If not already installed, you will need to install Rtools. Choose the version that corresponds to the version of R that you are using.

If not already installed, you will need to install Xcode Command Line Tools. To do this, open a new terminal and run

$ xcode-select --install

To verify that the install was successful, run the following line in the terminal

$ xcode-select -p

which should return the following


The latest developmental version will not yet be available on CRAN. Therefore, to install it, you will need devtools. You can check you are using the correct version by running

pkg_check <- require('devtools')
if (pkg_check) {
  pkg_check <- (packageVersion("devtools") >= 1.6)
if (!pkg_check) {

Once the prerequisite software is installed, you can install joineRML (without the vignettes) by running the following command in an R console


If you have LaTeX installed, you can install joineRML (with the vignettes) by running the following command in an R console

install_github('graemeleehickey/joineRML', build_vignettes = TRUE)

Note that LaTeX will need the following packages: graphicx, amsmath, amssymb, amsfonts, setspace, enumitem, hyperref. Note, however, that one of the vignettes requires quite a bit of time to run and compile (approx. 15 minutes), so you may wish to skip this process.


  1. Cox DR. Regression models and life-tables. J R Stat Soc Ser B Stat Methodol. 1972; 34(2): 187-220.

  2. Henderson R, Diggle PJ, Dobson A. Joint modelling of longitudinal measurements and event time data. Biostatistics. 2000; 1(4): 465-480.

  3. Hickey GL, Philipson P, Jorgensen A, Kolamunnage-Dona R. Joint modelling of time-to-event and multivariate longitudinal outcomes: recent developments and issues. BMC Med Res Methodol. 2016; 16(1): 117.

  4. Laird NM, Ware JH. Random-effects models for longitudinal data. Biometrics. 1982; 38(4): 963-974.

  5. Lin H, McCulloch CE, Mayne ST. Maximum likelihood estimation in the joint analysis of time-to-event and multiple longitudinal variables. Stat Med. 2002; 21: 2369-2382.

  6. Wulfsohn MS, Tsiatis AA. A joint model for survival and longitudinal data measured with error. Biometrics. 1997; 53(1): 330-339.


joineRML 0.1.0

  • First package release.

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


0.4.0 by Graeme L. Hickey, a month ago

Report a bug at

Browse source code at

Authors: Graeme L. Hickey [cre, aut], Pete Philipson [aut], Andrea Jorgensen [aut], Ruwanthi Kolamunnage-Dona [aut], Paula Williamson [ctb], Dimitris Rizopoulos [ctb, dtc] (data/renal.rda, R/hessian.R, R/vcov.R), Alessandro Gasparini [ctb]

Documentation:   PDF Manual  

GPL-3 | file LICENSE license

Imports doParallel, foreach, ggplot2, graphics, lme4, MASS, Matrix, mvtnorm, parallel, randtoolbox, Rcpp, stats, utils

Depends on nlme, survival

Suggests JM, joineR, knitr, rmarkdown, testthat

Linking to Rcpp, RcppArmadillo

See at CRAN