1
我有一個模型構建函數,它使用公式來定義模型。除了公式類型爲y ~ x
的通常回歸情況外,我還想添加例如趨勢分量作爲解釋變量的可能性,該變量將在函數內部定義。下面是一個例子:類型y〜x +趨勢或y〜x +「趨勢」的R公式,其中趨勢/「趨勢」用作指標?
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)
不捕獲字符串。
任何建議如何處理這種類型的公式,或任何指向某些函數的指針,這些函數的公式包含這種類型的可能性?
解決我缺少的東西?看起來最明顯的做法是給你的'modelx'函數一個'trend'參數,它將被賦予'TRUE'或'FALSE'值,那麼你不需要用公式來解決。 – Marius 2013-03-04 10:23:18
的確,我的例子太簡單了。在我的真實應用程序中,我有幾種這類指標,所以我覺得將模型定義爲'xmodel(y〜x + ind1 + ind2 + ind3)'而不是'xmodel(y〜x, IND1 = IND1,IND2 = IND2,IND3 = IND3)'。 – 2013-03-04 10:31:46
我可以看到這一點,但你正在爲自己做很多辛苦的工作,只有這樣你才能實現將參數填入公式規範的可疑目標。參數(因爲這就是它們)被從公式規範中提取出來並幾乎立即轉換回參數/標誌。 – Marius 2013-03-04 10:36:10