如何解决将嵌套和地图与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 举报,一经查实,本站将立刻删除。