4

I am working on graphing the predicted values from a multilevel model (using the lme4 package). I am able to do this successfully using the Effect() function. As shown below:

library(lme4)
library(effects)
m1=lmer(price~depth*cut+(1|cut),diamonds)
plot(Effect(c("cut","depth"),m1))

enter image description here

But, I want to present these same data as a single plot with a legend. Using ggplots, I can do this; but, I lose the error bars, as shown below:

ggplot(data.frame(Effect(c("cut","depth"),m1)),
       aes(x=depth,y=fit,color=cut,group=cut))+
  geom_line()

enter image description here

How can I recreate the first plot (with error bars) as a single plot?

1 Answer 1

8

How about:

library(effects)
library(lme4)
library(ggplot2)
m1 <- lmer(price~depth*cut+(1|cut),diamonds)

By the way, note that this particular model makes no sense (factor included both as fixed and random term)! I hope you're only using it as an illustration ...

ee <- Effect(c("cut","depth"),m1) 

The key is using as.data.frame() to turn the effects object into something useful ...

theme_set(theme_bw())
ggplot(as.data.frame(ee),
       aes(depth,fit,colour=cut,fill=cut))+
    geom_line()+
     ## colour=NA suppresses edges of the ribbon
    geom_ribbon(colour=NA,alpha=0.1,
                            aes(ymin=lower,ymax=upper))+
     ## add rug plot based on original data
        geom_rug(data=ee$data,aes(y=NULL),sides="b")

enter image description here

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.