绘制混合模型lme4与CI带的交互作用

时间:2017-04-19 14:51:07

标签: lme4 interaction mixed-models

我有以下混合效果模型:

p1 <- lmer(log(price) ~ year*loca + (1|author), data = df)

'年'是连续的 'loca'是具有2个级别的分类变量

我试图绘制这个模型的重要互动。

以下代码(使用visreg包)绘制两个'loca'中每一个的行,但它不会产生95%的置信区间:

visreg(p1, "year", by = "loca", overlay = T,
   line=list(lty = 1, col = c("grey", "black")), points=list(cex=1, pch=19, 
   col = c("grey", "black")), type="conditional", axes = T)

然后,我尝试了以下代码,允许我绘制线条,但顶部没有数据点,没有CI:

visreg(p1, "year", by = "loca", overlay = T, 
   line=list(lty = 1, col = c("grey60", "black")), points=list(cex=1, 
   pch=19, col = c("grey", "black")),
   type="conditional", trans = exp, fill.par = list(col = c("grey80", 
   "grey70")))

当我使用type ='contrast'而不是'conditional'时,我得到CI波段。但是,当我尝试使用trans = exp。

反向转换价格时,这不起作用

总体而言,我需要能够使用以下属性绘制交互:

  • 信心乐队
  • backtransformed points
  • 预测线(每个级别的'loca'一个)

非常乐意尝试其他方法....但到目前为止我似乎找不到任何工作。

非常感谢!

2 个答案:

答案 0 :(得分:1)

一种可能性是使用effects包:

library(effects)
eff.p1 <- effect("year*loca", p1, KR=T)

然后你可以用包提供的东西直接绘制它并从那里自定义它:

plot(eff.p1)

或采取什么效果产生并使用ggplot在更好的情节中绘制它:

eff.p1 <- as.data.frame(eff.p1)
ggplot(eff.p1, aes(year, linetype=factor(loca),
                                     color = factor(loca))) +
  geom_line(aes(y = fit, group=factor(loca)), size=1.2) +
  geom_line(aes(y = lower,
                group=factor(loca)), linetype =3) +
  geom_line(aes(y = upper,
                group=factor(loca)), linetype =3) +
  xlab("year") +
  ylab("Marginal Effects on Log Price") +
  scale_colour_discrete("") +
  scale_linetype_discrete("") +
  labs(color='loca') + theme_minimal()

我无法在没有数据的情况下尝试代码,但我认为它应该可行。

答案 1 :(得分:0)

这应该可以解决问题:

install.packages(sjPlot)
library(sjPlot)
plot_model(p1, type = "int", terms = c(year,loca), ci.lvl = 0.95)

尽管它带有一些关于标签的警告,对我的数据进行测试的警告,但它会自动进行反向转换,并且似乎可以正常工作。定制应该很容易,因为我相信sjPlot使用ggplot。

编辑:@Daniel指出允许更多自定义的替代选项是plot_model(type =“ pred”,...)或plot_model(type =“ eff”,...)