在 R 中绘制 beta 分布
Plot beta distribution in R
使用数据集 Lahman::Batting
我已经估计了 beta 分布 的参数。现在我想 将这个根据经验得出的 beta 分布绘制到我根据 估计的直方图上。
library(dplyr)
library(tidyr)
library(Lahman)
career <- Batting %>%
filter(AB > 0) %>%
anti_join(Pitching, by = "playerID") %>%
group_by(playerID) %>%
summarize(H = sum(H), AB = sum(AB)) %>%
mutate(average = H / AB)
我可以将 RBI 的分布绘制为:
career %>%
filter(AB > 500) %>%
ggplot(aes(x = average)) +
geom_histogram() +
geom_freqpoly(color = "red")
并获得:
我知道我可以使用+ geom_freqpoly
获得:
但我想要平滑的 beta 分布。我可以通过以下方式估算 beta 参数:
career_filtered <- career %>%
filter(AB >= 500)
m <- MASS::fitdistr(career_filtered$average, dbeta,
start = list(shape1 = 1, shape2 = 10))
alpha0 <- m$estimate[1] # parameter 1
beta0 <- m$estimate[2] # parameter 2
现在我有了参数 alpha0
和 beta0
,我该如何绘制 beta 分布以便获得如下内容:
此问题基于 post 我正在阅读 here。
所有代码,包括绘图的代码,都可以找到 here。以下代码用于获取请求的绘图:
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")
希望对您有所帮助。
使用数据集 Lahman::Batting
我已经估计了 beta 分布 的参数。现在我想 将这个根据经验得出的 beta 分布绘制到我根据 估计的直方图上。
library(dplyr)
library(tidyr)
library(Lahman)
career <- Batting %>%
filter(AB > 0) %>%
anti_join(Pitching, by = "playerID") %>%
group_by(playerID) %>%
summarize(H = sum(H), AB = sum(AB)) %>%
mutate(average = H / AB)
我可以将 RBI 的分布绘制为:
career %>%
filter(AB > 500) %>%
ggplot(aes(x = average)) +
geom_histogram() +
geom_freqpoly(color = "red")
并获得:
我知道我可以使用+ geom_freqpoly
获得:
但我想要平滑的 beta 分布。我可以通过以下方式估算 beta 参数:
career_filtered <- career %>%
filter(AB >= 500)
m <- MASS::fitdistr(career_filtered$average, dbeta,
start = list(shape1 = 1, shape2 = 10))
alpha0 <- m$estimate[1] # parameter 1
beta0 <- m$estimate[2] # parameter 2
现在我有了参数 alpha0
和 beta0
,我该如何绘制 beta 分布以便获得如下内容:
此问题基于 post 我正在阅读 here。
所有代码,包括绘图的代码,都可以找到 here。以下代码用于获取请求的绘图:
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")
希望对您有所帮助。