2012-10-04 35 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