2013-07-14 8 views
6

複数の予測子がある場合、混合モデルのランダム切片または傾きをプロットすることは可能ですか?複数の予測子を含む混合モデルで、ランダム切片と傾きをプロットするにはどうすればよいですか?

#generate one response, two predictors and one factor (random effect) 
resp<-runif(100,1, 100) 
pred1<-c(resp[1:50]+rnorm(50, -10, 10),resp[1:50]+rnorm(50, 20, 5)) 
pred2<-resp+rnorm(100, -10, 10) 
RF1<-gl(2, 50) 

#gamm 
library(mgcv) 
mod<-gamm(resp ~ pred1, random=list(RF1=~1)) 
plot(pred1, resp, type="n") 
for (i in ranef(mod$lme)[[1]]) { 
abline(fixef(mod$lme)[1]+i, fixef(mod$lme)[2]) 
} 

#lmer 
library(lme4) 
mod<-lmer(resp ~ pred1 + (1|RF1)) 
plot(pred1, resp, type="n") 
for (i in ranef(mod)[[1]][,1]) { 
abline(fixef(mod)[1]+i, fixef(mod)[2]) 
} 

しかし、私はこのようなモデルを持っている場合、代わりに?:

mod<-gamm(resp ~ pred1 + pred2, random=list(RF1=~1)) 

それともlmer

mod<-lmer(resp ~ pred1 + pred2 + (1|RF1)) 

でください。私はこのように行うだろう1つの予測因子で

私はすべての係数を考慮するか、または私がプロットしている変数のうちの1つだけを考慮しますか?これは ほとんど常に推定ランダムになります - あなたは、おそらくないは、2つのレベルだけでグループ化変数のランダム 効果に合うようにしようとしなければならない

おかげ

+1

基本的に、他の変数について何をしたいかを決める必要があります。最も一般的な手順は、1つの変数の基準値を選択することです(例:'pred2'はその平均値に等しい)、その値に対して' pred1'を基準として勾配をプロットします。あるいは、 'pred2'の値をいくつか選んで、それぞれ別々のサブプロットで描画したり、3Dプロットやプロットプレーン' resp〜f(pred1、pred2)を実行することもできます。 –

+0

Benさん、ありがとうございます。申し訳ありませんが、私はあなたに従うかどうかはわかりません。「1つの変数の参照値を選んでください」という意味はどういう意味ですか?どのように実際にそれをやりますか? – Oritteropus

答えて

4
## generate one response, two predictors and one factor (random effect) 
set.seed(101) 
resp <- runif(100,1,100) 
pred1<- rnorm(100, 
      mean=rep(resp[1:50],2)+rep(c(-10,20),each=50), 
      sd=rep(c(10,5),each=50)) 
pred2<- rnorm(100, resp-10, 10) 

NOTE 0の分散差、 これはそれぞれの上に予測線を右に置きます 他 - 私はgl(2,50)からgl(10,10)に切り替わります...

RF1<-gl(10,10) 
d <- data.frame(resp,pred1,pred2,RF1) 

#lmer 
library(lme4) 
mod <- lmer(resp ~ pred1 + pred2 + (1|RF1),data=d) 

lme4の開発バージョンでは、これは少し楽になりpredict()機能 を持っている...

  • はその平均、 およびその逆に等しいpred2pred1の範囲で予測します。それは両方の焦点の予測 のすべての値を生成し、一度にggplotでそれらをプロットするので、これは...、

()

nd <- with(d, 
      rbind(data.frame(expand.grid(RF1=levels(RF1), 
         pred1=seq(min(pred1),max(pred1),length=51)), 
         pred2=mean(pred2),focus="pred1"), 
       data.frame(expand.grid(RF1=levels(RF1), 
         pred2=seq(min(pred2),max(pred2),length=51)), 
         pred1=mean(pred1),focus="pred2"))) 
nd$val <- with(nd,pred1[focus=="pred1"],pred2[focus=="pred2"]) 
pframe <- data.frame(nd,resp=predict(mod,newdata=nd)) 
library(ggplot2) 
ggplot(pframe,aes(x=val,y=resp,colour=RF1))+geom_line()+ 
     facet_wrap(~focus,scale="free") 
それがために を必要とするよりも、すべての少し賢くです
  • あるいは、...だけpred1に着目し、pred2値(小/離散)の範囲の予測を生成

()

nd <- with(d, 
      data.frame(expand.grid(RF1=levels(RF1), 
         pred1=seq(min(pred1),max(pred1),length=51), 
         pred2=seq(-20,100,by=40)))) 
pframe <- data.frame(nd,resp=predict(mod,newdata=nd)) 
ggplot(pframe,aes(x=pred1,y=resp,colour=RF1))+geom_line()+ 
     facet_wrap(~pred2,nrow=1) 

すべては、あなたがしたい場合は、groupと をcolour美学を交換したい場合がありますプレゼンテーションのために最後のfacet_wrap()scale="free" ...または 使用facet_grid(~pred2,labeller=label_both)

を設定することをお勧めしますグループ間を区別する。 (すなわち、別の行をプロットしてください)。

+0

非常に役に立ちました!ありがとうございました – Oritteropus