如何绘制以相同均值为中心的二项式 PDF 分布

How to plot binomial PDF distributions centered on same mean

我正在尝试绘制一些二项式分布,并表明随着 N 的增加,曲线看起来越来越像正态分布。我试过使用 dbinom,但这是我得到的:

这是我用来生成此发行版的代码:

x <- -5:250
y10 <- dbinom(x, 10, 0.5)
y30 <- dbinom(x, 30, 0.5)
y60 <- dbinom(x, 60, 0.5)
y100 <- dbinom(x, 100, 0.5)
ynorm <- dnorm(x, mean=-1, sd=1)

y10 <- y10 * sqrt(y10) / 0.8
y30 <- y30 * sqrt(y30) / 0.8
y60 <- y60 * sqrt(y60) / 0.8
y100 <- y100 * sqrt(y100) / 0.8

y10 <- y10[7:17]
y30 <- y30[17:27]
y60 <- y60[32:42]
y100 <- y100[52:62]

plot(range(0, 10), range(0, 0.5), type = "n")]
lines(ynorm, col = "red", type = "l")
lines(y10, col = "blue", type = "l")
lines(y30, col = "orange", type = "l")
lines(y60, col = "green", type = "l")
lines(y100, col = "yellow", type = "l")

有谁知道如何在 R 中正确调整二项分布?

理论上 1000 的 N 应该使它看起来像正态分布,但我不知道如何到达那里,我已经 tried/failed 使用 ggplot2 :(

您可以重新缩放 x 值,以便 x==0 始终出现在每个二项式密度的峰值密度处。您可以通过找到每个密度的密度最大时的 x 值来完成此操作。例如:

library(ggplot2)
theme_set(theme_classic())
library(dplyr)

x <- -5:250
n = c(6,10,30,60,100)
p = 0.5

binom = data.frame(x=rep(x, length(n)), 
                   y=dbinom(x, rep(n, each=length(x)), p),
                   n=rep(n, each=length(x)))

ggplot(binom %>% filter(y > 1e-5) %>% 
         group_by(n) %>%
         mutate(x = x - x[which.max(y)]), 
       aes(x, y, colour=factor(n))) +
  geom_line() + geom_point(size=0.6) +
  labs(colour="n")

参考您的评论,这是一种在二项式密度之外添加正态密度的方法:二项式分布的均值是 n*p,其中 n 是试验次数p 是成功的概率。方差为 n*p*(1-p)。因此,对于上面的每个二项式密度,我们需要具有相同均值和方差的正态密度。我们在下面创建了一个数据框,然后将二项式和正态密度绘制在一起。

首先,创建一个新的包含更高密度点的 x 值向量,以反映正态分布是连续的,而不是离散的:

x = seq(-5,250,length.out=2000)

现在我们创建一个正态密度的数据框,其均值和方差与上面的二项式密度相同:

normal=data.frame(x=rep(x, length(n)),
                  y=dnorm(x, rep(n,each=length(x))*p, (rep(n, each=length(x))*p*(1-p))^0.5),
                  n=rep(n, each=length(x)))

# Cut off y-values below ymin
ymin = 1e-3

所以现在我们有两个数据框要绘制。我们仍然在 ggplot 的主调用中添加 binom 数据框。但在这里我们还添加了对 geom_line 的调用以绘制正态密度。我们给 geom_line normal 数据框。此外,对于此图,我们使用 geom_segment 来强调二项式密度的离散点(您也可以为此使用 geom_bar)。

ggplot(binom %>% filter(y > ymin), aes(x, y)) +
  geom_point(size=1.2, colour="blue") +
  geom_line(data=normal %>% filter(y > ymin), lwd=0.7, colour="red") +
  geom_segment(aes(x=x, xend=x, y=0, yend=y), lwd=0.8, alpha=0.5, colour="blue") +
  facet_grid(. ~ n, scales="free", space="free")

这是新情节的样子。您可以通过多种方式更改缩放比例,并且可能还有许多其他方法可以对其进行调整,具体取决于您想要强调的内容。