felm не работает с метлой :: augment / purrr, но работает с tidy

Я пытаюсь выполнить регрессию во вложенном фрейме данных как описано здесь. Для своих целей я использую 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

person wytham    schedule 07.03.2017    source источник


Ответы (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))
person aosmith    schedule 07.03.2017