R语言 使用阈值的整数差分采样

sycxhyv7  于 2023-05-04  发布在  其他
关注(0)|答案(2)|浏览(129)

我使用sample()来绘制1000个从1到120的整数。我预计大约77%的人会低于65岁的门槛。(即,77%在1-65之间均匀采样,其余23%从66-120均匀采样)。
我可以通过指定1到120的每个概率来以一种笨拙的方式做到这一点:

set.seed(123)
n <- 1000
mmax <- 120
thresh <- 65
probthresh <- 0.77

x <- sample(1:mmax, n,
            prob = c(rep(probthresh/thresh, thresh), 
                     rep((1 - probthresh)/(mmax - thresh), (mmax - thresh))),
            replace = TRUE)
table(x <= thresh)

# FALSE  TRUE 
#   226   774

正如您所看到的,prob语句非常不优雅,在更复杂的应用程序中可能无法安全地扩展。
我怎样才能根据这些约束在这个上下文中更恰当地画出整数呢?我不一定需要使用sample()

kulphzqa

kulphzqa1#

类似@MrFlick:

set.seed(123)
n <- 1000
mmax <- 120
thresh <- 65
probthresh <- 0.77

x <- sample(1:thresh, floor(n * probthresh), replace = TRUE) %>% #77% of integers below the threshold
  c(sample((thresh + 1):mmax, n - length(.), replace = TRUE)) #remaining integers uniformly from 66-120
  
table(x <= thresh)

FALSE  TRUE 
  230   770
mnemlml8

mnemlml82#

你可以有条件地在两个样本中选择一个。

x <- ifelse(runif(n) < probthresh, 
  sample(1:thresh, n, replace=TRUE), 
  sample((thresh+1):mmax, n, replace=TRUE)
)

相关问题