首页 > 解决方案 > 将 ggplot 的 facet_grid 与 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 标签。

标签: rggplot2logistic-regressionfacet-grid

解决方案


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


推荐阅读