简体   繁体   中英

Running Cox.ph model with GAMM mixed models in R

I am new in using GAM and splines. I am running a survival model in which I want to model the Time to event with the age of the subjects controlling by two variables. Here is the example using a conventional survival model with coxph:

 library(survival)
 fit_cox<-coxph(Surv(time, event)~ age+ var1 + var2, data=mydata)

I suspect that the relationship between var1 and var2 with the outcome is not linear and also I am thinking that I can include random effects in my model (moving to mixed effect models gamm). I have tried this syntax:

library(mgcv)
fit_surv<-Surv(time, event)
fit_gam<-gam(fit_surv ~ age + s(var1) + s(var2), data = mydata, family = cox.ph())

And to include the random effects:

library(gamm4)
fit_gamm <- gamm4(fit_surv ~ age + s(var1) + s(var2), random = ~(1 | ID), data = mydata, family = cox.ph)

My problems are: 1. In fit_gam I do not know how to make a summary of this model and to see the coefficients table and plot the model. This error came to me:

 summary(fit_gam)

"Error in Ops.Surv(w, object$y) : Invalid operation on a survival time"

  1. In fit_gamm I could not run the model because some error in syntaxis is made or maybe I could not include a surv? The error is: "Error in ncol(x) : object 'x' not found"

Thank you in advance!

As mentioned in the comments, simple gaussian frailties (gaussian random intercept) can be specified directly within the mgcv::gam call, eg by adding ... + s(ID, bs = "re") + ... to your formula (note that ID has to be a factor variable).

Alternatively, you can transform the data to the so called Piece-wise Exponential Data (PED) format and fit the model using any GA(M)M software, which are then called Piece-wise exponential Additive Mixed Models (PAMM) . Here is an example:

library(coxme)
library(mgcv)
library(pammtools)

lung <- lung %>% mutate(inst = as.factor(inst)) %>% na.omit()
## cox model with gaussian frailty
cme <- coxme(Surv(time, status) ~ ph.ecog + (1|inst), data=lung)

## pamm with gaussian frailty
ped <- lung %>% as_ped(Surv(time, status)~., id="id")
pam <- gam(ped_status ~ s(tend) + ph.ecog + s(inst, bs = "re"),
  data = ped, family = poisson(), offset = offset)

## visualize random effect:
gg_re(pam)

# compare coxme and pamm estimates:
re <- tidy_re(pam)
plot(cme$frail$inst, re$fit, las=1, xlab="Frailty (cox)", ylab="Frailty (PAM)")
abline(0, 1)

## with gamm4
library(gamm4)
#> Loading required package: Matrix
#> Loading required package: lme4
#> 
#> Attaching package: 'lme4'
#> The following object is masked from 'package:nlme':
#> 
#>     lmList
#> This is gamm4 0.2-5
pam2 <- gamm4(ped_status ~ s(tend) + ph.ecog, random = ~(1|inst),
  family = poisson(), offset = ped$offset, data = ped)
lattice::qqmath(ranef(pam2$mer)$inst[, 1])

Created on 2018-12-08 by the reprex package (v0.2.1)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM