我正在尝试在嵌套数据框as described here中运行回归。出于我的目的,我正在使用felm
包中的lfe
,因为我有很多级别的固定效果。
如果我使用felm
代替lm
重新执行上述链接中的示例,则在我尝试使用broom::augment
之前,它大部分都有效。
library(tidyverse)
library(broom)
library(gapminder)
library(lfe)
by_country <- gapminder %>%
group_by(continent, country) %>%
nest()
country_felm <- function(data){
felm(lifeExp ~ year, data = data)
}
by_country <- by_country %>%
mutate(model = purrr::map(data, country_felm)
)
除了我必须在最后一行代码purrr::map
中使用函数而不是公式,可能还有另一个felm
怪癖之外,一切都达到了这一点。
现在,如果我尝试使用broom
来提取模型输出,则它适用于glance
和tidy
,但不适用于augment
。
by_country %>% unnest(model %>% purrr::map(broom::glance))
by_country %>% unnest(model %>% purrr::map(broom::tidy))
by_country %>% unnest(model %>% purrr::map(broom::augment))
尝试使用augment
会导致以下错误消息:
Error in mutate_impl(.data, dots) :
argument must be coercible to non-negative integer
In addition: Warning message:
In seq_len(nrow(x)) : first element used of 'length.out' argument
答案 0 :(得分:1)
看起来augment
无法找到data
参数的数据,这通常是用于拟合的数据集。
如果使用这些模型中的单个模型而不是同时使用所有模型,则更容易看到问题。
根据您给出的错误,这不起作用:
augment(by_country$model[[1]])
但显式地将数据传递给data
参数:
augment(by_country$model[[1]], data = by_country$data[[1]])
因此,解决方法是将数据集作为第二个参数传递给augment
。这可以通过purrr:map2
完成,同时循环遍历model
和data
列。
by_country %>%
unnest(model %>% purrr::map2(., data, augment))