使用 R 从给定的概率分布中抽样

Sampling from a given probability distribution using R

给定概率分布如下:

x-coordinate表示小时,y-coordinate表示每个小时的概率

问题是如何生成一组1000个服从概率分布的随机数据?

首先,建立一个描述这个概率分布的向量,然后使用样本:

distribution <- c( 2, 4, 4, rep(5, 7), rep(6, 14), rep(7, 29),
               rep(8, 23), rep(9, 7), rep(10, 4), rep(11, 3))
sample(distribution, 1000, replace=TRUE)

我在 11 之后留下了值,可能没有准确读取所有值,但你可以看到这个想法。分布向量可能更容易生成,具体取决于您的数据的格式,现在。

重要的功能是sample。您可以指定一个额外的参数 probsample,它指定每个元素的概率。例如,

sample(1:22,1000,replace=TRUE,prob=c(
  0,1,0,3,7,14,30,24,5,3,3,2,4,3,1,2,3,2,2,2,1,0
)

(将那串数字替换为您的条形高度)。 prob 参数不必总和为 1,R 会为您重新归一化它。

R 可能会生成一个警告,指出它正在使用 "Walker's Alias method",结果与旧版本的 R 无法比较。这是正常的,无需担心。