карта emmeans из списка линейных моделей в R - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть список из более чем 100 линейных моделей, и я хочу взять оценочные средние значения и стандартные ошибки для каждой модели.

Давайте использовать mtcars в качестве примера.

library(tidyverse); library(magrittr); library(emmeans)

mtcars %<>% 
  mutate(
    cyl = as.factor(cyl)
  )

df <- mtcars %>% select(cyl, hp, mpg)

Я могу легко получить расчетные средние значения и стандартные ошибки для каждой модели с помощью emmeans:

mod <- lm(hp ~ cyl, data = df)
emmeans(mod, "cyl")

Но что, если у меня есть список моделей?

list_lm <- df %>% 
   select(-c(cyl)) %>%
   map(function(dv) lm(dv ~ df$cyl, data = .)) 

Я не могу использовать:

emmeans(list_lm$hp, "cyl")
Error in ref_grid(object, ...) : Perhaps a 'data' or 'params' argument is needed

И в идеале я хочу что-то, что дало бы мне эту статистику для всех моделей.Что-то вроде broom::tidy для коэффициентов модели, но для emmeans:

list_lm %>% 
   map(broom::tidy)

1 Ответ

0 голосов
/ 19 сентября 2018

Ваша интуиция была права.Решение требует сохранения промежуточных результатов в столбцах списка и последующей их распаковки, но, учитывая структуру вывода emmeans, broom::tidy() не требуется.Просто преобразуйте вывод emmeans в столбец списка data.frames и unnest().

library(dplyr)
library(purrr)
library(tidyr)
library(emmeans)

ds_mtcars <- 
  mtcars %>% 
  mutate(cyl = as.factor(cyl)) 

ds_nest <- 
  ds_mtcars %>% 
  group_by(am) %>% 
  nest() 

foo_model <- function(data){
  lm(hp ~ cyl, data = data)
}

ds_nest <- ds_nest %>% mutate(model = map(.x = data, .f = foo_model))

ds_temp <- 
  ds_nest %>% 
  mutate(
    emmeans = pmap(
      .l = list(
        object = model, 
        specs = "cyl"
      ),
      .f = emmeans
    )
  ) 

ds_temp %>% 
  mutate(emm2 = map(emmeans, data.frame)) %>% 
  unnest(emm2)

Кроме того, функции purrr map() и pmap() могут быть утомительными, но я приложил все усилия, чтобы помочь себе и новым пользователям с помощью этих функций в моем блоге .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...