2017-07-26 17 views
0

グループ化されたデータに対して複数のミックスエフェクトモデルを実行しようとしています。ここで、コードは次のとおりです。ここでグループ化して複数のモデルを実行し、データフレームに列として保存

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つの列しか受け入れないようです。どうもありがとう。

+1

パイプ( '%>%')を実際に使っているので、do(model1 ...)の出力を 'do(model2 ...) 'という文に渡します。もちろんあなたがしようとしているものではありません。代わりに、両方のモデルに適合し、リストを返す関数を書くことができます。 –

答えて

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パッケージを使用していることに注意してください。

関連する問題