您想“叠加”两个图,一个带有 B 的预测值,一个带有 C 的预测值。由于 sjPlot 使用 ggeffects-package 来计算边际效应,我建议您直接使用 ggeffects,并构建自己的 ggplot-object。
由于 B 和 C 具有不同的范围,您可以强制两者的范围相同(参见下面的第二个示例)。
library(lme4)
library(ggeffects)
library(ggplot2)
df_test <-
data.frame(
'subj' = c('Joe', 'Joe', 'Joe', 'Moe', 'Moe', 'Moe'),
'A' = c(1, 0, 1, 0, 1, 1),
'B' = c(3, 2, 1, 4, 3, 3),
'C' = c(3, 3, 2, 1, 3, 0)
)
m <- glmer(A ~ B + C + (B + C | subj), data = df_test, family = 'binomial')
#> boundary (singular) fit: see ?isSingular
# get predictions for each predictor, combibe results
dat <- get_complete_df(ggpredict(m))
ggplot(dat, aes(x = x, y = predicted, colour = group, fill = group)) +
geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = .1, colour = NA) +
geom_line()
# get predictions for each predictor, combibe results
dat1 <- ggpredict(m, "B [0:4]")
dat1$group <- "B"
dat2 <- ggpredict(m, "C [0:4]")
dat2$group <- "C"
dat <- rbind(dat1, dat2)
ggplot(dat, aes(x = x, y = predicted, colour = group, fill = group)) +
geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = .1, colour = NA) +
geom_line()
由reprex 包(v0.3.0)于 2019 年 7 月 24 日创建