我的問題是在的末尾加粗。通過一個因子將MASS :: fitdistr應用於多個數據
我知道如何使beta分佈適合某些數據。例如:
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")
其中產量:
現在我想計算不同的測試參數alpha0
和beta0
對數據的每個batting_by_decade$Decade
列,這樣我結束了15個參數集,和15個分佈,我可以適應這個ggplot打擊平均面Decade:
batting_by_decade %>%
ggplot() +
geom_histogram(aes(x=average)) +
facet_wrap(~ Decade)
我可以通過過濾每一個十年,並通過數據的十年的身價進入fidistr
功能,重複此爲所有幾十年,但硬編碼,這是有快速計算每十年所有測試參數的方法並可重複,也許與其中一個應用功能?
我很喜歡這個答案。這是我所做的更優雅,見下文。謝謝CMichael!我也不知道你可以結束任務。很酷。 –
謝謝 - 我記得當我的一個學生第一次使用管道末端的作業時,我很沮喪地說你可以做到這一點。我認爲它非常優雅。另外,我覺得應該有一種方法避免在我的代碼中重複執行'fitdistr'調用,這在大數據場景中可能很昂貴,但我只是沒有想到;) – CMichael
雖然停止了有關管道的stackoverflow文檔,但有一個很好的部分管道變種:https://stackoverflow.com/documentation/r/652/pipe-operators-and-others/13622/assignment-with – CMichael