将嵌套和地图与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列。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...