私はいくつかのモデル適合をブートストラップし、毎回モデルを再実行することなく統計を計算しようとしています。最初のdo()
の中でr2を計算すると、これはうまくいくが、データにアクセスする方法を知りたい。グループごとのブートストラップと統計の計算
library(dplyr)
library(tidyr)
library(modelr)
library(purrr)
allmdls <-
mtcars %>%
group_by(cyl) %>%
do({
datsplit=crossv_mc(.,10)
mdls=list(map(datsplit$train, ~glm(hp~disp,data=.,family=gaussian(link='identity'))))
data_frame(datsplit=list(datsplit),mdls)
})
、今のようなもの:
allmdls %>%
by_slice(dmap,.f=map2_dbl(.$mdls,.$datsplit$test,rsquare))
が、私はcの
Error:
.y
is not a vector (NULL)
または
allmdls %>%
group_by(cyl) %>%
do({
map2_df(.x=.$mdls, .y=.$datsplit, .f=map2_dbl(.x=.x,.y=.y$test,.f=rsquare))
})
Error in map2_dbl(.x = .x, .y = .y$test, .f = rsquare) : object '.x' not found
を取得構文の権利を得ていないようです。
help? おかげ
EDIT:
mtcars %>%
group_by(cyl) %>%
do({
datplit=crossv_mc(.,10) %>%
mutate(mdls=map(train, ~glm(hp~disp,data=.)),
r2=map2_dbl(mdls,test,rsquare)
pctmae=map2_dbl(mdls,test,function(model,data) {mae(model,data)/mean(model$model$hp,na.rm=T)*100})
)
})
リストのこれらのリストはrealtivelyように見えますうまく動作しません。ネストされた 'map2'sで' mutate(allmdls、rsq = map2(mdls、map(datsplit、 "test")、〜map2(.x、.y、rsquare))) 'を実行して、リスト。もしあなたが 'at_depth'でもできることはあるかもしれませんが、このようなリストの複数のリストを使って作業するときは分かりません。 – aosmith
@aosmith私はあなたのソリューションのバリエーションを明らかにしました。これはより簡単で、インスピレーションのおかげでほとんど機能します。私はリストのリストが理想的ではないことに同意します。 引用符で "test"をどうやって知りましたか? – Dominik
クール、あなたは解決策としてそれを置くべきです。 'datsplit'からテストカラムをドル記号で表記し、括弧を取り除く' map(datsplit、 "test") 'は動作しませんでした。 'map'のドキュメンテーションは' .f'のためのこれのかなり良い説明をしています。 – aosmith