生成恰好 N 个元素在 Y 个容器中的正态分布

generate normal distribution with exactly N elements in Y bins

我可能会因为没有得到这个而责备自己:

如何在 Y 区间(nbins 在下面),正好 N 个元素。

像这样,如下图:

我知道我可以画画 rnorm(77),但那永远不会 完全 正常,并且循环超过 10.000 次左右的迭代似乎有点过分了。

所以我尝试使用 qnorm 来达到这个目的,但我有一种预感:

  1. 下面的代码有问题
  2. 必须有一种更简单、更优雅的方式

这是我得到的:

nbins <- 15
nstat <- 77

item.pos <- qnorm( # to the left of which value lies...
  1:(nstat) / (nstat+1)# ... the n-statement?
  # using nstat + 1 because we want midpoints, not cutoffs for later
)

bins <- cut(
  x = item.pos,
  breaks = nbins,
  ordered_result = TRUE
)

height <- summary(bins)
height <- as.numeric(bins)

如果您的数据范围来自 -2:2,间隔为 15,并且样本大小为 77,我会建议以下内容以获得 15 个间隔的预期高度:

rn <- dnorm(seq(-2,2, length = 15))/sum(dnorm(seq(-2,2, length = 15)))*77
 [1] 1.226486 2.084993 3.266586 4.716619 6.276462 7.697443 8.700123 9.062576 8.700123 7.697443
[11] 6.276462 4.716619 3.266586 2.084993 1.226486

这个条形图看起来像:

barplot(height = rn, names.arg = round(seq(-2, 2, length = 15), 2))

因此,在 77 的样本中,您将在 1.226486 中获得序列的第一个值,在 2.084993 中获得第二个值,等等。很难生成一个vector 如您在开头所述,因为上面的序列不包含整数。