2014-04-04 22 views

Trả lời

18

Tôi nghĩ bạn đang tìm cách tạo mẫu của biến ngẫu nhiên Bernoulli. Biến ngẫu nhiên Bernoulli là một trường hợp đặc biệt của một biến ngẫu nhiên nhị thức. Do đó, bạn có thể thử rbinom(N,1,p). Điều này sẽ tạo ra các mẫu N, với giá trị 1 với xác suất p, giá trị 0 với xác suất (1-p). Để nhận giá trị của a-a bạn có thể sử dụng a*(2*rbinom(N,1,p)-1).

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

Mỗi thủ tục tạo phân phối bắt đầu bằng cách sử dụng $ \ text {uniform} (0,1) $. Vì các bản phân phối rời rạc dễ tạo hơn với $ \ text {uniform} (0,1) $, nên mọi người không bao bọc chức năng cho chúng. Tuy nhiên, bạn có thể viết chức năng của riêng bạn và chỉ cần chọn chúng lên lần sau bạn sẽ sử dụng chúng.

+1

Mã này sai. Nó chỉ tạo ra 'a' –

2

Hoặc này:

> 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) Nếu bạn sử dụng sample, đây là đủ:

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

ví dụ .:

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

Hãy thử một vài:

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

Hoạt động.

Nếu bạn cần phải lấy mẫu nhiều hơn một phần tử, sau đó thiết lập replace=TRUE ... ở đây chúng tôi lấy mẫu 12 lần:

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

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

2) bạn có thể sử dụng runif; đây là mẫu có kích thước 9:

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

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

3) bạn có thể sử dụng rbinom; đây là mẫu có kích thước 4:

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

[1] -6 6 -6 6 
Các vấn đề liên quan