生成恰好 N 个元素在 Y 个容器中的正态分布
generate normal distribution with exactly N elements in Y bins
我可能会因为没有得到这个而责备自己:
如何在 Y 区间(nbins
在下面),正好 N 个元素。
像这样,如下图:
- Y 或
nbins
= 15
- N 或
nstat
= 77
- ... 应该 return 类似于:c(1,1,2,4, ...)
我知道我可以画画 rnorm(77)
,但那永远不会 完全 正常,并且循环超过 10.000 次左右的迭代似乎有点过分了。
所以我尝试使用 qnorm
来达到这个目的,但我有一种预感:
- 下面的代码有问题
- 必须有一种更简单、更优雅的方式
这是我得到的:
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 如您在开头所述,因为上面的序列不包含整数。
我可能会因为没有得到这个而责备自己:
如何在 Y 区间(nbins
在下面),正好 N 个元素。
像这样,如下图:
- Y 或
nbins
= 15 - N 或
nstat
= 77 - ... 应该 return 类似于:c(1,1,2,4, ...)
我知道我可以画画 rnorm(77)
,但那永远不会 完全 正常,并且循环超过 10.000 次左右的迭代似乎有点过分了。
所以我尝试使用 qnorm
来达到这个目的,但我有一种预感:
- 下面的代码有问题
- 必须有一种更简单、更优雅的方式
这是我得到的:
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 如您在开头所述,因为上面的序列不包含整数。