2013-07-14 20 views
6

È possibile tracciare l'intercetta o la pendenza casuale di un modello misto quando ha più di un predittore?Come tracciare l'intercettazione casuale e la pendenza in un modello misto con più predittori?

Con un predittore vorrei fare in questo modo:

#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]) 
} 

Ma cosa succede se ho un modello come questo, invece ?:

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

O con lmer

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

Dovrebbe Considero tutti i coefficienti o solo quelli della variabile che sto tramando?

Grazie

+1

Fondamentalmente, devi decidere cosa vuoi fare riguardo alle altre variabili. La procedura più comune è selezionare un valore di riferimento per una variabile (ad es.'pred2' uguale alla sua media) e traccia la pendenza rispetto a' pred1' per quel valore. Oppure puoi scegliere diversi valori di 'pred2' e tracciare una (serie di) linee per ognuno, possibilmente in sottotrame separate, o (più brutto) fare trame 3D e piani di trama' resp ~ f (pred1, pred2) '. –

+0

Grazie Ben, scusa ma non sono sicuro di seguirti, cosa intendi esattamente per "scegliere un valore di riferimento per una variabile"? Come lo faresti nella pratica? – Oritteropus

risposta

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) 

NOTA che probabilmente si dovrebbe non essere cercando di montare un caso effetto per una variabile raggruppamento con solo due livelli - questo sarà quasi sempre causare una cifra stimata casuale -effetto varianza di zero, che a sua volta metterà le linee previste proprio sopra ogni altro - Sto passando da gl(2,50) a 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) 

La versione di sviluppo di lme4 ha una funzione predict() che rende più facile ...

  • Prevedere per una gamma di pred1 con pred2 uguale alla sua media, e viceversa. Questo è tutto un po 'più intelligente di cui ha bisogno essere, dal momento che genera tutti i valori per entrambi i predittori focali e trame con ggplot in un colpo solo ...

()

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") 
  • alternativa, concentrandosi solo su pred1 e generando previsioni per un (piccolo discreto /) intervallo di valori 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) 

si potrebbe desiderare di impostare scale="free" nell'ultima facet_wrap() ... o uso facet_grid(~pred2,labeller=label_both)

Per la presentazione si potrebbe desiderare di sostituire l'estetica colour, con group, se tutto quello che volete fare è distinguere tra i gruppi (es traccia linee separate) piuttosto che identificarli ...

+0

Molto utile! Grazie – Oritteropus