Chronic respiratory problems, and lung infections.
Poor growth, and low weight.
Dimitris Rizopoulos (PM Afonso & ER Andrinopoulou)
Department of Biostatistics, Erasmus University Medical Center Rotterdam
ENAR Spring Meeting | March 29, 2022
Chronic respiratory problems, and lung infections.
Poor growth, and low weight.
Outcomes:
· Lung function decline (FEV1)
· Nutritional status evolution (BMI)
· Pulmonary exacerbations
· Death or transplantation
27K CF patients
1,400K observations
317K years of follow-up
50% of patients reported ≥50 measurements, and ≥12.5 years of follow-up.
50% of patients experienced ≥4 acute respiratory events.
26% of patients died or received a transplant.
Why?
· Survival analysis: endogenous time-varying covariates
· Longitudinal analysis: nonrandom dropout
Why?
· Survival analysis: endogenous time-varying covariates
· Longitudinal analysis: nonrandom dropout
{yi(t)=xi(t)⊤β+zi(t)⊤bi+εi(t)=ηi(t)+εi(t)Longitudinal outcomehi(t)=h0(t)exp{wi(t)⊤γ+f{ηi(t)}α}Time-to-event outcome
bi∼N(0,D),εi(t)∼N(0,σ2)
Recurrent failure times + Multiple longitudinal markers + Multiple functional forms
{yi1(t)=xi1(t)⊤β1+zi1(t)⊤bi1+εi1(t)=ηi1(t)+εi1(t)FEV1yi2(t)=xi2(t)⊤β2+zi2(t)⊤bi2+εi2(t)=ηi2(t)+εi2(t)BMIhi(t)=h0(t)exp{wit(t)⊤γt+f1{ηi1(t)}αt1+f2{ηi2(t)}αt2+viαF}Death or TXri(t)=r0(t)exp{wir(t)⊤γr+g1{ηi1(t)}αr1+g2{ηi2(t)}αr2+vi}PEx
(bi1bi2vi)∼N(0,(D00σ2F)),εij(t)∼N(0,σ2j)
Functional Forms
f{ηi(t)}={ηi(t)valueddtηi(t)slopeηi(t)−ηi(t−1)last year increase1t∫t0ηi(s)ds(normalized) cumulative effect
Hazard timescale
Discontinuous risk intervals
Bayesian framework
Gibbs and Metropolis-Hastings algorithms in C++
R package: https://drizopoulos.github.io/JMbayes2/
## id tstart tstop status strata sex ## 1 1 0 2 1 1 m ## 2 1 3 4 1 1 m ## 3 1 5 7 0 1 m ## 4 1 0 7 0 2 m ## 5 2 0 1 1 1 f ## 6 2 2 4 0 1 f ## 7 2 0 4 1 2 f
{yi(t)=β0+tβ+b0i+tb1i+εi(t)=ηi(t)+εi(t)hi(t)=h0(t)exp{groupiγt+ηi(t)αt+viαF}ri(t)=r0(t)exp{groupiγr+ηi(t)αr+vi}
library("JMbayes2") lme_fit <- lme(fixed = y ~ time, random = ~ time | id, data = data_long) cox_fit <- coxph(Surv(tstart, tstop, status) ~ group * strata(strata), data = data_strt) jm_fit <- jm(cox_fit, lme_fit, time_var = "time", functional_forms = ~ value(y) * strata, recurrent = "gap")
100 replications
{yi(t)=β0+b0i+∑4j=1(βj+bji)nsj(t)+ε(t)=ηi(t)+ε(t)hi(t)=h0(t)exp{wi1γt1+wi2γt2+ηi(t)αt+viαF}ri(t)=r0(t)exp{wi1γr1+wi2γr2+ηi(t)αr+vi}
(bivi)∼N(0,(D00σ2F)),εi(t)∼N(0,σ2),i=1,…,500
Running time: 9.3 hours
FEV1_fit <- lme(fixed = FEV1 ~ age, random = ~ age | ID, data = dataL$long) BMI_fit <- lme(fixed = BMI ~ age, random = ~ age | ID, data = dataL$long) Cox_fit <- coxph(Surv(tstart, tstop, status) ~ Gender * strata(process), data = dataL$strt) jm_fit <- jm(Cox_fit, list(FEV1_fit, BMI_fit), time_var = "age", functional_forms = ~ value(FEV1):process + value(BMI):process recurrent = "gap")
Thanks for your attention!
|
@drizopoulos d.rizopoulos @ erasmus mc.nl |
---|