2012-10-04 33 views
2

我試圖擬合一個有大量預測變量的模型,因此在模型公式中列舉它們會很繁瑣。這是簡單的用流明()做:使用帶有lmer()的預測變量矩陣

indicatorMatrix <- data.frame(matrix(rbinom(26000, 1, 1/3), ncol = 26)) 
colnames(indicatorMatrix) <- LETTERS 
someDV <- rnorm(nrow(indicatorMatrix)) 

head(indicatorMatrix) 

# One method, enumerating variables by name: 
olsModel1 <- lm(someDV ~ A + B + C + D, # ...etc. 
       data = indicatorMatrix) 

# Preferred method, including the matrix of predictors: 
olsModel2 <- lm(someDV ~ as.matrix(indicatorMatrix)) 
summary(olsModel2) 

因爲我有一個非常大的數字預測的(超過在這26個發明例),我不想一一列舉分別作爲第一例如(someDV ~ A + B + C + D...),我可以通過僅包括預測變量as.matrix來避免這種情況。

但是,我想,以適應混合效應模型,就像這樣:

library(lme4) 
meModel1 <- lmer(someDV ~ (1 | A) + (1 | B) + (1 | C), # ...etc. 
       data = indicatorMatrix) 
summary(meModel1) 

除了,我想包括大量的隨機效應方面。我不想輸入(1 | A) ... (1 | ZZZ),我想以類似於上述olsModel2所使用的矩陣方法的方式來包含每個預測變量。下面,很明顯,不工作:你有我如何能最好地複製與11聚物()隨機效應的矩陣預測方法的任何建議

meModel2 <- lmer(someDV ~ (1 | as.matrix(indicatorMatrix))) 

做什麼?我非常願意考慮「實用」解決方案(即黑客),只要它們是「程序化的」,並且不需要我複製粘貼等。

在此先感謝您的時間。

回答

2

認爲是構建公式作爲一個字符串,然後使用as.formula,沿

restring1 <- paste0("(1 | ",colnames(indicatorMatrix),")",collapse="+") 
form <- as.formula(paste0("someDV ~",restring1)) 
meModel1 <- lmer(form, data = data.frame(someDV,indicatorMatrix)) 

應該工作線的東西(它運行沒有抱怨我的系統上,反正...)

+2

你也可以使用'reconfulate(restring1,response ='someDV')' – mnel

+0

這個必須是最快滿意答案的新紀錄。現在我已經學會了一種方便的新方法來建立配方!非常感謝你們兩位。 – isDotR