Образец из одного из двух дистрибутивов - PullRequest
1 голос
/ 18 марта 2019

Я хочу многократно выбирать значения на основе определенного условия.Например, я хочу создать образец из 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))
}

Я уверен, что есть другиеболее элегантные способы, без использования для цикла.Есть предложения?

Ответы [ 2 ]

4 голосов
/ 18 марта 2019

Вы можете выбрать индиктор, который определяет, из какого дистрибутива вы черпаете.

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 голосов
/ 18 марта 2019

Если процентное соотношение не случайно, вы можете нарисовать правильное количество каждого распределения, а затем перемешать результат:

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