来自两个分布之一的样本

时间:2019-03-18 10:07:22

标签: r probability sampling

我想根据特定条件重复采样值。例如,我想创建一个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循环。 有什么建议吗?

2 个答案:

答案 0 :(得分: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循环,而是需要对更多随机变量进行采样。

答案 1 :(得分:2)

如果时间百分比不是随机的,则可以绘制每个分布的正确数量,然后随机排列结果:

n <- 100
A <- sample(c(rnorm(0.7*n, mean = 100, sd = 20), runif(0.3*n, min = 0, max = 1)))