在几个预测变量上循环Cox回归模型

时间:2012-10-26 19:07:57

标签: r

我需要为几个变量运行cox回归模型,所以我想写一个循环来实现它。 但无论如何它都不起作用。 以下是我使用的代码

names(Gen) 
varlist <- names(hsb2)[8:11]  ## get the variables i want to involve in loop
models <- lapply(varlist, function(x) {
    coxph(substitute(Surv(Time, Status) ~ i, list(i = as.name(x))), data = Gen, ties="efron")
})

我收到了错误信息

errors in terms.default(formula, special, data = data) : 
  no terms component nor attribute

任何人都知道如何解决这个问题或如何编写代码?

1 个答案:

答案 0 :(得分:5)

因为模型以有趣的方式评估他们的公式,所以最好创建一个字符串并使用reformulate将其转换为公式 Is there a better alternative than string manipulation to programmatically build formulas? 而不是substitute。 (reformulate通常更可取,因为它测试语法正确性的输入,但在这种情况下它会破坏响应变量。)

创建此临时功能:

tmpfun <- function(x) as.formula(paste("Surv(Time,Status)",x,sep="~"))

提供给lapply的功能正文可能是:

coxph(tmpfun(x), data = Gen, ties="efron")

(你没有提供一个可重复的例子,但我认为这应该有用......)

对于额外(但完全没必要)的酷感,您可以尝试使用两个单独的lapply调用替换整个lapply调用,一个用于从变量名称列表中创建公式列表,另一个用于从公式列表中列出拟合模型。

formlist <- lapply(varlist,tmpfun)
models <- lapply(formlist,data=Gen,ties="efron")