0

我正在尝试在此处描述的嵌套数据框中运行回归。出于我的目的,我felmlfe包中使用,因为我有很多级别的固定效果。

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来提取模型输出,它适用于glanceand 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
4

1 回答 1

1

看起来augment很难找到data参数的数据,这通常是用于拟合的数据集。

如果使用其中一个模型而不是同时使用所有模型,则更容易看出问题。

这不起作用,您给出的错误是:

augment(by_country$model[[1]])

但是将数据显式传递给data参数会:

augment(by_country$model[[1]], data = by_country$data[[1]])

因此,一种解决方法是将数据集augment作为第二个参数传递给。这可以通过 来完成,同时在和列中purrr:map2循环。modeldata

by_country %>%
    unnest(model %>% purrr::map2(., data, augment))
于 2017-03-07T19:16:13.130 回答