微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将嵌套和地图与mgcv gam和扫帚增强功能结合使用

如何解决将嵌套和地图与mgcv gam和扫帚增强功能结合使用

我正在尝试为分组数据框中的每个样本创建平滑样条。为此,我使用了嵌套地图方法和mgcv gam(在此示例https://smu095.github.io/2019/02/16/2019-02-16-tidytuesday-fitting-multiple-time-series-models-using-purrr/之后)。

运行gam之后,我想使用broom :: augment提取拟合数据并计算置信区间。

代码broom 0.5.6上有效,但在新的broom 0.7版本上引发错误broom :: tidy和broom:glance仍然可以使用这种格式,但是扩充会因“错误mutate()输入augment_spline出现问题而停止。 x对象“年份”未找到”

下面的示例代码

library(tidyverse)
library(dslabs)

#Use the gapminder dataset that comes with dslabs as an example
glimpse(gapminder)

gapminder_nest <- gapminder %>% 
  group_by(country) %>% 
  nest()%>%
  mutate(splined =map(data,~mgcv::gam(population ~ s(year,k=5,bs="tp"),data=.x))) %>%
  mutate(augment_spline= map(splined,broom::augment))%>%
  unnest(augment_spline)%>%
  dplyr::select(country,population,.fitted,.se.fit)

如果使用扫帚0.5.6,则运行相同的代码

devtools::install_version("broom",version = "0.5.6",repos = "http://cran.us.r-project.org")

我可以找到的所有在线教程都提供了类似的代码,这些代码似乎无法使用broom 0.7进行工作

解决方法

在较新的版本中,我认为它也需要newdata参数中的数据。您可以使用map2将数据作为单独的参数传递。

library(tidyverse)
library(dslabs)

gapminder_nest <- gapminder %>% 
  group_by(country) %>% 
  nest()%>%
  mutate(splined = map(data,~mgcv::gam(population ~ s(year,k=5,bs="tp"),data=.x))) %>%
  mutate(augment_spline = map2(splined,data,~broom::augment(.x,newdata = .y))) %>%
  unnest(augment_spline)

虽然可以,但是不会像broom的0.5.6版本那样返回所有列,即se.fit.resid.hat,{{1 }}和.sigma。这只会返回.cooksd列。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。