R型的公式为y~x +趋势或y~x +“趋势”,其中趋势/“趋势”用作指标?

时间:2013-03-04 10:00:25

标签: r

我有一个模型构建函数,它使用公式来定义模型。除了通常的回归情况,其中公式是y ~ x类型,我想添加例如趋势组件作为解释变量的可能性,它将在函数内部定义。这是一个例子:

modelx <- function(formula, data,...) {        

    mf <- mc <- match.call()                         
    mf <- mf[c(1L,  match(c("formula", "data"), names(mf), 0L))]
    formula_vars <- all.vars(formula)
    if ("trend" %in% formula_vars) {
       trend <- TRUE
       formula <- update.formula(formula, ~. - trend)
    } else trend <- FALSE        

    mf[[2L]] <- formula
    mf[[1L]] <- as.name("model.frame")
    mf$na.action <- as.name("na.pass")
    mf <- eval(mf, parent.frame())        
    y <- model.response(mf, "numeric")
    mt <- attr(mf, "terms")      
    X <- model.matrix(mt, mf)

    # y, X and possible trend component etc. are combined into the model object
   if(trend)
     X<-cbind(X,1:length(y))    #just an example
   list(y=y,X=X)
}

这里的想法是公式是y ~ x + trend类型,函数检查公式中是否有一个名为trend的变量,将其删除并将标记trend转换为{{1}它将在以后用于为模型构建适当的趋势组件。

我想知道有更好的方法来实现这个目标吗?这种方法的一个小问题是,可能存在用户想要使用的名称趋势变量,并且它与模型的趋势组件混合在一起,而另一个问题是例如这种类型的函数不能用作变量{{1} }不存在:

TRUE

如果我使用字符串trend而不是combn(c(trend,x1,x2),m=2,modelx,y=y) ,则问题是trend不会捕获字符串。

有关如何处理此类公式的任何建议,或任何指向包含此类可能性的公式的函数的指针?

1 个答案:

答案 0 :(得分:1)

这是使用reshape2

的解决方案
  unlist(reshape2:::parse_formula(y~x+'trend'))
[[1]]
y

[[2]]
x

[[3]]
[1] "trend"