2

使用数据集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

现在我有了参数alpha0beta0,我如何绘制 beta 分布,以便获得如下内容:

在此处输入图像描述

这个问题是基于我在这里阅读的一篇文章。

4

1 回答 1

3

所有代码,包括绘图代码,都可以在这里找到。以下代码用于获取请求的图:

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")

希望这可以帮助。

于 2017-08-12T08:07:30.257 回答