0

以下は、data2 としてのサンプル データです。

lvl x y 0 20.099 21.2 100 21.133 21.4 250 20.866 21.6 500 22.679 21.8 750 22.737 22.1 0 30.396 32.0 100 31.373 32.1 250 31.303 32.2 500 33.984 32.8 750 44.563 38.0 0 22.755 18.5 100 23.194 18.8 250 23.263 20.5 500 23.061 27.9 750 25.678 36.4

次のコード行で各レベル (lvl) の rmse と r2 をそれぞれ取得しようとしましたが、rmse の data2 %>% group_by(lvl) %>% summarise_each(funs(rmse(data2$x~data2$y)))計算summary(lm(data2$x,data2$y))$r.squared時に次のエラー メッセージが表示されました。

エラー: 引数「obs」がありません。デフォルトはありません

# A tibble: 5 x 3 lvl x y <int> <dbl> <dbl> 1 0 0.6639888 0.6639888 2 100 0.6639888 0.6639888 3 250 0.6639888 0.6639888 4 500 0.6639888 0.6639888 5 750 0.6639888 0.6639888

r2を計算するとき。

各レベルの rmse と r2 を集計したかったのです。この場合、レベルは 5 つしかありません。したがって、答えは 5 行 X 3 列で、列名が「lvl」、「rmse」、「r2」のようになります。よろしくお願いします。

4

2 に答える 2

1
## split your data2 into a list by the levels of the factor and then use lapply
list_of_rsquared <- lapply(split(data2, data2$lvl), function (z) {
  summary(lm(x ~ y, data = z))$r.squared
}
)

## you will get a list of r.squared for each level . Now you can simply rbind the list of r.squared.
rsquared_vals <- do.call("rbind", list_of_rsquared)

RMSE にも同じアプローチを使用できます。(上記の式を使用しているだけなので、RMSE? という関数を作成したと仮定しています)

list_of_rmse <- lapply(split(data2, data2$lvl), function (z) { sqrt(mean((z$x - z$y)^2)) } )

rmse_vals <- do.call("rbind", list_of_rmse)

cbind今必要な 3 つの列すべてを使用できます。

cbind(data2$lvl, rsquared_vals, rmse_vals)
于 2016-11-16T22:10:09.353 に答える