使用plot_model左右绘制对应于两个不同变量(且其中之一不为图例)的两条线

时间:2019-07-15 02:08:54

标签: r sjplot

我正在使用两个预测变量B和C进行多级(逻辑)回归。B和C具有相似的范围,因此可以使用x轴上的相同单位合理地显示它们。我想这样做是因为我想在图中突出显示它们具有不同的斜率。

当我尝试使用plot_model和下面的代码这样做时,其中一个变量被发送到图例,并且我得到this。但是,我宁愿有this

可以做到吗?

感谢您的帮助!

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')

print(plot_model(m, terms = c('B', 'C'), type='pred'))

1 个答案:

答案 0 :(得分:0)

您想“重叠”两个图,一个具有B的预测值,另一个具有C的值。由于sjPlot使用ggeffects-package来计算边际效应,因此我建议您直接使用ggeffects并构建自己的ggplot对象

由于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 package(v0.3.0)于2019-07-24创建