Использовать метку переменной для графика предсказания emmip/ggplot?

Я использую пакет emmeans и функцию emmip для построения прогнозных вероятностей из объекта clmm. Насколько я понимаю, emmip использует ggplot под капотом. Я пытаюсь построить прогнозы по уровням пары предикторов. Это только косметическая проблема, но можно ли как-то установить (или переопределить) имя переменной на графике на более читаемое значение метки?

Я нашел способ добавить метки переменных с помощью пакета sjlabelled, аналогично тому, что уже реализовано в базе 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"))

Было бы хорошо автоматически отображать «Группа лечения: Контроль», а не «Группа рандомизации: Контроль», как сейчас.

Единственные альтернативы, которые я вижу, - это вручную изменить текст в приложении для редактирования изображений постфактум (что займет много времени) или изменить фактические имена переменных во фрейме данных (что также не идеально, так как это сломает много код).

введите здесь описание изображения


person LucaS    schedule 02.07.2018    source источник
comment
Если бы вы могли превратить это в воспроизводимый пример, я думаю, на него быстро ответили бы. В настоящее время мне нужно будет сначала узнать все о emmeans и о том, как подогнать модель под него, прежде чем я смогу начать смотреть код для графики.   -  person Peter Ellis    schedule 03.07.2018


Ответы (1)


Один из способов сделать это — добавить вызов facet_wrap самостоятельно с помощью пользовательского лейблера. На данный момент вызов facet_wrap скрыт под капотом в emmip, но вы можете добавить новый и переопределить его. Вам просто нужно убедиться, что у вас есть правильная переменная.

Вот пример, который заменяет метки граней по умолчанию («сторона: L» и «сторона: 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)

введите здесь описание изображения

person Peter Ellis    schedule 03.07.2018