1

私は purrr パッケージに出くわしましたが、これは私がやりたいことに関して少し役立つと思います-私はそれをまとめることができません.

これは投稿に沿って進むと思いますが、他の多くの人が遭遇すると思う一般的なユースケースについて説明しているので、これが彼らにも役立つことを願っています.

これは私が目指しているものです:

  1. 1 つの大きなデータセットから、異なるサブグループごとに複数のモデルを実行します。
  2. これらのモデルをすぐに利用できるようにして、係数、精度などを調べられるようにします。
  3. 異なるグループごとに保存されたこのモデル リストから、対応するモデルを対応するテスト セット グループに適用できます。
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=.)
)
  1. ここまで来ましたが、対応するモデルを、対応するグループ化された値の「テスト」データセットに「マップ」する方法がわかりません。
  2. ここで、対応するグループのトレーニング データを使用して、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=.))
     )

繰り返しますが、これらの残差/トレーニング予測をトレーニング データセットに簡単に「マッピング」できる方法を探してから、対応するモデルを上で作成したような目に見えないテスト データセットに適用します。

ここには多くの約束があるので、それをまとめる方法がわかりません。

これは、多くの人がこのより「自動化された」方法で実行できるようにしたいと考えているタスクですが、代わりに、人々は非常にゆっくりと段階的に実行するものだと思います.

4

1 に答える 1