Please, I want to perform an interaction spline analysis for age (continuous) and Quartiles (categorical). My outcome is a survival outcome (incident stroke).
The focus is to compare Q4 to Q1 and allow hazard ratio to vary across age (continuous variable).
I fitted the model as;
spline.1 <- cph(Surv(years, stroke) ~ rcs(Age,3) + Q + rcs(Age, 3)%ia%Q ,
data = mydata)
Now I want to plot the hazard ratios and their confidence intervals across age.
I used the Predict function and had this output (first 10 observations); first panel of attache figure
spline.1_pred<-Predict(spline.1,Age,ref.zero=TRUE,fun=exp) ;
Dr. Harrell had advised that I use the contrast function, which I used.
However, the output I get from the contrast seems to be way different from what I get from the Predict function. Also, even though I specified the fun=exp in the contrast function, the outputs do not seem to be on the anti-log scale.
Below is the code I used for the contrast and the output. I added the exponentiated versions of the contrast estimates and their confidence intervals too.
contrast_spline.1 <-contrast(spline.1, list(Q="Quartile 1", Age=21:96),
list(Q="Quartile 4", Age=21:96),fun=exp)
## Getting the data and exponentiating
contrast_spline_df <- as.data.frame(contrast_spline.1[c('Age','Contrast','Lower','Upper')]) %>%
mutate(Contrast_ex=exp(Contrast),Lower_ex=exp(Lower),Upper_ex=exp(Upper))
First 10 observations (second panel of the attached figure):
From the exponentiated estimates and confidence intervals for about the same age, the two (Predict and contract) yield very different estimates and CIs.
My questions are;
What am I doing wrong in the contrast function?
Is it appropriate to go with the results from the Predict function?
Secondly, I would be working with MICE data (10 imputed data) so I tried to fit the model to all the 10 imputed datasets and pool the results but I get an error when I try that.
This is the code I used:
spline.11 <- with(imputed_data,cph(Surv(MI_YrsFU, chd17) ~ rcs(Age,3) +
Q + rcs(Age, 3)%ia%Q ))
spline.11_pooled <- summary(pool(spline.11), conf.int = T)
The error I receive when I pool the results is;
Error: $ operator is invalid for atomic vectors
How best can I work with the imputed data using cph function.
Thank you.