结合 ggplot 的 facet_grid 和 bmrs conditional_effects

Combine ggplot's facet_grid with bmrs conditional_effects

我有一个(玩具)数据集,其中每个受试者重复 10 次任务,他们必须猜测显示的两点之间的距离。在这个数据集中,我有外部评委(不是参与者自己)对每个主题的表现给出的评分。

library(tidyverse)
library(brms)
data <- data.frame(subject = rep(rep(c(1:10),5), 10),
               judge   = sort(rep(c(1:5), 100)),
               distance = runif(500),
               response = round(runif(500,1,6)))

我想绘制每位评委如何评价每个受试者在每次重复中的表现,作为距离的函数。我可以用 ggplot 的 facet_grid

很好地做到这一点
ggplot(data,aes(x=distance, y=jitter(response))) +
geom_point(alpha=0.5) +
geom_smooth(method=lm) +
facet_grid(judge~subject)

现在,法官的回答是有序的,我不想将它们建模为连续的。所以我 运行 一个单一主题的 brms 序数模型

fit.oneSubj <- brm(data = data %>% filter(subject == 1) %>% filter(judge == 1),
                   response ~ distance,
                   family = cumulative("probit"),
                   chains = 1,
                   save_all_pars = TRUE)

然后我绘制它

conditional_effects(fit.oneSubj, spaghetti = TRUE, nsamples = 100) %>% #, categorical = TRUE gives you ordinal probability curves
  plot(points = T, point_args = c(alpha = 1/3), line_args = c(size = 0),
       theme = theme(panel.grid = element_blank()))

来自 conditional_effects 的情节也是一个 ggplot,因此应该可以将两者结合起来。但是怎么办?我尝试为每个主题生成其中一个后面的图,并将它们拼凑在一起,但这并没有给我优雅的 facet_grid 包装,同时为所有图提供一个 x 和 y 标签。

我最终通过在循环中单独创建所有图来做到这一点,确保 xlim 和 ylim 都相同,将它们保存到列表中,然后用 ggarrange 和 [=11= 绘制它们](均来自 ggpubr)。没有刻面标签看起来不那么漂亮,但已经足够好了!