Làm cách nào để tạo chuỗi


11

Tôi biết cách tạo chuỗi ±1 với giá trị trung bình 0 . Ví dụ: trong Matlab, nếu tôi muốn tạo một ±1 có độ dài 10000 , thì đó là:

2*(rand(1, 10000, 1)<=.5)-1

Tuy nhiên, làm thế nào để tạo một ±1 với giá trị trung bình 0.05 , nghĩa là với 1 được ưu tiên hơn một chút?

Câu trả lời:


18

Giá trị trung bình mong muốn của bạn được đưa ra bởi phương trình:

NpN(1p)N=.05

từ đó suy ra rằng xác suất của các 1snên.525

Trong Python:

x = np.random.choice([-1,1], size=int(1e6), replace = True, p = [.475, .525])

Bằng chứng:

x.mean()
0.050742000000000002

1'000 thí nghiệm với 1'000'000 mẫu 1s và -1s: nhập mô tả hình ảnh ở đây

Vì lợi ích của sự hoàn chỉnh (mũ cho @Elvis):

import scipy.stats as st
x = 2*st.binom(1, .525).rvs(1000000) - 1
x.mean()
0.053859999999999998

1'000 thí nghiệm với 1'000'000 mẫu 1s và -1s:

nhập mô tả hình ảnh ở đây

Và cuối cùng rút ra từ phân phối đồng đều, như được đề xuất bởi @ ukasz Deryło (cũng, trong Python):

u = st.uniform(0,1).rvs(1000000)
x = 2*(u<.525) -1
x.mean()
0.049585999999999998

1'000 thí nghiệm với 1'000'000 mẫu 1s và -1s:

nhập mô tả hình ảnh ở đây

Cả ba trông giống hệt nhau!

BIÊN TẬP

Vài dòng trên định lý giới hạn trung tâm và sự lan truyền của các phân phối kết quả.

Trước hết, các phương tiện thực sự tuân theo Phân phối chuẩn.

Thứ hai, @Elvis trong nhận xét của mình cho câu trả lời này đã thực hiện một số tính toán tốt về mức độ lan truyền chính xác của phương tiện được rút ra từ hơn 1000 thí nghiệm (khoảng (0,048; 0,052)), khoảng tin cậy 95%.

Và đây là kết quả mô phỏng, để xác nhận kết quả của anh ấy:

mn = []
for _ in range(1000):
    mn.append((2*st.binom(1, .525).rvs(1000000) - 1).mean())
np.percentile(mn, [2.5,97.5])
array([ 0.0480773,  0.0518703])

Công việc tốt. Quan điểm của tôi với Bernoulli là giảm câu hỏi thành phân phối xác suất nổi tiếng; từ quan điểm 'triển khai', câu trả lời của bạn và Łukasz 'là hoàn hảo.
Elvis

Không đùa đâu, của bạn là khoa học nhất và tốt nhất! ;) Tôi đã suy nghĩ về phân phối Binomial trong nửa giây nhưng điều đó không đủ để biến nó thành -1 và 1, vì vậy tôi đã mượn giải pháp của bạn "như hiện tại", cảm ơn!
Sergey Bushmanov

1
Vì vậy, với các ký hiệu của tôi, và độ lệch chuẩn của là . Khi bạn lấy giá trị trung bình trên mẫu, độ lệch chuẩn là và 95% phương tiện được tính phải nằm trong khoảng , đó là . Toán kiểm tra! ;)var(Y)=4var(X)=4p(1p)=0.9975Y0.9991060.999×1030.05±1.96×0.999×103(0.048;0.052)
Elvis

12

Một biến có giá trị và có dạng với a Bernoulli với tham số . Giá trị mong đợi của nó là , vì vậy bạn biết cách lấy (ở đây ).11Y=2X1XpE(Y)=2E(X)1=2p1pp=0.525

Trong R, bạn có thể tạo các biến Bernoulli với rbinom(n, size = 1, prob = p), ví dụ:

x <- rbinom(100, 1, 0.525)
y <- 2*x-1

5

Tạo mẫu đồng nhất từ , mã hóa lại các số thấp hơn 0,525 đến 1 và phần còn lại thành -1.N[0,1]

Sau đó, giá trị mong đợi của bạn là

10.525+(1)(10.525)=0.5250.475=0.05

Tôi không phải là người dùng Matlab, nhưng tôi đoán nó sẽ bị lừa

2*(rand(1, 10000, 1)<=.525)-1

2
Đó là một cách chính xác để sử dụng lấy mẫu biến đổi nghịch đảo ở đây.
Tim

Typose cố định bây giờ.
Łukasz Deryło

4

Bạn cần tạo nhiều hơn 1 giây. Chính xác, thêm 5% 1 giây vì bạn muốn giá trị trung bình của mình là 0,05. Vì vậy, bạn tăng xác suất 1s lên 2,5% và giảm -1 giây lên 2,5%. Trong mã của bạn, nó tương đương với việc thay đổi 0.5thành 0.525, tức là từ 50% đến 52,5%


2

Chỉ trong trường hợp bạn muốn có CHÍNH XÁC 0,05 nghĩa là bạn có thể thực hiện tương đương với mã R sau trong MATLAB:

sample(c(rep(-1, 95*50), rep(1, 105*50)))

-1 câu trả lời này là sai! Điều duy nhất mà mã này làm là nó ngẫu nhiên hoán vị vectơ tĩnh của các giá trị. Đầu ra không phải là ngẫu nhiên!
Tim

2
@Tim Tại sao nó không hoạt động? Nó trả về một danh sách -1 và 1 theo thứ tự ngẫu nhiên với số lượng được thiết kế để đảm bảo giá trị trung bình chính xác là 0,05.
ddunn801

1
@Tim Giải pháp này là ngẫu nhiên. Bạn đã thử chạy nó nhiều lần?
whuber

@whuber đây giống như giải pháp được đề xuất bởi Amos Coats, sự khác biệt duy nhất là hoán vị các giá trị. Tính chất thống kê của mẫu như vậy sẽ có tính xác định và không đổi.
Tim

3
@Tim Tôi nghĩ rằng bạn có thể đang đọc một số giả định không chính đáng cho câu hỏi này không được thực hiện rõ ràng. Mặc dù tần số - và do đó tất cả các khoảnh khắc - của chính mẫu không có thứ tự sẽ không đổi, rất nhiều "thuộc tính thống kê" của chuỗi được tạo sẽ thay đổi ngẫu nhiên. Vì ví dụ trong câu hỏi tạo ra một mảng và các mảng không được đặt - vấn đề thứ tự trong một mảng - tôi nghĩ cách giải thích này là một công bằng (và nó làm sáng tỏ câu hỏi). "Giải pháp" được đăng bởi Coats, mặt khác, là một trò đùa hay - nhưng SE không thích đùa.
whuber
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.