首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Y~x+趋势或y~x+“趋势”的R公式,其中趋势/“趋势”作为指标?

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

Stack Overflow用户
提问于 2013-03-04 18:00:25
回答 1查看 207关注 0票数 1

我有一个模型构建函数,它使用公式来定义模型。除了公式类型为y ~ x的常见回归情况外,我还想添加一些可能性,例如添加趋势分量作为解释变量,该变量将在函数内部定义。下面是一个例子:

代码语言:javascript
复制
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转换为TRUE,稍后将使用它来为模型构建适当的趋势组件。

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

代码语言:javascript
复制
combn(c(trend,x1,x2),m=2,modelx,y=y)

如果我使用string "trend"而不是trend,问题是all.vars(formula)不能捕获字符串。

有任何建议如何处理这种类型的公式,或者任何指向包含这种可能性的公式的函数的指针吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-04 19:39:35

这里是一个使用reshape2的解决方案

代码语言:javascript
复制
  unlist(reshape2:::parse_formula(y~x+'trend'))
[[1]]
y

[[2]]
x

[[3]]
[1] "trend"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15198846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档