完全按照给定的概率采样向量
sample vector exactly according to the probability given
我相信 R 中应该有这个功能。但是,我找不到它。我需要的是根据给定的概率获得向量。我认为 sample
可以做到这一点,但这不是我真正想要的。
sample(c(1, 2, 3, 4), size = 4, prob=c(0.25, 0.25, 0.25, 0.25))
给予
# [1] 1 3 4 2
这是正确的。
那我试试
sample(c(1, 2, 3, 4), size = 8, replace = T, prob=c(0.25, 0.25, 0.25, 0.25))
# [1] 1 4 4 3 2 3 1 3
我真正需要的是
#[1] 1 4 4 2 2 3 1 3
或
#[1] 2 3 1 1 4 4 2 3
或者类似的东西,其中给定的向量完全根据给定的概率进行划分。因此,在给定的示例中,输出向量应包含 c(1, 2, 3, 4)
中每个向量的 0.25
。所以如果 size = 8
那么它的 0.25 就是 2,这应该是 c(1, 2, 3, 4)
中每个元素的长度。 R 中是否已经有一个函数用于此,或者我必须编写一个自定义函数?
由于您希望每个值的重复次数是确定性的,而不是随机的,因此使用 rep
(而不是 sample
)按照其在 [= 中的概率成比例地重复每个值14=]。然后你可以创建结果向量的随机排列。
x = c(1,2,3,4)
prob = c(0.1,0.2,0.3,0.4)
# Total sample size
n = 20
result = rep(x, round(n * prob))
[1] 1 1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 4 4
然后创建 100 个随机排列:
replicate(100, sample(result))
我相信 R 中应该有这个功能。但是,我找不到它。我需要的是根据给定的概率获得向量。我认为 sample
可以做到这一点,但这不是我真正想要的。
sample(c(1, 2, 3, 4), size = 4, prob=c(0.25, 0.25, 0.25, 0.25))
给予
# [1] 1 3 4 2
这是正确的。
那我试试
sample(c(1, 2, 3, 4), size = 8, replace = T, prob=c(0.25, 0.25, 0.25, 0.25))
# [1] 1 4 4 3 2 3 1 3
我真正需要的是
#[1] 1 4 4 2 2 3 1 3
或
#[1] 2 3 1 1 4 4 2 3
或者类似的东西,其中给定的向量完全根据给定的概率进行划分。因此,在给定的示例中,输出向量应包含 c(1, 2, 3, 4)
中每个向量的 0.25
。所以如果 size = 8
那么它的 0.25 就是 2,这应该是 c(1, 2, 3, 4)
中每个元素的长度。 R 中是否已经有一个函数用于此,或者我必须编写一个自定义函数?
由于您希望每个值的重复次数是确定性的,而不是随机的,因此使用 rep
(而不是 sample
)按照其在 [= 中的概率成比例地重复每个值14=]。然后你可以创建结果向量的随机排列。
x = c(1,2,3,4)
prob = c(0.1,0.2,0.3,0.4)
# Total sample size
n = 20
result = rep(x, round(n * prob))
[1] 1 1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 4 4
然后创建 100 个随机排列:
replicate(100, sample(result))