0

我想绘制连续变量之间的三向交互并显示数据。

我得到三个并排的面板和每个组因子的边际均值 ( tiv)。

我现在想使用 geom_point 和 facet_grid/facet_wrap 以及不同的分组因子手动添加数据点。但是,当我这样做时,绘制边际均值的线现在连接数据点。这只发生在我将数据点分成面板时,即。当我添加 facet_grid/facet_wrap 时。但是,当我不添加 facet_grid 时,所有数据点都会显示在所有面板中。

有谁知道如何解决这一问题?

代码和图如下。

library(lmertest)
library(sjPlot)
library(ggplot2)

tiv <- rnorm(100)
dbs <- rnorm(100)
cs <- rnorm(100)
dt <- rep(c(0:3), 25)
sbj <- rep(c(1:25), each=4)
tmp <- data.frame(tiv, dbs, cs, dt, sbj)

tmp$dbs_group <- cut(tmp$dbs, c(-2.5, -0.84, 0.83, 2.5), labels = c(-1.01, -0.03, 0.95)) 
tmp$tiv_group <- cut(tmp$tiv, c(-2.7, -0.74, 0.68, 2.4), labels = c(-1.11, 0.01, 1.13)) 


mmod <- lmer(cs ~ dt*tiv*dbs + (dt | sbj), data = tmp, control=lmerControl(optimizer="bobyqa")) 

p <- plot_model(mmod, type = "emm", terms = c("dt [all]", "dbs", "tiv"), 
                mdrt.values = "quart", show.legend = T, line.size = 2, show.data =F) 
p + geom_point(data = tmp, mapping = aes(x = dt, y = cs, group = dbs_group, colour = dbs_group), inherit.aes = F) + 
  scale_fill_manual(values = c("red", "blue", "black")) + scale_color_manual(values = c("red", "blue", "black"))+ facet_grid(~tiv_group)

在此处输入图像描述

下图是在没有使用 facet_grid 的情况下创建的。所有数据点都显示在所有面板中。

在此处输入图像描述

理想情况下,我正在寻找一种解决方案,其中数据点被分成不同的面板,线条绘制边际均值。

编辑:在使用 ggpredict 玩了更多之后,我想我认为问题出在两个 facet_* 语句上。似乎只有一个适用。有没有办法覆盖在同一面板上拆分的两个数据集?

这是我尝试使用 ggpredict 的代码片段(我将两者都绘制为点,因为它有助于查看线条发生了什么)

library(ggeffects)
pr <- ggpredict(mmod, terms = c("dt [all]", "dbs", "tiv"), type = "fe")
ggplot(pr, aes(x=x, y = predicted, colour = group)) + facet_wrap(~facet) + geom_point() + geom_point(data = tmp, mapping = aes(x = dt, y = cs, group = dbs_group, colour = dbs_group), inherit.aes = F) +  facet_wrap(~tiv_group)

当我运行这条线时,“pr”中的所有数据都绘制在所有面板中。如果我删除最后一个 facet_* 语句,则“pr”中的数据将正确拆分为面板,但“tmp”中的数据现在显示在所有面板中!

非常感谢您的帮助!码头

4

0 回答 0