【发布时间】:2016-08-18 17:43:12
【问题描述】:
我正在尝试将模型子集拟合到嵌套数据框。虽然我见过许多将相同模型拟合到不同数据组的示例,但我还没有遇到过将不同模型拟合到作为嵌套数据框组织的数据集的示例。
作为示例,我从 R For Data Science “Many Models” 部分获取了代码。在这里,目标是将相同的模型拟合到不同的国家(群体)。我希望做的是扩展这一点,并将多种不同的竞争模型适应不同的国家(群体)。理想情况下,每个竞争模型都将作为新列存储在嵌套数据框中。
提前感谢您的帮助!
# Example code
library(dplyr)
library(ggplot2)
library(modelr)
library(purrr)
library(tidyr)
library(gapminder)
# Create nested data
by_country <- gapminder %>%
group_by(country, continent) %>%
nest()
# Model 1
country_model <- function(df) {
lm(lifeExp ~ year, data = df)
}
# Map model 1 to the data
by_country <- by_country %>%
mutate(model = map(data, country_model))
# Model 2
country_model2 <- function(df) {
lm(lifeExp ~ year + gdpPercap, data = df)
}
# Map Model 2 to the data
by_country <- by_country %>%
mutate(model2 = map(data, country_model2))
更新 为了澄清我的问题,我知道我可以手动执行此操作,并为每个模型调用 mutate。我认为我追求的是更灵活的东西,几乎类似于下面的代码。但是,这些函数将调用模型函数,而不是函数“runif”、“rnorm”和“rpois”。例如“country_model”和“country_model2”。希望对您有所帮助。
# Example code
sim <- dplyr::frame_data(
~f, ~params,
"runif", list(min = -1, max = -1),
"rnorm", list(sd = 5),
"rpois", list(lambda = 10)
)
sim %>% dplyr::mutate(
samples = invoke_map(f, params, n = 10)
)
【问题讨论】:
-
我可能错过了您的目标。你不能把这两个模型放在同一个
mutate中吗?即mutate(model = map(data, country_model), model2 = map(data, country_model2)) -
嗨,AO,是的,这肯定行得通。我认为我正在寻找一个更灵活的过程。因此,不是以这种方式输入每个模型,而是以某种方式传递它们(可能在一个列表中?)然后做一些更像 pmap 的东西,它将每个不同的模型映射到数据?