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