来自两个发行版之一的示例

问题描述 投票:1回答:2

我想根据特定条件重复采样值。例如,我想创建100个值的样本。概率为0.7时,将从一个分布中采样,否则从另一个概率采样。

这是一种做我想要的方法:

set.seed(20)
A<-vector()

for (i in 1:100){
  A[i]<-ifelse(runif(1,0,1)>0.7,rnorm(1, mean = 100, sd = 20),runif(1, min = 0, max = 1))
}

我确信还有其他更优雅的方法,不使用for循环。有什么建议?

r probability sampling
2个回答
4
投票

您可以对指标进行采样,该指标定义您从中绘制的分布。

ind <- sample(0:1, size = 100, prob = c(0.3, 0.7), replace = TRUE)
A <- ind * rnorm(100, mean = 100, sd = 20) + (1 - ind) * runif(100, min = 0, max = 1)

在这种情况下,您不使用for循环,但需要对更多随机变量进行采样。


2
投票

如果次数百分比不是随机的,您可以绘制正确数量的每个分布,然后将结果洗牌:

n <- 100
A <- sample(c(rnorm(0.7*n, mean = 100, sd = 20), runif(0.3*n, min = 0, max = 1)))
© www.soinside.com 2019 - 2024. All rights reserved.