Улучшение прогнозов по многим моделям в исходном наборе данных

Я хочу запустить множество моделей со всеми возможными комбинациями x и y. Для этого я создал следующий код.

library(tidyverse)

y <- names(mtcars)

xs <- map(y, ~setdiff(names(mtcars), .x)) %>% 
  map(~paste0(.x, collapse = "+")) %>%
  unlist()

ys <- names(mtcars)

models <- tibble(ys, xs) %>%
  mutate(Formula = paste0(ys, " ~ ", xs)) %>% 
  mutate(model = map(Formula, ~glm(as.formula(.x), data = mtcars)))

Теперь я хочу получить все прогнозы от всех этих моделей в исходном наборе данных, здесь mtcars. Как я могу это сделать? Есть ли способ использовать аугмент от метлы?


person Geet    schedule 16.11.2018    source источник


Ответы (1)


Вы можете использовать map и augment так же, как вы подходите glm к каждой строке.

library(tidyverse)
library(broom)

y <- names(mtcars)

xs <- map(y, ~setdiff(names(mtcars), .x)) %>% 
  map(~paste0(.x, collapse = "+")) %>%
  unlist()

ys <- names(mtcars)

models <- tibble(ys, xs) %>%
  mutate(Formula = paste0(ys, " ~ ", xs)) %>% 
  mutate(model = map(Formula, ~glm(as.formula(.x), data = mtcars))) %>%
  mutate(Pred = map(model, augment))

Прогноз находится в столбце .fitted в каждом фрейме данных из списка Pred.

models2 <- models %>%
  select(Formula, Pred) %>%
  unnest() %>%
  select(`.rownames`, names(mtcars), Formula, `.fitted`) %>%
  spread(Formula, `.fitted`)
person www    schedule 16.11.2018
comment
Хорошо спасибо! Как я могу извлечь эти прогнозы из списка Pred, чтобы все прогнозы оставались в основном наборе данных mtcars? - person Geet; 16.11.2018
comment
Почти! Я действительно хочу, чтобы прогнозы были в столбцах, например. mpg_pred, cyl_pred, ... carb_pred с 32 строками. Думаю, для этого можно использовать tidyr :: spread? - person Geet; 16.11.2018
comment
Вау ... фантастика! Чтобы сделать предсказанные имена переменных, я сделал одно небольшое изменение и использовал его: models2 ‹- models%›% select (ys, pred)% ›% unnest ()%›% select (ys, .rownames, names (mtcars), .fitted )% ›% Mutate (ys = paste0 (ys, _pred))%›% spread (ys, .fitted) Можете ли вы указать это в своем ответе для пользы других пользователей? - person Geet; 16.11.2018