Fits a joint model that simultaneously analyzes longitudinal biomarker trajectories and time-to-event outcomes using ordinary differential equations (ODEs). This approach captures complex temporal dynamics in biomarker evolution while quantifying their association with survival through shared parameters.
Usage
JointODE(
longitudinal_formula,
longitudinal_data,
survival_formula,
survival_data,
id = "id",
time = "time",
spline_baseline = list(degree = 3, n_knots = 5, knot_placement = "quantile",
boundary_knots = NULL),
spline_index = list(degree = 3, n_knots = 4, knot_placement = "quantile",
boundary_knots = NULL),
control = list(),
...
)
Arguments
- longitudinal_formula
Formula for the longitudinal submodel. Left side specifies the response; right side includes time and covariates (e.g.,
v ~ x1
).- longitudinal_data
Data frame containing longitudinal measurements. Must include multiple observations per subject with columns for subject ID, measurement times, and response values.
- survival_formula
Formula for the survival submodel. Must use
Surv(time, status)
on the left side; right side specifies baseline covariates.- survival_data
Data frame containing survival/event data. Must have exactly one row per subject with event time and status.
- id
Character string naming the subject ID variable. Must exist in both datasets (default:
"id"
).- time
Character string naming the time variable in longitudinal data (default:
"time"
).- spline_baseline
List of B-spline configuration for baseline hazard:
degree
Degree of B-spline basis (default: 3)
n_knots
Number of interior knots (default: 5)
knot_placement
Method for knot placement: "quantile" (based on event times) or "equal" (default: "quantile")
boundary_knots
Boundary knots, if NULL uses event range (default: NULL)
- spline_index
List of B-spline configuration for single index model:
degree
Degree of B-spline basis (default: 3)
n_knots
Number of interior knots (default: 4)
knot_placement
Method for knot placement: "quantile" (based on index values) or "equal" (default: "quantile")
boundary_knots
Boundary knots, if NULL uses index range (default: NULL)
- control
List of optimization control parameters:
method
Optimization algorithm (default: "BFGS")
maxit
Maximum iterations (default: 1000)
tol
Convergence tolerance (default: 1e-6)
verbose
Print progress (default: FALSE)
- ...
Additional arguments passed to fitting functions.
Value
Object of class "JointODE"
containing:
coefficients
Estimated model parameters including longitudinal, survival, and association parameters
logLik
Log-likelihood at convergence
AIC
Akaike Information Criterion
BIC
Bayesian Information Criterion
convergence
Optimization convergence details
fitted
Fitted values for both submodels
residuals
Model residuals
data
Original input data
call
Matched function call
Details
The joint ODE model links longitudinal and survival processes through shared parameters. The longitudinal trajectory is modeled using ODEs to capture non-linear dynamics, while the survival hazard incorporates features of the trajectory (level, slope, or cumulative burden).
Model estimation uses maximum likelihood with numerical integration over random effects via adaptive Gauss-Hermite quadrature.