Я хочу построить трехстороннее взаимодействие между непрерывными переменными и показать данные.
Я получаю три панели рядом и маржинальные средние для каждого группового фактора (tiv
).
Теперь я хочу добавить точки данных вручную, используя geom_point и facet_grid / facet_wrap, а также другой фактор группировки. Однако, когда я делаю это, линии, изображающие маргинальные средства, теперь соединяют точки данных. Это происходит только тогда, когда я разделяю точки данных на панели ie. когда я добавляю 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» теперь отображаются на всех панелях!
Большое спасибо за любую помощь! Марина