2015-02-16 6 views
3

Не удалось найти ответ на этот вопрос в R. Я хотел бы создать случайный образец от 0 до 1 'RandomSample'. Для каждого образца я хотел бы иметь определенное количество значений «numval», которое выводится из длины вектора «Prob». «Prob» дает мне значение вероятности, что каждая отдельная точка будет равна 0 или 1. Таким образом, в этом случае первое число будет иметь значение ошибки 0,9, равное 1, а 0,1 - 0. И так далее. Затем я хотел бы повторить случайное генерирование выборок 1000 раз. У меня есть сценарий (ниже), генерирующий случайные 0 и 1, но у меня отсутствует компонент, дающий значения вероятности. Помощь будет высоко ценится - Я довольно новыми для R.Создание случайных чисел (0 и 1) с заданными значениями вероятности в R

Prob <- c(0.9, 0.3, 0.6, 0.8, 0.23, 0.45, 0.1, 0.3, 0.5, 0.03) 
RandomSample <- list() 
zeroones <- c(0,1) 
rep = 1000 
numval <- length(Prob) 

for (i in 1:rep) RandomSample[[i]] <- c(sample(zeroones,numval,replace = TRUE)) 
t(sapply(RandomSample, unlist, simplify = TRUE)) 
+0

попробуйте этот 'for (i in 1: rep) RandomSample [[i]] <- c (sample (zeroones, numval, prob = Prob [i], replace = TRUE))' – Sangram

+0

перед тем, как вы перейдете к stackoverflow, вы можете попробовать простой «образец» в вашем приглашении. он дает вам документацию, в которой четко определяется, как установить вероятность ваших случайных величин. – Jason

ответ

8

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

Попробуйте это:

prob <- c(0.9, 0.3, 0.6, 0.8, 0.23, 0.45, 0.1, 0.3, 0.5, 0.03) 
rbinom(length(prob), size = 1, prob=prob) 

[1] 1 1 1 0 0 0 0 1 0 0 

Чтобы продемонстрировать, что вероятности в том, что вы после этого, попробуйте использовать replicate() повторно берут образцы, используя ваши вероятности:

x <- t(replicate(100, rbinom(length(prob), size = 1, prob=prob))) 
head(x) 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 1 0 1 1 1 1 0 0 1  0 
[2,] 1 1 1 1 0 1 0 1 0  0 
[3,] 1 0 1 1 0 0 0 1 0  0 
[4,] 1 0 1 0 0 1 0 0 1  0 
[5,] 1 1 1 1 0 0 0 0 0  0 
[6,] 1 0 0 0 0 0 0 0 0  0 

Теперь вы можете использовать colMeans() для сравнения фактической достигнутой вероятности по вашей спецификации:

colMeans(x) 
[1] 0.93 0.28 0.61 0.67 0.25 0.43 0.11 0.29 0.40 0.01 
+0

Если вам нужно 1000 итераций этого, вам нужно будет как-то повторить 'rbinom()'. Вы можете следовать коду @ Andrie и добавить 'rep (rbinom (...), 1000)' к этому. Я также показал несколько иной способ вернуть 1000 экземпляров этого. – User7598

0

Вы можете использовать rbinom():

Prob <- c(0.9, 0.3, 0.6, 0.8, 0.23, 0.45, 0.1, 0.3, 0.5, 0.03) #specify vector of probabilities 
niter<- 1000 #number of iterations 
randomSample<-rbinom(niter,1,prob=rep(Prob,niter)) #randomly sample from binomial with vector of probabilities. 

 Смежные вопросы

  • Нет связанных вопросов^_^