为 emmip/ggplot 预测图使用变量标签?

Use variable label for emmip/ggplot prediction plot?

我正在使用 emmeans 包和 emmip 函数绘制 clmm 对象的预测概率。据我了解,emmip 在底层使用了 ggplot。我正在尝试绘制跨几个预测变量级别的预测。这只是一个表面问题,但是否有可能以某种方式将图中的变量名称设置(或覆盖)为更易读的标签值?

我找到了一种使用 sjlabelled 包添加变量标签的方法,类似于已经在 base R 中实现的用于将标签添加到变量级别的方法:

library(sjlabelled)
dat$language_oth_home <- set_label(dat$language_oth_home, label = "Other Language at Home") 

但是emmip不识别。

我想尝试使用正确的标签实现自动化的示例图是:

emmip(mmod_stundvis_fin_em, st_understand_vision_dev_2 ~ visit|language_oth_home|randomization_group) +
  xlab("Visit (0 = Pre-, 1 = Post-)") +
  ylab("Probability") +
  scale_color_manual(name="Response Category",
                 labels=c("Strongly Agree", "Agree", "Disagree", "Strongly Disagree"),
                 values=c("#0371b1", "#91c6de", "#f4a682", "#c90120"))

最好自动显示“治疗 Group:Control”,而不是现在的 "randomization_group:Control"。

我看到的唯一替代方法是手动更改图像编辑应用程序中的文本 post-hoc(这会很耗时),或者更改数据框中的实际变量名称(这不是两者都是理想选择,因为它会破坏很多代码)。

实现此目的的一种方法是使用自定义标签添加对 facet_wrap 的调用。目前,对 facet_wrap 的调用隐藏在 emmip 中,但您可以添加一个新调用并覆盖它。你只需要确保你有正确的变量。

这是一个用我自己的文本替换默认分面标签("side: L" 和 "side: R")的示例。

#--- Three-factor example
noise.lm = lm(noise ~ size * type * side, data = auto.noise)

my_labeller <- as_labeller(function(x){
  return(paste0("Treatment group: ", x))
})

emmip(noise.lm, type ~ size | side) +
  facet_wrap(~side, labeller = my_labeller)