1

式を使用してモデルを定義するモデル構築関数があります。数式がタイプである通常の回帰の場合に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をに変換しTRUEます。これは、後でモデルの適切なトレンドコンポーネントを構築するために使用されます。

これを達成するためのより良い方法があるのだろうか?このアプローチの小さな問題は、ユーザーが使用したい名前トレンドの変数があり、モデルのトレンドコンポーネントと混ざり合う可能性があることです。また、別の問題は、たとえば、変数trendが存在しないため、このタイプの関数が機能しないことです。

combn(c(trend,x1,x2),m=2,modelx,y=y)

trend文字列を使用する代わりに、文字列をキャプチャしない"trend"という問題があります。all.vars(formula)

このタイプの数式を処理する方法の提案、またはこのタイプの可能性を含む数式を持ついくつかの関数へのポインターはありますか?

4

1 に答える 1

1

ここで使用するソリューションreshape2

  unlist(reshape2:::parse_formula(y~x+'trend'))
[[1]]
y

[[2]]
x

[[3]]
[1] "trend"
于 2013-03-04T11:39:35.347 に答える