R: Interaction Plot with a continuous and a categorical variable for a GLMM (lme4)

后端 未结 3 647
名媛妹妹
名媛妹妹 2020-12-30 16:05

I would like to make an interaction plot to visually display the difference or similarity in slopes of interaction of a categorical variable (4 levels) and a standardized co

3条回答
  •  抹茶落季
    2020-12-30 16:55

    Here's an answer of sorts (by the way, you had some missing quotation marks in your data frame above, which had to be fixed manually ...)

    Fit the model:

    library(lme4)
    fit <- glmer(resp.var ~ cont.var:cat.var + (1|rand.eff) ,
               data = sample.data , poisson)
    

    (Note that this is a slightly weird model specification -- forces all categories to have the same value at cont.var==0. Did you mean cont.var*cat.var?

    library(ggplot2)
    theme_update(theme_bw())  ## set white rather than gray background
    

    Quick and dirty linear regressions:

    ggplot(sample.data,aes(cont.var,resp.var,linetype=cat.var))+
        geom_smooth(method="lm",se=FALSE)
    

    Now with a Poisson GLM (but not incorporating the random effect), and showing the data points:

    ggplot(sample.data,aes(cont.var,resp.var,colour=cat.var))+
        stat_sum(aes(size=..n..),alpha=0.5)+
        geom_smooth(method="glm",family="poisson")
    

    The next bit requires the development (r-forge) version of lme4, which has a predict method:

    Set up data frame for prediction:

    predframe <- with(sample.data,
                      expand.grid(cat.var=levels(cat.var),
                                  cont.var=seq(min(cont.var),
                                  max(cont.var),length=51)))
    

    Predict at population level (REform=NA), on the linear predictor (logit) scale (this is the only way you will get straight lines on the plot)

    predframe$pred.logit <- predict(fit,newdata=predframe,REform=NA)
    
    minmaxvals <- range(sample.data$cont.var)
    
    ggplot(predframe,aes(cont.var,pred.logit,linetype=cat.var))+geom_line()+
        geom_point(data=subset(predframe,cont.var %in% minmaxvals),
                   aes(shape=cat.var))
    

    enter image description here Now on the response scale:

    predframe$pred <- predict(fit,newdata=predframe,REform=NA,type="response")
    ggplot(predframe,aes(cont.var,pred,linetype=cat.var))+geom_line()+
        geom_point(data=subset(predframe,cont.var %in% minmaxvals),
                   aes(shape=cat.var))
    

    enter image description here

提交回复
热议问题