2017-03-07 2 views
0

ネストされたデータフレーム内で回帰を実行しようとしていますas described here。私は多くのレベルの固定効果があるので、私の目的のためにlfeパッケージからfelmを使用しています。felmはbroom :: augment/purrrでは動作しませんが、整頓で動作します

上記の例での代わりにfelmを使用して例を再現すると、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) 
    ) 

すべてが、私は、コードの最後の行、おそらく別のfelm癖にpurrr::map式の代わりに関数を使用する必要があったことを除いて、この時点までに動作します。

broomを使用してモデル出力を抽出しようとすると、glancetidyで動作しますが、augmentでは動作しません。次のエラーメッセージで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)) 

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 

答えて

1

augmentは、一般的にフィッティングのために使用されるデータセットであるdata引数のデータを見つけるのトラブルを抱えているように見えます。

これらのモデルのうちの1つをすべてではなくまとめて扱うと、問題が分かりやすくなります。

これはあなたの特定のエラーで、動作しません:

augment(by_country$model[[1]]) 

しかし、明示的に行いdata引数にデータを渡す:

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

回避策は、データセットを渡すことがあります第2引数としてaugmentに設定します。これは、purrr:map2で実行し、modeldataの両方の列を同時にループします。

by_country %>% 
    unnest(model %>% purrr::map2(., data, augment)) 
関連する問題