2014-04-04 50 views

Odpowiedz

18

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).

-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ć.

+1

Kod jest nieprawidłowy. Generuje tylko "a" –

2

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 
> 
7

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