Как построить несколько моделей glmer на одном графике?

У меня есть две модели glmer с двумя ковариатами в каждой, которые я пытаюсь представить в виде одной фигуры.

MWE:

## generalized linear mixed model
library(lattice)

cbpp$response <- sample(c(0,1), replace=TRUE, size=nrow(cbpp))
gm1 <- glmer(response ~ size + incidence + (1 | herd),
              data = cbpp, family = binomial)

cbpp$obs <- 1:nrow(cbpp)
gm2 <- glmer(response ~ size + incidence + (1 | herd) +  (1|obs),
              family = binomial, data = cbpp)

Я пытаюсь построить прогнозируемые значения для каждой ковариации для каждой модели. Я нашел библиотеку sjPlot и функцию plot_model, которая может строить эти прогнозы при использовании type = "pred". Вызов этой функции отдельно для каждой модели работает идеально и дает две отдельные фигуры, подобные этой, для каждой модели:

Как построить несколько моделей glmer на одном графике?

Однако я не знаком с R, и мне трудно построить 4 графика на одной фигуре.

Функция plot_model имеет параметр grid, который работает только для моделей с распределением Пуассона. Для gm1 и gm2 я получаю следующую ошибку при вызове plot_model(gm1, type = "pred", grid = TRUE):

Error in if (attr(x, "logistic", exact = TRUE) == "1" && attr(x, "is.trial",  : missing value where TRUE/FALSE needed

В любом случае, я бы не смог построить три модели на одном рисунке, используя это, поэтому я попробовал три разных подхода. Сначала я увидел функцию plot_models, которая принимает на вход несколько моделей. Когда я пытаюсь передать две модели в качестве аргументов, вызывая plot_models(gm1, gm2), я получаю следующую ошибку:

Error: $ operator not defined for this S4 class

Во-вторых, я безуспешно пытался использовать функцию par, устанавливающую mfrow, а затем снова вызывая plot_model. Я не получаю никаких ошибок, но графики продолжают отображаться как отдельные фигуры.

В-третьих, я попытался использовать библиотеку gridExtra. Вызов

p1 <- plot_model(gm1, type = "pred")
p2 <- plot_model(gm2, type = "pred")
grid.arrange(p1, p2)

приводит к следующей ошибке:

Error in gList(list(ppt = list(data = list(x = c(-2, -1, 0, 1, 2, 3, 4,  : only 'grobs' allowed in "gList"

Кто-нибудь знает об этом?

РЕДАКТИРОВАТЬ

Пожалуйста, отредактируйте свой пост, чтобы включить воспроизводимые образцы данных и код, чтобы предоставить нам что-то для работы. Очень сложно (т.е. невозможно) помочь с вопросами вида «Я получаю ошибку XYZ», ничего не зная о данных, вызвавших ошибку(и). Я рекомендую взглянуть на то, как предоставить минимальный воспроизводимый пример/попытка.

Maurits Evers 04.05.2019 02:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
1 390
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, это работает:

pp1 <- plot_model(gm1,type = "pred")
pp2 <- plot_model(gm2,type = "pred")
plot_grid(c(pp1,pp2))

Просто комментарий здесь, синтаксис, который сработал для меня: «plot_grid (список (pp1, pp2))»

sleepy 03.06.2021 02:17

Другие вопросы по теме

Как мне получить решение для случайных эффектов с помощью пакета lme4?
Найти шаблон только до первого появления другого шаблона (или: как удалить случайные эффекты из формулы моделей смешанных эффектов)
Соответствуют ли мои данные вложенной модели дисперсионного анализа/линейной модели со смешанными эффектами и как должна быть написана формула?
Как заставить звездочёт распознавать модель из списка lmList?
Несколько переменных для пересечения (случайные наклоны) модели смешанного эффекта (lme4)
Извлечение байесовского значения p из модели lmer в R
Как выполнить обратное преобразование с непрерывной переменной
Как рассчитать кумулятивный эффект переменной в регрессии?
Как интерпретировать корреляцию таблицы фиксированных эффектов в выводе lmer?
Нужно ли указывать вложенные случайные эффекты, если вложенность неявна в данных?