我有以下混合效果模型:
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。
反向转换价格时,这不起作用总体而言,我需要能够使用以下属性绘制交互:
非常乐意尝试其他方法....但到目前为止我似乎找不到任何工作。
非常感谢!
答案 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”,...)