重量为1的采样

时间:2017-11-17 22:19:24

标签: r random

我想从一大堆数字中抽样,例如-2000:5000
我想将某个数字的权重设置为80% 其他所有可能性应该与其他所有数字相同。

为小样本做这件事很容易:
sample(-2:2, 10, replace = TRUE, prob=c(0.05, 0.05, 0.80, 0.05, 0.05))
这会输出:

  

[1] 0 0 0 0 0 -1 0 0 0 0

我如何为大量数字做到这一点?

2 个答案:

答案 0 :(得分:2)

只是务实地操纵你的概率向量。你有

values <- -2:2
special_value <- 0

然后你可以做

probs <- rep(1, length(values))
probs[values==special_value] <- (length(values )-1)*.8/(1-.8)

然后使用

sample(values, 10, replace = TRUE, prob=probs)

答案 1 :(得分:2)

您只需要运行具有所有概率的单独向量。接下来创建概率向量时,您可以使用逻辑测试来定义&#34; p1 = 0.8&#34;如果它是我想要的数字并且&#34; p2 = 0.2 / n&#34;在任何其他情况下。代码运行如下:

n <- 37 # your num
x <- -100:1000 # your sequence
probs <- ifelse(x == n, 0.8, (1 - 0.8) /length(x) ) # determine probabilities taking on account they have to add up to 1
sum(probs)
sample(x = x, size = 1000, prob = probs)

如果有帮助,请告诉我。