我需要为几个变量运行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
有人知道如何解决这个问题或如何编写代码吗?
最佳答案
因为模型以有趣的方式评估他们的公式,所以您最好创建一个字符串并将其转换为公式使用 而不是 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")
关于r - 在多个预测变量上循环 Cox 回归模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13092923/