【问题标题】:Augment predictions from many models in the original dataset来自原始数据集中许多模型的增强预测
【发布时间】:2018-11-16 00:27:48
【问题描述】:

我想用所有可能的 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。我怎样才能做到这一点?有没有办法从扫帚中使用增强?

【问题讨论】:

    标签: r purrr broom


    【解决方案1】:

    您可以使用mapaugment,类似于将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))
    

    预测位于Pred 列表中每个数据帧的.fitted 列中。

    models2 <- models %>%
      select(Formula, Pred) %>%
      unnest() %>%
      select(`.rownames`, names(mtcars), Formula, `.fitted`) %>%
      spread(Formula, `.fitted`)
    

    【讨论】:

    • 好的,谢谢!那么如何从 Pred 列表中提取这些预测,以便每个预测都保留在主 mtcars 数据集中?
    • 几乎!我实际上想要列中的预测,例如。 mpg_pred, cyl_pred, ...carb_pred 32 行。我想,可以利用 tidyr::spread 来做到这一点吗?
    • 哇...太棒了!为了制作预测的变量名称,我做了一个小改动并使用了它: models2 % select(ys, pred) %>% unnest() %>% select(ys, .rownames, names(mtcars) , .fitted) %>% mutate(ys = paste0(ys, "_pred")) %>% spread(ys, .fitted) 为了其他用户的利益,你能把这个放在你的答案中吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多