Hi, Kevin
Again, your insights are spot on. Thanks a lot!
In regards to cutting down the amount of variables, I would like to run the following analysis with those candidates because they are already on a threshold of p<0.005. At least, I would like to give it a go on this first.
I have read a bit further on the Cox model with lasso and elastic-net penalty. This is exactly what I was expecting. I do have to read more, because I am still lost with the full meaning of its outcome terms (e.g. lambda, nzero).
I believe my main hurdle now is how to write the formula with my data in. I have prepared my data based on the requirements to run a glm() function. This is how it looks:
> shortlist_cox[1:10,1:10]
Age PFS PFS_codex OS OS_codex X1552261_at X1552288_at X1552289_a_at X1552299_at
S1 63.9 117.23 0 115.69 0 3.964586 5.759115 4.279965 6.785513
S2 64.6 69.27 0 72.30 1 7.059853 7.413032 5.483407 6.945578
S3 69.6 1.23 1 1.08 1 7.034529 6.259935 4.827770 5.823854
S4 72.4 15.27 1 69.63 1 6.933748 6.677647 5.087919 6.977539
S5 43.5 61.43 1 78.41 1 7.335500 5.962986 3.759109 6.361736
S6 88.3 14.73 1 42.90 1 7.516774 6.237404 4.403221 5.657177
S7 82.6 14.87 1 31.00 1 6.375484 9.837775 8.215100 7.443165
S8 49.1 35.00 1 51.12 1 6.700741 6.895096 5.258566 6.495558
S9 57.9 6.60 1 11.01 1 7.018056 8.715041 6.709328 6.564994
S10 64.4 16.57 1 27.68 1 6.225923 7.482588 5.312034 7.014927
And these are different lines that I tried running it with no success:
fit <- glmnet(survfit(Surv(OS, OS_codex), data = shortlist_cox), family="cox", maxit = 1000)
Error in Surv(OS, OS_codex) : object 'OS' not found
OR
fit <- glmnet(Surv(shortlist_cox$OS, shortlist_cox$OS_codex), family="cox", maxit = 1000)
Error in drop(y) : argument "y" is missing, with no default
I tried reading finding something similar, but I only came across this one, which is very nice, but still does not use an example for survival analysis. Although I do want to use the workflow described there for dowstream analysis.
Again, any help is much appreciated. And thanks a lot!
Hi again!
This time, going a bit further with the analysis. I have performed the Cox regression with lasso penalty (
glmnet()) and cross-validated withcv.glmnet(), and came out with a total of 31 candidates. To my understanding, and by plotting the K-M curves, those candidates show the best association with overall survival (OS). Say, these were the candidates:However, by finding the association of those genes among themselves that would give more meaning to the results. So, my idea was to run a simple multivariate Cox multivariate analysis (
coxph()) with those candidates by:and found that (for illustration, I will just add those candidates with significant p-values):
The results show that there are 8 candidates (p<0.05) whose expression is associated to each other. Ok, now we have the information about those candidates (1) that are associated with OS and (2) whose gene expression is associated with each other. Based on HR ("exp(coef)") values from that table, these results also show for example that low expression of "X15605_i_at" (HR= 0.59) (gene A) or high expression of "X2000_at" (HR= 1.53) (gene B) are associated with a worse OS. And so forth.
Now, if I combine gene A AND gene B and artificially classify patients with low expression of A and high expression of B as "high risk" (and the other way around as "low risk) I obtain a very clear K-M with the difference between those 2 groups - the "high risk" group indeed has a worse OS compared to the "low risk".
However if I combine all 7 candidates to make my 2 groups of patients, there are only 3 patients (out of 196) that fullfill the criteria.
Finally, my question is: is there a way to do some sort of permutation/combination analysis coupled with Cox regression to find the combination of targets that best associates with OS? Considering that this combination of factors is represented say in at least 30% of my samples.
Sorry for the long post. That was the best way I could find to explain it. And as always, any light shed here will be greatly appreciated.
Thanks!
Please use
ADD COMMENT/ADD REPLYwhen responding to existing posts to keep threads logically organized.SUBMIT ANSWERis for new answers to original question.Thank you, genomax. The reason why I posted here it was because this is a follow-up question from the original question in this post. But you are right. Thank you for the info.