私の質問は末尾がで太字になっています。MASS :: fitdistrを複数のデータに係数で適用する
私はいくつかのデータにベータ版を適合させる方法を知っています。
得library(Lahman)
library(dplyr)
# clean up the data and calculate batting averages by playerID
batting_by_decade <- Batting %>%
filter(AB > 0) %>%
group_by(playerID, Decade = round(yearID - 5, -1)) %>%
summarize(H = sum(H), AB = sum(AB)) %>%
ungroup() %>%
filter(AB > 500) %>%
mutate(average = H/AB)
# fit the beta distribution
library(MASS)
m <- MASS::fitdistr(batting_by_decade$average, dbeta,
start = list(shape1 = 1, shape2 = 10))
alpha0 <- m$estimate[1]
beta0 <- m$estimate[2]
# plot the histogram of data and the beta distribution
ggplot(career_filtered) +
geom_histogram(aes(average, y = ..density..), binwidth = .005) +
stat_function(fun = function(x) dbeta(x, alpha0, beta0), color = "red",
size = 1) +
xlab("Batting average")
:例えば
を今、私は15枚のパラメータセットで終わるように、データの各batting_by_decade$Decade
列に異なるベータパラメータにalpha0
とbeta0
を計算すると、 15歳のベータ版で、10年前のこの打球の平均値に合わせることができます:
batting_by_decade %>%
ggplot() +
geom_histogram(aes(x=average)) +
facet_wrap(~ Decade)
私は、各十年のためのフィルタリング、およびfidistr
関数にデータの十年の価値を渡して、すべての数十年のためにこれを繰り返しますが、によってハードコードこれはすぐに十年ごとにすべてのベータパラメータを算出する方法がありますすることができますおそらく適用関数の1つを使って再現可能になるでしょうか?
私はこの回答が大好きです。私が作ったのははるかにエレガントです。下記を参照してください。ありがとうCMichael!私はあなたが割り当てられたパイプを終了できるかも知らなかった。とてもかっこいい。 –
ありがとうございます。私の生徒の一人が最初にパイプの最後で割り当てを使用したとき、私はあなたがそれを行うことができないとダンフォールディングされたときを思い出します。私はそれが本当にエレガントだと思う。また、大規模なデータシナリオではコストがかかる可能性がありますが、私のコードで重複した 'fitdistr'呼び出しを避ける方法が必要だと感じていますが、私はちょうどそれを考え出しませんでした;) – CMichael
パイプ上のstackoverflowドキュメントは、パイプの変形に関するセクション:https://stackoverflow.com/documentation/r/652/pipe-operators-and-others/13622/assignment-with – CMichael