felm 不适用于 broom::augment/purrr 但适用于 tidy
felm doesn't work with broom::augment/purrr but works with tidy
我正在尝试 运行 嵌套数据框内的回归 as described here。出于我的目的,我使用 lfe
包中的 felm
因为我有很多级别的固定效果。
如果我使用 felm
而不是 lm
重做上面 link 中的示例,它在我尝试使用 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
看起来 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))
我正在尝试 运行 嵌套数据框内的回归 as described here。出于我的目的,我使用 lfe
包中的 felm
因为我有很多级别的固定效果。
如果我使用 felm
而不是 lm
重做上面 link 中的示例,它在我尝试使用 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
看起来 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))