【问题标题】:Looping Cox regression model over several predictor variables在几个预测变量上循环 Cox 回归模型
【发布时间】:2012-10-17 01:45:15
【问题描述】:

我需要为几个变量运行 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

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

【问题讨论】:

    标签: r


    【解决方案1】:

    因为模型以有趣的方式评估他们的公式,所以你最好创建一个字符串并将其转换为公式使用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")
    

    【讨论】:

    • 恐怕我不知道(并且无法猜测,没有更多信息)您的代码有什么问题。我承认我没有测试过,但如果你给出了一个可重复的例子(tinyurl.com/reproducible-000),我可以自己测试我的答案。我需要更多的时间来制作一个可重复的例子,而且它可能不是你想要的,所以现在这个负担在你身上......
    • (我自己确实在我的代码中发现了一个错误。但您仍然需要提供更多信息!)
    • 好的,我自己测试了。你(至少)需要使用tmpform &lt;- as.formula(paste("Surv(Time,Status)",x,sep="~")) 而不是reformulate。当我有机会时,我会回来编辑我的答案以解释原因。
    猜你喜欢
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 2019-01-10
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多