purrr 使用模型到数据

purrr use model to data

我没有看到任何关于我的问题的信息。我想接下来,当我看到很多模型示例时,如何再次使用在数据上创建的模型?一点点代码会告诉你我想要什么:

这里是基本的 gapminder 许多模型示例。

library(gapminder)
gapminder

by_country <- gapminder %>% 
  group_by(country, continent) %>% 
  nest()

country_model <- function(df) {
  lm(lifeExp ~ year, data = df)
}

by_country <- by_country %>% 
  mutate(model = map(data, country_model))

by_country %>% 
  mutate(model_lag = lag(model))

# A tibble: 142 x 5
   country     continent data              model    model_lag
   <fct>       <fct>     <list>            <list>   <list>   
 1 Afghanistan Asia      <tibble [12 x 4]> <S3: lm> <lgl [1]>
 2 Albania     Europe    <tibble [12 x 4]> <S3: lm> <S3: lm> 
 3 Algeria     Africa    <tibble [12 x 4]> <S3: lm> <S3: lm> 
 4 Angola      Africa    <tibble [12 x 4]> <S3: lm> <S3: lm> 
 5 Argentina   Americas  <tibble [12 x 4]> <S3: lm> <S3: lm> 
 6 Australia   Oceania   <tibble [12 x 4]> <S3: lm> <S3: lm> 
 7 Austria     Europe    <tibble [12 x 4]> <S3: lm> <S3: lm> 
 8 Bahrain     Asia      <tibble [12 x 4]> <S3: lm> <S3: lm> 
 9 Bangladesh  Asia      <tibble [12 x 4]> <S3: lm> <S3: lm> 
10 Belgium     Europe    <tibble [12 x 4]> <S3: lm> <S3: lm> 
# ... with 132 more rows

我的想法是,我可以将模型滞后一个,而不仅仅是用已见数据拟合值,而我想做的是用这个滞后模型预测数据。我知道这是一个糟糕的例子(为什么我要将阿富汗模型用于阿尔巴尼亚),但我的数据嵌套了日期,这很有意义。这应该仍然是可重现的例子。那么有没有办法以这种格式使用预测呢?

结果将是新列 "pred" [12x1],其中包含对新数据的预测,然后我可以用数据取消嵌套并在那里进行预测。

您应该可以使用 purrr::map2 执行此操作。我不太确定如何让它根据 NA 值进行评估,所以我只是将其过滤掉。

library(gapminder)

gapminder %>% 
  group_by(country, continent) %>% 
  nest() %>%
  mutate(model = map(data, partial(lm, lifeExp ~ year))) %>% 
  mutate(model_lag = lag(model)) %>%
  filter(!is.na(model_lag)) %>%
  mutate(pred = map2(model_lag, data, predict))