私は purrr パッケージに出くわしましたが、これは私がやりたいことに関して少し役立つと思います-私はそれをまとめることができません.
これは投稿に沿って進むと思いますが、他の多くの人が遭遇すると思う一般的なユースケースについて説明しているので、これが彼らにも役立つことを願っています.
これは私が目指しているものです:
- 1 つの大きなデータセットから、異なるサブグループごとに複数のモデルを実行します。
- これらのモデルをすぐに利用できるようにして、係数、精度などを調べられるようにします。
- 異なるグループごとに保存されたこのモデル リストから、対応するモデルを対応するテスト セット グループに適用できます。
grouping_vals = c("cyl", "vs") library(purrr) library(dplyr) set.seed(1) train=mtcars noise = sample(1:5,32, replace=TRUE) test = mtcars %>% mutate( hp = hp * noise) # just so dataset isn't identical models = train %>% group_by_(grouping_vals) %>% do(linear_model1 = lm(mpg ~hp, data=.), linear_model2 = lm(mpg ~., data=.) )
- ここまで来ましたが、対応するモデルを、対応するグループ化された値の「テスト」データセットに「マップ」する方法がわかりません。
- ここで、対応するグループのトレーニング データを使用して、linear_model1 または linear_model2 のトレーニングから残差を取得しようとしている可能性もあります。
models$linear_model1[[2]]$residuals は、model1 の 2 番目のグループ化の残差を表示します。すべての models$linear_model1 $residuals をトレーニング データセットに移動する方法がわかりません。
私の理解では、tidyr の nest() 関数は、モデルの do() create を作成したときに発生するのと同じことを行っています。
models_with_nest = train %>%
group_by_(grouping_vals) %>%
nest() %>%
mutate( linear_model2 = purrr::map(data, ~lm(mpg~., data=.)),
linear_model1 = purrr::map(data, ~lm(mpg~ hp+disp, data=.))
)
繰り返しますが、これらの残差/トレーニング予測をトレーニング データセットに簡単に「マッピング」できる方法を探してから、対応するモデルを上で作成したような目に見えないテスト データセットに適用します。
ここには多くの約束があるので、それをまとめる方法がわかりません。
これは、多くの人がこのより「自動化された」方法で実行できるようにしたいと考えているタスクですが、代わりに、人々は非常にゆっくりと段階的に実行するものだと思います.