式を使用してモデルを定義するモデル構築関数があります。数式がタイプである通常の回帰の場合に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)
このタイプの数式を処理する方法の提案、またはこのタイプの可能性を含む数式を持ついくつかの関数へのポインターはありますか?