使用 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
。您可以指定一个额外的参数 prob
到 sample
,它指定每个元素的概率。例如,
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 无法比较。这是正常的,无需担心。
给定概率分布如下:
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
。您可以指定一个额外的参数 prob
到 sample
,它指定每个元素的概率。例如,
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 无法比较。这是正常的,无需担心。