R-Как генерировать случайную выборку из дискретных случайных величин?
В R я хочу сгенерировать случайную выборку дискретной случайной величины: X
, где: P(X=a)=P(X=-a)=1/2
. Я искал функцию в интернете, но, кажется, нет никакой прямой функции, делающей это.
4 ответа:
Я думаю, что вы хотите сгенерировать образцы случайной величины Бернулли. Случайная величина Бернулли является частным случаем биномиальной случайной величины. Поэтому вы можете попробовать
rbinom(N,1,p)
. Это создастN
выборки, со значением1
с вероятностьюp
, значением0
с вероятностью(1-p)
. Для получения значенийa
и-a
можно использоватьa*(2*rbinom(N,1,p)-1)
.
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
Работает.
Если вам нужно выбрать более одного элемента, то установите
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
Или вот это:
> 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 >
index <- sample(1,c(1,2),replace=T) if (index == 1) {xx = a} else {xx = -a}
Каждая процедура генерации распределения начинается с использования $\text{uniform}(0,1)$. Поскольку дискретные распределения гораздо легче генерировать с помощью $\text{uniform} (0,1)$, люди не оборачивают функцию для них. Однако вы можете написать свою собственную функцию и просто взять их в следующий раз, когда вы собираетесь их использовать.