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))
我没有看到任何关于我的问题的信息。我想接下来,当我看到很多模型示例时,如何再次使用在数据上创建的模型?一点点代码会告诉你我想要什么:
这里是基本的 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))