我想根据特定条件重复采样值。例如,我想创建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循环。有什么建议?
您可以对指标进行采样,该指标定义您从中绘制的分布。
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循环,但需要对更多随机变量进行采样。
如果次数百分比不是随机的,您可以绘制正确数量的每个分布,然后将结果洗牌:
n <- 100
A <- sample(c(rnorm(0.7*n, mean = 100, sd = 20), runif(0.3*n, min = 0, max = 1)))