R 将预测值从列表传递到cox模型

R 将预测值从列表传递到cox模型,r,list,parameter-passing,batch-processing,cox-regression,R,List,Parameter Passing,Batch Processing,Cox Regression,我从survminer包运行一个非常简单的cox模型 surv_object <- Surv(time, event) model <- coxph(surv_object ~ female + age + ethnicity + imd, data = df) 是否有一种简单的方法将项目从predictor列传递到coxph()?大概是这样的: coxph(surv_object ~ predictors, data = df) 我已经尝试过的: 我尝试了一种相当笨拙的方法:

我从
survminer
包运行一个非常简单的cox模型

surv_object <- Surv(time, event)
model <- coxph(surv_object ~ female + age + ethnicity + imd, data = df)
是否有一种简单的方法将项目从
predictor
列传递到
coxph()
?大概是这样的:

coxph(surv_object ~ predictors, data = df)

我已经尝试过的:

我尝试了一种相当笨拙的方法:

pred_vars <- pred_df %>% 
     pull(predictor) %>%                 # extract column values as a vector
     paste(collapse = " + ") %>%         # combine values in a string
     parse(text = . )                    # parse the string as an expression

model <- coxph(surv_object ~ eval(pred_vars), data = df)
必须有一种更简单的方法来实现这一点?

尝试重新格式化


formula您可以在base R中使用
as.formula
粘贴(…,collapse=“+”
,如

foo <- as.formula(paste0("Surv(time, event) ~ ", paste(pred_df$predictors, collapse = " + ")))

然后将
foo
传递给调用
coxph

的函数,您是否试图拟合一系列模型,每个模型只包含一个
预测向量的元素?或者,您是否试图一次将所有模型与单个模型相匹配?您的代码与输出之间存在不匹配。代码显示为
~eval(预测器列表)
,输出显示为
~eval(预测变量)
。是哪一个?一个模型,同时包含所有的模型。我发现了一个名为“ezcox”的很棒的软件包来完成前者。啊,好吧,那么你可以使用
as.formula(粘贴(…,collapse=“+”)
。我马上编辑我的答案。谢谢@alanocalaghan-修复了我的代码。我注意到你也在UoE!
Call:
coxph(formula = Surv(time, event) ~ eval(pred_vars), data = df)

  n= 62976, number of events= 12882 
   (3287 observations deleted due to missingness)

                     coef exp(coef)  se(coef)     z Pr(>|z|)    
eval(pred_vars) 3.336e-05 1.000e+00 5.339e-06 6.249 4.14e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                exp(coef) exp(-coef) lower .95 upper .95
eval(pred_vars)         1          1         1         1

Concordance= 0.515  (se = 0.003 )
Rsquare= 0.001   (max possible= 0.989 )
Likelihood ratio test= 38.28  on 1 df,   p=6e-10
Wald test            = 39.04  on 1 df,   p=4e-10
Score (logrank) test = 39.07  on 1 df,   p=4e-10
foo <- as.formula(paste0("Surv(time, event) ~ ", paste(pred_df$predictors, collapse = " + ")))
> foo
Surv(time, event) ~ female + age + ethnicity + imd