## 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 ...
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) '. –
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