Как согласовать регрессию модели смешанных эффектов с взаимодействием в R ggplot2?

Набор данных, с которым я работаю, имеет термин взаимодействия. Я хочу, чтобы модель соответствовала термину взаимодействия по оси x и y.var по оси y. Я попытался следовать примеру это, но не слишком разобрался в том, как воспроизвести его в ggplot2 (т. Е. Функция стиля графика больше не работает ... поэтому я не знал, как воспроизвести результаты).

temp <- rnorm(100, 2,1)set.seed(111)
temp <- rnorm(100, 3,1)
rainfall <- rnorm(100,5,1)
y.var <- rnorm(100, 2,1)
site <- rep(c("A","B","C","D"), each = 25)     

df <- data.frame(temp, rainfall, y.var, site)
df$site <- as.factor(as.character(df$site))

mod <- lmer(y.var ~ temp * rainfall + (1|site), data  = df)
summary(mod)

Хотите повторить это в ggplot? Функция plot_model работает.

Quinten 17.05.2022 13:58
ggplot2 для отображения данных. Для построения коэффициентов модели или модельных эффектов я рекомендую ggeffects и sjPlot. Кроме того, lm — это не модель смешанных эффектов, а обычный метод наименьших квадратов. Вы захотите использовать lme4::lmer.
Arthur 17.05.2022 14:06

@Quinten plot_model(fit, type = "pred", terms = c("temp:rainfall")) Ошибка в plot_model (fit, type = «pred», terms = c («temp: rainfall»)): не удалось найти функцию «plot_model»

Biotechgeek 17.05.2022 14:07

@Arthur Смотрите мой обновленный df и код. Я попробовал ggPredict(model, c("temp * rainfall", "site")) и получил сообщение об ошибке... Ошибка: оператор $ не определен для этого класса S4

Biotechgeek 17.05.2022 14:18

Используя пакет ggeffects, ggpredict(mod, terms=c("temp", "rainfall")) %>% plot() должно работать.

DaveArmstrong 17.05.2022 14:46
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
5
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

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

Поскольку у вас есть y.var на оси y, у вас остается только одна ось для построения двух переменных с фиксированным эффектом. Это означает, что вам нужно будет выбрать либо количество осадков, либо температуру для оси x, а другую переменную представить с помощью другого эстетического вида, например цвета. В этом примере я буду использовать температуру для оси x. Очевидно, чтобы сделать график интерпретируемым, нам нужно ограничить количество «кусочков» осадков, которые мы предсказываем. Здесь я буду использовать 5.

Эффект взаимодействия виден здесь как изменение наклона линии по мере увеличения количества осадков.

library(geomtextpath)
library(lme4)

mod <- lmer(y.var ~ temp * rainfall + (1|site), data  = df)

newdf <- expand.grid(temp = seq(min(df$temp), max(df$temp), length = 100),
                     rainfall = seq(min(df$rainfall), max(df$rainfall), 
                                    length = 5))

newdf$y.var <- predict(mod, newdata = newdf)

ggplot(newdf, aes(x = temp, y = y.var, group = rainfall)) +
  geom_point(data = df, aes(shape = site, color = rainfall)) +
  geom_textline(aes(color = rainfall, label = round(rainfall, 2)), 
                hjust = 0.95) +
  scale_color_gradient(low = 'navy', high = 'red4') +
  theme_light(base_size = 16)

enter image description here

Большой! Очень полезно. Есть ли способ указать уровень влажности. Скажем, я хочу построить только 1,3,5 и 7, или модель заранее назначает это?

Biotechgeek 17.05.2022 17:20

@Biotechgeek, как их назначить, находится в вызове expand.grid. Просто измените rainfall = seq(..., length = 5) на rainfall = c(1, 3, 5, 7)

Allan Cameron 17.05.2022 17:27

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