首页 > 解决方案 > 如何在新数据上使用增强模型

问题描述

augment使用R 中 Broom 包中的函数将预测添加回 tibble是相当简单的。即。

df <- iris %>%
  nest(data = everything()) %>%
  mutate(model = map(data, function(x) lm(Sepal.Length ~ Sepal.Width, data = x)),
         pred = map2(model, data, ~augment(.x, newdata = .y))) %>%
  unnest(pred)

但是,当我采用在一组数据上训练的线性模型并尝试预测新数据时,我收到以下错误。

mod <- lm(Sepal.Length ~ Sepal.Width, data = iris)

df2 <- iris %>%
  mutate(Sepal.Width = Sepal.Width + rnorm(1)) %>%
  nest(data = everything()) %>%
  mutate(pred = map2(mod, data, ~augment(.x, newdata = .y)))

# Error: Problem with `mutate()` input `pred`.
# x No augment method for objects of class numeric
# i Input `pred` is `map2(mod, data, ~augment(.x, newdata = .y))`.

我应该如何使用augment来适应新数据?使用外部模型对象(在上面的示例中是mod)是最佳实践还是有更优雅的方法?

标签: rdplyrbroom

解决方案


由于只有一个模型,我们可以不使用map.

library(dplyr)

df1 <- iris %>%
  mutate(Sepal.Width = Sepal.Width + rnorm(1)) %>%
  tidyr::nest(data = everything()) %>%
  summarise(pred = broom::augment(mod, newdata = data[[1]]), 
            mod = list(mod), 
            data = data)

推荐阅读