分组后运行多个模型并将其另存为dataframe中的列

时间:2017-07-26 03:50:34

标签: r dplyr

我试图在分组数据上运行多个混合效果模型。以下是代码:

library(dplyr)
library(lme4)

dat.tx.a <- mvrnorm(n=250, mu=c(30, 20, 28), 
                    Sigma=matrix(c(25.0, 17.5, 12.3, 
                                   17.5, 25.0, 17.5, 
                                   12.3, 17.5, 25.0), nrow=3, byrow=TRUE))
dat.tx.b <- mvrnorm(n=250, mu=c(30, 20, 22), 
                    Sigma=matrix(c(25.0, 17.5, 12.3, 
                                   17.5, 25.0, 17.5, 
                                   12.3, 17.5, 25.0), nrow=3, byrow=TRUE))
dat <- data.frame(rbind(dat.tx.a, dat.tx.b))
names(dat) = c("measure.1", "measure.2", "measure.3")
dat <- data.frame(subject.id=factor(1:500), tx=rep(c("A", "B"), each=250), dat)
rm(dat.tx.a, dat.tx.b)
dat <- reshape(dat, varying=c("measure.1", "measure.2", "measure.3"), 
               idvar="subject.id", direction="long")

df.model<-dat %>%
           group_by(tx) %>%
           do (model1=lmer(measure~(1|subject.id), data=.)) %>% 
           do (model2=lmer(measure~time+(1|subject.id), data=.))

以下是错误消息:

Error in as.data.frame.default(x[[i]], optional = TRUE) : 
  cannot coerce class "structure("lmerMod", package = "lme4")" to a data.frame

如果删除运行model2的行,代码将起作用。似乎数据框只接受一列作为模型列表?非常感谢。

1 个答案:

答案 0 :(得分:2)

只需将多个模型传递给do()

df.model<-dat %>%
  group_by(tx) %>%
  do (model1=lmer(measure~(1|subject.id), data=.),
      model2=lmer(measure~time+(1|subject.id), data=.))

另请注意,在您的示例中,您使用的是MASS包。