在 Cox 回归模型中映射或循环不同的变量

Map or loop different variables in a Cox regression model

我正在寻找 运行 几个保持生存函数相同并放置不同预测变量的 cox 回归模型,我想将每个模型保存在一个列表中。此外,我想从列表中的每个模型中获得整洁的输出。

下面是一个有两个预测变量的例子,但实际数据框有超过 20 个预测变量。

# data frame with first 2 columns specifying time to event and event and rest as predictor variables
df <- some_data_frame 

#Cox Models 
cox_var1 <- coxph(Surv(time,event) ~ var1, data = df]
cox_var2 <- coxph(Surv(time,event) ~ var2, data = df]

#Tidy output of cox models
cox_summary_var1 <- broom:tidy(cox_var1, exponentiate = TRUE)
cox_summary_var2 <- broom:tidy(cox_var2, exponentiate = TRUE)

我是 purr::map() 的新手。我如何创建一个包含所有模型的列表,然后创建一个包含模型所有整洁输出的第二个列表?

您可以遍历预测变量的名称并使用 reformulate 即时创建公式。

library(survival)
library(purrr)

#Replace 2 with number of var you have
cox_model_list <- map(paste0('var', 1:2), 
                   ~coxph(reformulate(.x, "Surv(time,event)"), data = df))
tidy_output_list <- map(cox_model_list, broom::tidy, exponentiate = TRUE)

如果不需要 cox_model_list,可以将 broom 输出和 coxph 合并到同一个 map 中。您也可以在这里使用 lapply 代替 map.