幸存者中的R公式

时间:2016-10-16 20:48:31

标签: r formula survival-analysis

我在使用公式,环境和survfit()时遇到了问题。

lm()的内容正常,但survfit()无效。

一般问题陈述:

我正在为一些数据拟合一系列公式。所以,我打电话给 建模函数,公式作为变量传递。后来, 我想使用拟合对象的公式。

(从我天真的角度来看,问题来自于幸存者而不是 录制环境。)

详细示例

lm()中显示的预期行为:

library("plyr")

preds <- c("wt", "qsec")

f <- function() {
  lm(mpg ~ wt, data = mtcars)
}

fits <- alply(preds, 1, function(pred)
{
  modform <- reformulate(pred, response = "mpg")

  lm(modform, data = mtcars)
})

fits[[1]]$call$formula
##modform
formula(fits[[1]])
## mpg ~ wt
## <environment: 0x1419d1a0>

即使fits[[1]]$call$formula解析为modform我也可以 仍然使用formula(fits[[1]])获得原始公式。

但是survfit()的事情失败了:

library("plyr")
library("survival")

preds <- c("resid.ds", "rx", "ecog.ps")

fits <- 
  alply(preds, 1, function(pred)
  {
    modform <- paste("Surv(futime, fustat)", pred, sep = " ~ ")
    modform <- as.formula(modform)
    print(modform)

    fit <- survfit(modform, data = ovarian)
  })

fits[[1]]$call$formula
## modform
formula(fits[[1]])
## Error in eval(expr, envir, enclos) : object 'modform' not found

这里(与lm-fits相反),formula(fits[[1]])没有 工作!

所以,我的具体问题是:我怎样才能找回使用的公式 适合fits[[1]]

1 个答案:

答案 0 :(得分:2)

问题是当x$formulaNULL时,对于lm对象,有一个备用计划来获取公式;这对于survfit个对象

并不存在
library("plyr")
library("survival")

preds <- c("wt", "qsec")
f <- function() lm(mpg ~ wt, data = mtcars)

fits <- alply(preds, 1, function(pred) {
  modform <- reformulate(pred, response = "mpg")
  lm(modform, data = mtcars)
})

fits[[1]]$formula
# NULL

可以使用formula(fits[[1]])使用formula泛型提取公式。 lm的{​​{1}} S3方法是

formula

因此,当stats:::formula.lm # function (x, ...) # { # form <- x$formula # if (!is.null(form)) { # form <- formula(x$terms) # environment(form) <- environment(x$formula) # form # } # else formula(x$terms) # } 返回fits[[1]]$formula时,NULL会在对象中查找forumla.lm属性并找到相应的公式

terms

fits[[1]]$terms 个对象没有survfitx$formula,因此x$terms给出了错误

formula(x)

您可以通过将公式插入到调用中并对其进行评估来解决此问题

preds <- c("resid.ds", "rx", "ecog.ps")
fits <-  alply(preds, 1, function(pred) {
    modform <- paste("Surv(futime, fustat)", pred, sep = " ~ ")
    modform <- as.formula(modform)
    fit <- survfit(modform, data = ovarian)
  })

fits[[1]]$formula
# NULL

formula(fits[[1]]) ## error

formula(fits[[1]]$terms)
# list()

或者手动将公式放入modform <- as.formula(paste("Surv(futime, fustat)", 'rx', sep = " ~ ")) substitute(survfit(modform, data = ovarian), list(modform = modform)) # survfit(Surv(futime, fustat) ~ rx, data = ovarian) eval(substitute(survfit(modform, data = ovarian), list(modform = modform))) # Surv(futime, fustat) ~ rx # Call: survfit(formula = Surv(futime, fustat) ~ rx, data = ovarian) # # n events median 0.95LCL 0.95UCL # rx=1 13 7 638 268 NA # rx=2 13 5 NA 475 NA

x$call$formula