эффекты :: эффект не распознает данные в мурлыкании :: карта - PullRequest
2 голосов
/ 10 января 2020

Рассмотрим набор данных, подобный следующему:

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 

Есть идеи, как решить эту проблему и сделать это с помощью аккуратного подхода?

1 Ответ

3 голосов
/ 10 января 2020

Таким образом, у функции effects() есть реальная проблема, когда используемые вами данные не находятся в глобальной среде. На него ссылаются в разделе «Предупреждения и ограничения» справочной страницы ?effects. Они указывают на «встраивание» виньетки из пакетов car для возможного обходного пути. Обходной путь, который они предлагают, - создание копии данных в глобальной среде. Это не элегантно, но это работает

poo <- sleepstudy %>%
  group_by(grp = gl(2, n()/2)) %>%
  nest() %>%
  mutate(fit = map(data, function(x) {
    assign(".dta", x, env=.GlobalEnv)
    eff <- effect(term="Days", mod=lmer(Reaction ~ Days + (Days | Subject), data=.dta))
    remove(".dta", envir=.GlobalEnv) 
    eff
  }))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...