Mô phỏng biến Bernoulli với xác suất bằng cách sử dụng đồng xu thiên vị


9

Ai đó có thể cho tôi biết cách mô phỏng , trong đó , sử dụng tung đồng xu (bao nhiêu lần bạn yêu cầu) với ?a,bNP(H)=pBernoulli(ab)a,bNP(H)=p

Tôi đã nghĩ đến việc sử dụng lấy mẫu từ chối, nhưng không thể đóng nó xuống.


1
Đây có phải là một câu hỏi ban đầu từ một khóa học hoặc sách giáo khoa? Nếu vậy, xin vui lòng thêm [self-study]thẻ và đọc wiki của nó . Lưu ý rằng không cần phải đưa ra lời cầu xin giúp đỡ vào cuối câu hỏi của bạn - chúng tôi biết rằng tất cả những người đăng bài ở đây đều hy vọng được giúp đỡ!
Cá bạc

1
Có một bài viết xuất sắc của @Glen_b ở đây ở đâu đó (mặc dù tôi không thể nhớ ở đâu) về lý do tại sao không có thứ gọi là "đồng xu thiên vị với xác suất ", nhưng tôi biết đây chỉ là vấn đề ngoại biên đối với câu hỏi của bạn! p
Cá bạc

2
@dsaxton Câu hỏi cho biết "nhiều như bạn yêu cầu"; nó sẽ hữu hạn với xác suất 1, nhưng không bị giới hạn (bạn có thể vượt quá bất kỳ số lần tung cố định nào) nhưng việc phản đối trên cơ sở đó sẽ giống như nói "tung đồng xu công bằng cho đến khi bạn nhận được đầu" không khả thi như một phương pháp để tạo hình học ( số ngẫu nhiên.12
Glen_b -Reinstate Monica

1
@AbracaDabra Đây có phải là một bài tập cho một lớp học? Nếu không, làm thế nào nó phát sinh?
Glen_b -Reinstate Monica

1
@Glen_b: Đây không phải là bài tập trong lớp của tôi. Nó chỉ xảy ra với tôi trong chuỗi suy nghĩ này ...: Theo xác suất cổ điển, hãy kiếm một đồng tiền công bằng, khi bạn tăng số lần tung, tỷ lệ hội tụ một nửa. Vì vậy, nó cũng đúng với những người thiên vị ... Điều đó có nghĩa là để một đồng xu hội tụ đến một số cụ thể, bạn cần là số đó. Bây giờ tôi nghĩ, điều gì sẽ xảy ra nếu chúng ta muốn tạo ra một số, nhưng chúng ta có một đồng xu với một số khác (được biết hoặc chưa biết)? P(H)P(H)#Heads#tailsP(H)P(H)
AbracaDabra

Câu trả lời:


8

Bởi vì có vô số giải pháp, chúng ta hãy tìm một giải pháp hiệu quả .

Ý tưởng đằng sau ý tưởng này bắt đầu với một cách tiêu chuẩn để thực hiện biến Bernoulli: so sánh biến ngẫu nhiên thống nhất với tham số . Khi , trả về ; nếu không, trả về .a / b U < a / b 1 0Ua/bU<a/b10

Chúng ta có thể sử dụng -coin như một trình tạo số ngẫu nhiên thống nhấtp . Để tạo số đồng đều trong bất kỳ khoảng , hãy lật đồng xu. Khi nó đứng đầu, đệ quy tạo một giá trị đồng nhất trong phần đầu tiên của khoảng; khi đuôi của nó, tạo đệ quy từ phần cuối cùng của khoảng. Tại một số điểm, khoảng thời gian mục tiêu sẽ trở nên nhỏ đến mức không thực sự quan trọng bằng cách bạn chọn một số từ nó: đó là cách đệ quy bắt đầu. Rõ ràng quy trình này tạo ra các biến thiên đồng nhất (lên đến bất kỳ độ chính xác mong muốn nào), như dễ dàng được chứng minh bằng cảm ứng.[ x , y ) X p X 1 - pU[x,y)XpX1p

Ý tưởng này không hiệu quả, nhưng nó dẫn đến một phương pháp hiệu quả. Vì ở mỗi giai đoạn bạn sẽ rút một số từ một khoảng nhất định , tại sao trước tiên không kiểm tra xem bạn có cần vẽ nó không? Nếu giá trị mục tiêu của bạn nằm ngoài khoảng này, bạn đã biết kết quả so sánh giữa giá trị ngẫu nhiên và mục tiêu. Do đó, thuật toán này có xu hướng chấm dứt nhanh chóng. (Điều này có thể được hiểu là quy trình lấy mẫu từ chối được yêu cầu trong câu hỏi.)[x,y)

Chúng ta có thể tối ưu hóa thuật toán này hơn nữa. Ở bất kỳ giai đoạn nào, chúng tôi thực sự có hai đồng tiền mà chúng tôi có thể sử dụng: bằng cách dán lại đồng tiền của chúng tôi, chúng tôi có thể biến nó thành một đồng tiền có cơ hội . Do đó, như một sự tính toán trước, chúng tôi có thể chọn đệ quy bất kỳ việc dán lại nào dẫn đến số lần lật dự kiến ​​thấp hơn cần thiết để chấm dứt. (Tính toán này có thể là một bước đắt tiền.)1p

Ví dụ: không hiệu quả khi sử dụng đồng xu có để mô phỏng biến Bernoulli trực tiếp: trung bình phải mất gần mười lần lật. Nhưng nếu chúng ta sử dụng đồng xu , thì chỉ trong hai lần lật, chúng tôi chắc chắn sẽ hoàn thành và số lần lật dự kiến ​​chỉ là .( 0,01 ) p = 1 - 0,0 = 0,1 1,2p=0.9(0.01)p=10.0=0.11.2

Đây là những thông tin chi tiết.

Phân vùng bất kỳ khoảng thời gian nửa mở thành các khoảngI=[x,y)

[x,y)=[x,x+(yx)p)[x+(yx)p,y)=s(I,H)s(I,T).

Điều này xác định hai phép biến đổi và hoạt động trên các khoảng thời gian nửa mở.s ( , T )s(,H)s(,T)

Là một vấn đề về thuật ngữ, nếu là bất kỳ tập hợp số thực nào, hãy để biểu thứcI

t<I

có nghĩa là là một giới hạn thấp hơn cho : cho tất cả . Tương tự như vậy, có nghĩa là là một trên ràng buộc đối với .tIt<xxIt>ItI

Viết . (Trên thực tế, sẽ không có gì khác biệt nếu là thực tế thay vì hợp lý; chúng tôi chỉ yêu cầu )a/b=tt0t1

Đây là thuật toán để tạo ra một biến thiên với tham số Bernoulli mong muốn:Z

  1. Đặt và .n=0In=I0=[0,1)

  2. While {Tung đồng xu để tạo . Đặt Tăng .}(tIn)Xn+1In+1=S(In,Xn+1).n

  3. Nếu thì đặt . Mặt khác, đặt . Z = 1 Z = 0t>In+1Z=1Z=0


Thực hiện

Để minh họa, đây là một Rtriển khai của alorithm là hàm draw. Đối số của nó là giá trị đích và khoảng , ban đầu . Nó sử dụng chức năng phụ trợ thực hiện . Mặc dù không cần thiết, nhưng nó cũng theo dõi số lần tung đồng xu. Nó trả về biến ngẫu nhiên, số lần tung và khoảng thời gian cuối cùng mà nó kiểm tra.[ x , y ) [ 0 , 1 ) st[x,y)[0,1)ss

s <- function(x, ab, p) {
  d <- diff(ab) * p
  if (x == 1) c(ab[1], ab[1] + d) else c(ab[1] + d, ab[2])
}
draw <- function(target, p) {
  between <- function(z, ab) prod(z - ab) <= 0
  ab <- c(0,1)
  n <- 0
  while(between(target, ab)) {
    n <- n+1; ab <- s(runif(1) < p, ab, p)
  }
  return(c(target > ab[2], n, ab))
}

Để làm ví dụ về việc sử dụng và kiểm tra độ chính xác của nó, hãy lấy trường hợp và . Chúng ta hãy vẽ giá trị bằng thuật toán, báo cáo giá trị trung bình (và sai số chuẩn của nó) và cho biết số lần lật trung bình được sử dụng.p = 0,9 10 , 000t=1/100p=0.910,000

target <- 0.01
p <- 0.9
set.seed(17)
sim <- replicate(1e4, draw(target, p))

(m <- mean(sim[1, ]))                           # The mean
(m - target) / (sd(sim[1, ]) / sqrt(ncol(sim))) # A Z-score to compare to `target`
mean(sim[2, ])                                  # Average number of flips

Trong mô phỏng này, trong số các lần lật là đầu. Mặc dù thấp hơn mục tiêu , nhưng điểm Z của không đáng kể: độ lệch này có thể được quy cho sự may rủi. Số lần lật trung bình là - ít hơn mười. Nếu chúng ta đã sử dụng xu, giá trị trung bình có thể đã được --still không khác so với mục tiêu đáng kể, nhưng chỉ có flips sẽ bị cần thiết trên mức trung bình.0.01 - 0,5154 9,886 1 - p 0,0094 1,1770.00950.010.51549.8861p0.00941.177


Tôi không thể không thấy những điểm tương đồng giữa giải pháp này và Giải pháp 2 trong câu trả lời của tôi. Trong khi tôi giả sử một đồng tiền không thiên vị (giải pháp PS thực sự thú vị cho vấn đề tiền xu thiên vị) và thực hiện tất cả các phép tính / so sánh trong cơ sở 2, bạn thực hiện tất cả các tính toán / so sánh trong cơ sở 10. Bạn nghĩ gì?
Cam.Davidson.Pilon

1
@cam Tôi nghĩ rằng bạn có thể bị lừa dối bởi các ví dụ của tôi: mặc dù họ sử dụng các số đẹp trong cơ sở 10, việc xây dựng không có gì để làm với bất kỳ cơ sở cụ thể nào.
whuber

2
(+1) Độ phân giải rất gọn gàng. Tối ưu hóa đứng ở giới hạn giới hạn trên và dưới bởi các quyền hạn như và / hoặc . Sẽ thật tuyệt nếu tìm thấy sự phân đôi tối ưu về số lượng Bernoullis mô phỏng. p n ( 1 - p ) m ( n + ma/bpn(1p)m(n+mm)pn(1p)m
Tây An

4

Đây là một giải pháp (một chút lộn xộn, nhưng đó là cú đâm đầu tiên của tôi). Bạn thực sự có thể bỏ qua và WLOG giả sử . Tại sao? Có tồn tại một thuật toán thông minh để tạo ra một đồng xu không thiên vị từ hai lần lật đồng xu thiên vị. Vậy ta có thể giả sử .P(H)=pP(H)=1/2P(H)=1/2

Để tạo một , tôi có thể nghĩ đến hai giải pháp (giải pháp đầu tiên không phải là của riêng tôi, nhưng thứ hai là khái quát hóa):Bernoulli(ab)

Giải pháp 1

Lật đồng xu không thiên vị lần. Nếu cái đầu không có mặt, bắt đầu lại. Nếu người đứng đầu hiện nay, lợi nhuận cho dù đồng tiền đầu tiên là một người đứng đầu hay không (vì )baaP(first coin is heads | a heads in b coins)=ab

Giải pháp 2

Điều này có thể được mở rộng thành bất kỳ giá trị nào của . Viết ở dạng nhị phân. Ví dụ:Bernoulli(p)p0.1=0.0001100110011001100110011...base 2

Chúng tôi sẽ tạo một số nhị phân mới bằng cách sử dụng lật đồng xu. Bắt đầu bằng và thêm chữ số tùy thuộc vào việc một đầu (1) hoặc đuôi (0) xuất hiện. Ở mỗi lần lật, hãy so sánh số nhị phân mới của bạn với biểu diễn nhị phân của cho đến cùng một chữ số . Cuối cùng cả hai sẽ phân kỳ và trả về nếu lớn hơn số nhị phân của bạn.0.p bin(p)

Trong Python:

def simulate(p):
    binary_p = float_to_binary(p)
    binary_string = '0.'
    index = 3
    while True:
        binary_string += '0' if random.random() < 0.5 else '1'
        if binary_string != binary_p[:index]:
            return binary_string < binary_p[:index]
        index += 1

Một số bằng chứng:

np.mean([simulate(0.4) for i in range(10000)])

là khoảng 0,4 (tuy nhiên không nhanh)


Câu trả lời hay, nhưng bạn có thể giải thích với phương pháp 1 của bạn cách làm cho p không hợp lý không?
AbracaDabra

2
@AbracaDabra tại sao tính hợp lý của vấn đề ? p
Glen_b -Reinstate Monica

@AbracaDabra: bất kể giá trị của , xác suất nhận được và là như nhau, cụ thể là , do đó xác suất để có được giá trị này so với giá trị khác là . ( 0 , 1 ) ( 1 , 0 ) p ( 1 - p ) 1 / 2p(0,1)(1,0)p(1p)1/2
Tây An

4

Tôi thấy một giải pháp đơn giản, nhưng không nghi ngờ gì, có nhiều cách để làm điều đó, một số có lẽ đơn giản hơn thế này. Cách tiếp cận này có thể được chia thành hai bước:

  1. Tạo ra từ hai sự kiện có xác suất bằng nhau được đưa ra một quy trình tung đồng xu không công bằng (sự kết hợp của đồng tiền cụ thể và phương pháp mà nó được tung ra tạo ra một cái đầu có xác suất ). Chúng ta có thể gọi hai sự kiện có thể xảy ra như nhau là và . [Có một cách tiếp cận đơn giản cho việc này đòi hỏi phải lấy các cặp quăng và để tạo ra hai kết quả có khả năng như nhau, với tất cả các kết quả khác dẫn đến việc tạo ra một cặp mới cuộn để thử lại.]H T H = ( H , T ) T = ( T , H )pHTH=(H,T)T=(T,H)

  2. Bây giờ bạn tạo ra một bước đi ngẫu nhiên với hai trạng thái hấp thụ bằng cách sử dụng đồng xu công bằng mô phỏng. Bằng cách chọn khoảng cách của các trạng thái hấp thụ từ gốc (một ở trên và một dưới nó), bạn có thể đặt cơ hội hấp thụ bằng cách nói trạng thái hấp thụ trên là tỷ lệ mong muốn của các số nguyên. Cụ thể, nếu bạn đặt hàng rào hấp thụ phía trên tại và hàng rào dưới tại (và bắt đầu quá trình từ gốc) và chạy bước ngẫu nhiên cho đến khi hấp thụ, xác suất hấp thụ ở hàng rào trên là .- ( b - a ) aa(ba)aa+(ba)=ab

    (Có một số tính toán được thực hiện ở đây để hiển thị nó, nhưng bạn có thể đưa ra xác suất khá dễ dàng bằng cách làm việc với các mối quan hệ lặp lại ... hoặc bạn có thể thực hiện bằng cách tóm tắt chuỗi vô hạn ... hoặc có nhiều cách khác.)

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.