1

これは、以前の投稿 (スロットを変更する方法 lme4 >1.0 )へのフォローアップの質問です。同様のペア単位のデータ構造があり、ランダム効果でペアの両方の「ポップ」を考慮したいと考えています。以前に提案したコードを使用して、機能的なランダム インターセプト モデルを作成しました。

dat <- data.frame(pop1 = c(2,1,1,1,1,3,2,2,2,3,5,3,5,4,6),
              pop2 = c(1,3,4,5,6,2,4,5,6,4,3,6,4,6,5), 
              X = c(20,25,18,40,36,70,68,72,78,76,97,100,115,110,108),
              Y = c(18,16,15,40,22,18,18,18,18,45,10,47,67,5,6))
#build random effects matrix
Zl<-lapply(c("pop1","pop2"),function(nm)Matrix:::fac2sparse(dat[[nm]],"d",drop=FALSE))
ZZ<-Reduce("+",Zl[-1],Zl[[1]])
#specify model structure
mod<-lFormula(Y~X+(1|pop1),data=dat,REML=TRUE)
#replace slot
mod$reTrms$Zt <- ZZ
#fit model
dfun<-do.call(mkLmerDevfun,mod)
opt<-optimizeLmer(dfun)
mkMerMod(environment(dfun),opt,mod$reTrms,fr=mod$fr)

ただし、ランダム勾配変数を追加しようとすると、次のようになります。

mod2<-lFormula(Y~X+(1+X|pop1),data=dat,REML=TRUE)
mod2$reTrms$Zt <- ZZ
dfun<-do.call(mkLmerDevfun,mod2)

以前の投稿で特定されたのと同じエラーが発生します (問題が間違ったデータ フレームを呼び出していた場合): "Error in Lambdat %*% Ut : Cholmod error 'A and B inner dimension must match' at file ../MatrixOps/cholmod_ssmult .c、82 行目"

各ポップの lm を表示

plot(1,type="n",xlim=c(0,150),ylim=c(0,75),ylab = "Y",xlab="X")
for(i in 1:length(unique(c(dat$pop1,dat$pop2)))){
  subdat<-dat[which(dat$pop1==i | dat$pop2==i),]
  out<-summary(lm(subdat$Y~subdat$X))
  x=subdat$X
  y=x*out$coefficients[2,1]+out$coefficients[1,1]
  lines(x,y,col=i))
}
legend(125,60,1:6,col=1:6,lty=1,title="Pop")
4

1 に答える 1