r语言 - 用 1 个数字的权重进行采样



我想从一大堆数字中采样,例如 -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

如何对大范围的数字执行此操作?

只需务实地操作您的概率向量。所以你有

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)

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

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)

让我知道它是否有帮助。

最新更新