Chapter 11 - Joint Analysis of Longitudinal and Survival Data
Department of Biostatistics & Medical Informatics
University of Wisconsin-Madison
\[\newcommand{\d}{{\rm d}}\] \[\newcommand{\T}{{\rm T}}\] \[\newcommand{\dd}{{\rm d}}\] \[\newcommand{\cc}{{\rm c}}\] \[\newcommand{\pr}{{\rm pr}}\] \[\newcommand{\var}{{\rm var}}\] \[\newcommand{\se}{{\rm se}}\] \[\newcommand{\indep}{\perp \!\!\! \perp}\] \[\newcommand{\Pn}{n^{-1}\sum_{i=1}^n}\]
Binary, categorical, count biomarkers \[\begin{equation}\label{eq:longit:glmm} g\left[E\{Y_i(t)\mid Z_i,b_i\}\right]=\gamma_0+\gamma^\T Z_i(t)+b_i^\T\tilde Z_i(t) \end{equation}\]
Example : logistic regression with \(g(x)=\log\{x/(1-x)\}\)
Subject-level trajectory \[m_i(t)=g^{-1}\left\{\gamma_0+\gamma^\T Z_i(t)+b_i^\T\tilde Z_i(t)\right\}\]
Survival sub-model: Cox model against \(m_i(t)\) (or \(b_i\))
JM
package (I)id
: subject identifier; y
: response; covariates
: \(Z\); cov_rand
: \(\tilde Z\)covariates1
: \(Z^*\); x = TRUE
to include \(Z^*\) in model fitJM
package (II)"occasion"
: time variable in longitudinal model (same unit as time
)"piecewise-PH-aGH"
: piecewise linear baseline with 6 internal knotsjointModel
obj$coefficients
: main component
betas
: \(\hat\gamma\); gammas
: \(\hat\beta\); alpha
: \(\hat\nu\); sigma
: \(\hat\sigma\); D
: \(\hat\Sigma_b\)Summary(obj)
to print summary results# taking square root of CD4 count
data$y <- sqrt(data$CD4)
# create a de-duplicated data for survival sub-model
data.surv <- data[!duplicated(data$id),]
# Joint model fit for the HIV/AIDS dataset
# longitudinal sub-model
longit.sub <- lme(y ~ obsmo + obsmo:drug + sex + hist,
random = ~ obsmo|id, data = data)
# survival sub-model
surv.sub <- coxph(Surv(time, status) ~ drug + sex + hist,
data = data.surv, x = TRUE)
# combine the two models
joint.model <- jointModel(longit.sub, surv.sub, timeVar = "obsmo",
method = "piecewise-PH-aGH")
summary(joint.model)
# Variance Components:
# StdDev Corr
# (Intercept) 0.7603 (Intr)
# obsmo 0.0368 -0.0084
# Residual 0.3670
# Longitudinal Process
# Value Std.Err z-value p-value
# (Intercept) 2.2123 0.1252 17.6659 <0.0001
# obsmo -0.0414 0.0045 -9.2622 <0.0001 # change rate in ddC
# sexmale -0.0133 0.1270 -0.1044 0.9168
# histnoAIDS 0.9153 0.0784 11.6715 <0.0001
# obsmo:drugddI 0.0061 0.0063 0.9616 0.3363 # diff in change rate ddI vs ddC
obj1 <- nlme::lme()
obj2 <- survival::coxph()
JM::jointModel(obj1, obj2, timeVar)