完全按照给定概率的样本向量

Ron*_*hah 5 r sample

我相信在 R 中应该有一个函数。但是,我找不到它。我需要的是根据给定的概率获得向量。我认为sample可以做到这一点,但这不是我真正想要的。

sample(c(1, 2, 3, 4), size = 4, prob=c(0.25, 0.25, 0.25, 0.25)) 
Run Code Online (Sandbox Code Playgroud)

# [1] 1 3 4 2
Run Code Online (Sandbox Code Playgroud)

哪个是正确的。

然后我试试

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
Run Code Online (Sandbox Code Playgroud)

我真正需要的是

#[1] 1 4 4 2 2 3 1 3
Run Code Online (Sandbox Code Playgroud)

或者

#[1] 2 3 1 1 4 4 2 3
Run Code Online (Sandbox Code Playgroud)

或类似的东西,其中给定的向量根据给定的概率精确划分。所以在给定的例子中,输出向量应该包含 中0.25的每个向量c(1, 2, 3, 4)。因此,如果其中的size = 80.25 是 2,这应该是c(1, 2, 3, 4). R 中是否已经为此提供了一个函数,或者我必须编写一个自定义函数?

eip*_*i10 5

由于您希望每个值的重复次数是确定性的,而不是随机的,因此请使用rep(而不是sample)按照每个值在 中的概率成比例地重复每个值prob。然后您可以创建结果向量的随机排列。

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
Run Code Online (Sandbox Code Playgroud)

然后创建 100 个随机排列:

replicate(100, sample(result))
Run Code Online (Sandbox Code Playgroud)

  • 我认为他们也希望它被置换,但只是用 `sample` 包装整个事情就可以解决这个问题 (2认同)