问题描述
我有一个Surv
包中的常规survival
对象;
s <- Surv(sample(100:150,5),sample(c(T,F),5,replace = T))
以及多个变量的矩阵;
df <- data.frame(var1 = rnorm(5),var2 = rnorm(5),var3 = rnorm(5))
我需要为每个变量分别拟合一个Cox-PH模型。我的代码当前使用如下循环:
for (v in colnames(df)) {
coxph(s ~ df[[v]])
}
当然,实际上有成千上万个变量,此过程需要一点时间。我想跟随the answer given here尝试使用tidyr
来完成所有操作,但是我有点困惑,因为预测和因素不是生存因素,而是生存对象,所以我不太了解如何处理它作为小标题的一部分。
解决方法
假设对生存模型的响应为s
,则可以使用与链接到的答案相似的嵌套数据框,然后将模型映射到不同的变量:
图书馆(tidyverse)
df_nested <- df %>% pivot_longer(cols = var1:var3) %>% group_by(name) %>% nest()
surv_model <- function(df) {
coxph(s ~ df$value)
}
df_nested <- df_nested %>% mutate(model = map(data,surv_model))
df_nested
# A tibble: 3 x 3
# Groups: name [3]
name data model
<chr> <list> <list>
1 var1 <tibble [5 x 1]> <coxph>
2 var2 <tibble [5 x 1]> <coxph>
3 var3 <tibble [5 x 1]> <coxph>