Рассмотрим набор данных, подобный следующему:
library(lme4)
data(sleepstudy)
head(sleepstudy, 10)
Reaction Days Subject
1 249.5600 0 308
2 258.7047 1 308
3 250.8006 2 308
4 321.4398 3 308
5 356.8519 4 308
6 414.6901 5 308
7 382.2038 6 308
8 290.1486 7 308
9 430.5853 8 308
10 466.3535 9 308
Я пытаюсь запустить некоторые линейные модели со смешанными эффектами при стратификации на основе группирующей переменной. Я могу сделать:
library(dplyr)
libary(tidyr)
library(purrr)
sleepstudy %>%
group_by(grp = gl(2, n()/2)) %>%
nest() %>%
mutate(fit = map(data, ~ lmer(Reaction ~ Days + (Days | Subject), data = .)))
получение:
grp data fit
<fct> <list<df[,3]>> <list>
1 1 [90 × 3] <lmrMdLmT>
2 2 [90 × 3] <lmrMdLmT>
Теперь я хотел бы использовать функцию effect()
из библиотеки effects
:
library(effects)
sleepstudy %>%
group_by(grp = gl(2, n()/2)) %>%
nest() %>%
mutate(fit = map(data, ~ effect(term = "Days",
mod = lmer(Reaction ~ Days + (Days | Subject), data = .))))
однако, я всегда получаю сообщение об ошибке:
Error in is.data.frame(data) : object '.' not found
Когда я использую его вне контекста tidyverse
:
sleepstudy2 <- sleepstudy %>%
mutate(grp = gl(2, n()/2))
effect(term = "Days", mod = lmer(Reaction ~ Days + (Days | Subject),
data = sleepstudy2,
subset = grp == 1))
, тогда он работает нормально:
Days effect
Days
0 2 4 7 9
252.2916 267.0686 281.8455 304.0110 318.7880
Есть идеи, как решить эту проблему и сделать это с помощью аккуратного подхода?