R-Как создать случайную выборку дискретных случайных величин?

В R я хочу создать случайную выборку дискретной случайной величины: X, где: P(X=a)=P(X=-a)=1/2. Я искал функцию в Интернете, но, похоже, нет никакой прямой функции.

Ответы

Ответ 1

Я думаю, что вы хотите сгенерировать образцы случайной величины Бернулли. Случайная величина Бернулли является частным случаем биномиальной случайной величины. Поэтому вы можете попробовать rbinom(N,1,p). Это сгенерирует N образцы со значением 1 с вероятностью p, значение 0 с вероятностью (1-p). Чтобы получить значения a и -a, вы можете использовать a*(2*rbinom(N,1,p)-1).

Ответ 2

1) Если вы используете sample, этого достаточно:

sample(c(-a,a),1)

например:.

 a <- 10
 sample(c(-a,a),1)
[1] -10

Попробуйте еще пару:

> sample(c(-a,a),1)
[1] -10
> sample(c(-a,a),1)
[1] 10

Works.

Если вам нужно попробовать несколько элементов, тогда установите replace=TRUE... здесь мы процитируем 12 раз:

 sample(c(-a,a),12,replace=TRUE)

 [1]  10  10 -10  10  10  10 -10 -10  10 -10  10 -10

2) вы можете использовать runif; здесь образец размера 9:

a <- 1
ifelse(runif(9)<.5,-a,a)

[1] -1  1 -1  1 -1  1 -1  1  1  

3) вы можете использовать rbinom; здесь образец размером 4:

a <- 6
ifelse(rbinom(4,1,.5),-a,a)

[1] -6  6 -6  6

Ответ 3

Или это:

> n=10
> X=rep(0,n)
> Y=rbinom(n,1,1/2)
> #Since they the probability is 1/2 for both cases, I assigned "a" when Y=1 and "-a" otherwise.
> X[Y==1]="a"
> X[Y==0]="-a"
> X
 [1] "a"  "-a" "a"  "a"  "a"  "-a" "a"  "-a" "-a" "-a"
> Y
 [1] 1 0 1 1 1 0 1 0 0 0
> 

Ответ 4

index <- sample(1,c(1,2),replace=T)
if (index == 1) {xx = a} else {xx = -a}

Каждая процедура генерации распределения начинается с использования $\ text {uniform} (0,1) $. Поскольку дискретные распределения намного проще сгенерировать с помощью $\ text {uniform} (0,1) $, люди не завершают функцию для них. Однако вы можете написать свою собственную функцию и просто забрать их в следующий раз, когда собираетесь их использовать.