W R, chcę wygenerować losową próbkę dyskretnej zmiennej losowej: X
, gdzie: P(X=a)=P(X=-a)=1/2
. Szukałem funkcji online, ale wydaje mi się, że nie ma takiej bezpośredniej funkcji.R-Jak wygenerować losową próbkę dyskretnych zmiennych losowych?
Odpowiedz
Myślę, że szukasz generowania próbek losowej zmiennej Bernoulliego. Zmienna losowa Bernoulliego jest szczególnym przypadkiem dwumianowej zmiennej losowej. Dlatego możesz spróbować rbinom(N,1,p)
. Spowoduje to wygenerowanie próbek N
o wartości 1
z prawdopodobieństwem p
, wartości 0
z prawdopodobieństwem (1-p)
. Aby uzyskać wartości a
i -a
, możesz użyć a*(2*rbinom(N,1,p)-1)
.
index <- sample(1,c(1,2),replace=T)
if (index == 1) {xx = a} else {xx = -a}
Każda procedura generowania dystrybucji rozpoczyna się od użycia $ \ text {uniform} (0,1) $. Ponieważ dyskretne dystrybucje są znacznie łatwiejsze do wygenerowania za pomocą $ \ text {uniform} (0,1) $, ludzie nie pakują dla nich funkcji. Możesz jednak napisać własną funkcję i po prostu odebrać je następnym razem, gdy będziesz z nich korzystać.
Albo to:
> 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
>
1) Jeśli używasz sample
, to wystarczy:
sample(c(-a,a),1)
np .:
a <- 10
sample(c(-a,a),1)
[1] -10
Spróbuj inną parę:
> sample(c(-a,a),1)
[1] -10
> sample(c(-a,a),1)
[1] 10
Działa.
Jeśli chcesz spróbować więcej niż jeden element, a następnie ustawić replace=TRUE
... tu skosztować 12 razy:
sample(c(-a,a),12,replace=TRUE)
[1] 10 10 -10 10 10 10 -10 -10 10 -10 10 -10
2) można użyć runif
; oto próbka wielkości 9:
a <- 1
ifelse(runif(9)<.5,-a,a)
[1] -1 1 -1 1 -1 1 -1 1 1
3) można wykorzystać rbinom
; Oto próbka o rozmiarze 4:
a <- 6
ifelse(rbinom(4,1,.5),-a,a)
[1] -6 6 -6 6
Kod jest nieprawidłowy. Generuje tylko "a" –