r - 如何在新数据上使用增强模型
问题描述
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
)是最佳实践还是有更优雅的方法?
解决方案
由于只有一个模型,我们可以不使用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)
推荐阅读
- sql - 在sql表函数中将某些字符包装在标签周围
- python - 抑制 Jupyter Notebook 魔术命令通知
- sql - 如何有条件地加入
- php - Laravel 雄辩的 orderby 关系
- javascript - Href 属性中 (javascript:) 的使用
- sql-server - SQL - 无法在主数据库 sysprocess 中找到/查看当前正在执行的阻塞查询
- redux - Redux 状态和 momentjs
- ruby-on-rails - Rails 读取 cookie 返回一个字符串而不是一个对象
- c# - ProcessStartInfo 从 lpr 命令得到空的 StandardError 结果
- icinga2 - Icinga2 icingaWeb2 : 无法将窗口主机注册到 Centos 主机,但在其他 Centos 服务器上没有问题