Làm thế nào để mẫu từ


19

Tôi muốn lấy mẫu theo mật độ trong đó và là hoàn toàn tích cực. (Động lực: Điều này có thể hữu ích cho việc lấy mẫu Gibbs khi tham số hình dạng của mật độ Gamma có đồng nhất trước đó.)cd

f(a)cada1Γ(a)1(1,)(a)
cd

Có ai biết làm thế nào để lấy mẫu từ mật độ này một cách dễ dàng? Có lẽ nó là tiêu chuẩn và chỉ là một cái gì đó tôi không biết về?

Tôi có thể nghĩ ra một thuật toán lấy mẫu từ chối ngu ngốc sẽ ít nhiều hoạt động (tìm chế độ của , mẫu từ đồng phục trong một hộp lớn và từ chối nếu ), nhưng (i) nó hoàn toàn không hiệu quả và (ii) sẽ quá lớn để máy tính có thể xử lý dễ dàng thậm chí vừa phải lớn và . (Lưu ý rằng chế độ cho và xấp xỉ tại .) f ( một , u ) [ 0 , 10 một * ] × [ 0 , f ( một * ) ] u > f ( một ) f ( một * ) c d c d một = c daf(a,u)[0,10a]×[0,f(a)]u>f(a)f(a)cdcdmột= =cd

Cảm ơn trước sự giúp đỡ nào!


+1 câu hỏi hay. Tôi không chắc chắn nếu có một cách tiếp cận tiêu chuẩn.
suncoolsu

Bạn đã kiểm tra (cho ý tưởng) ở những nơi "rõ ràng" chưa, như, ví dụ, văn bản của Devroye ?
Đức Hồng Y

Có, tôi đã thử một số ý tưởng từ văn bản của Devroye. Các Γ(a) đã làm cho nó khó khăn cho tôi để có được bất cứ nơi nào với hầu hết trong số họ, mặc dù ... hầu hết các phương pháp dường như đòi hỏi một trong hai hội nhập (để tìm CDF), phân hủy thành các hàm đơn giản hơn, hoặc bounding bởi các chức năng đơn giản hơn ... nhưng Γ chức năng làm cho tất cả những khó khăn. Nếu ai có ý tưởng về nơi để tìm kiếm các cách tiếp cận đối với các bài toán - ví dụ, nơi nào khác nào Γ chức năng bật lên một cách "thiết yếu" như ở đây (không chỉ là một hằng số bình thường) trong số liệu thống kê - đó có thể là rất hữu ích cho tôi !
NF

Có một sự khác biệt rất lớn giữa trường hợp c d 2 . Bạn có cần phải bao gồm cả hai trường hợp này? cd<2cd2
whuber

1
Đó là sự thật - cảm ơn. Chúng ta có thể giả sử rằng . cd2
NF

Câu trả lời:


21

Lấy mẫu từ chối sẽ hoạt động đặc biệt tốt khi và hợp lý cho c d exp ( 2 ) .cdexp(5)cdđiểm kinh nghiệm(2)

Để đơn giản hóa toán học một chút, hãy để , viết x = a và lưu ý rằngk= =cdx= =một

f(x)αkxΓ(x)dx

cho . Thiết x = u 3 / 2 chox1x= =bạn3/2

f(bạn)αkbạn3/2Γ(bạn3/2)bạn1/2dbạn

cho . Khi k exp ( 5 ) , phân phối này cực kỳ gần với Bình thường (và càng gần hơn khi k càng lớn). Cụ thể, bạn có thểu1kđiểm kinh nghiệm(5)k

  1. Tìm chế độ của bằng số (bằng cách sử dụng, ví dụ: Newton-Raphson).f(bạn)

  2. Mở rộng sang lệnh thứ hai về chế độ của nó.đăng nhậpf(bạn)

Điều này mang lại các tham số của một phân phối chuẩn gần đúng. Để có độ chính xác cao, Bình thường gần đúng này chiếm ưu thế ngoại trừ ở đuôi cực. (Khi k < exp ( 5 ) , bạn có thể cần mở rộng pdf Bình thường lên một chút để đảm bảo sự thống trị.)f(bạn)k<điểm kinh nghiệm(5)

Đã thực hiện công việc sơ bộ này cho bất kỳ giá trị đã cho nào của và ước tính hằng số M > 1 (như được mô tả dưới đây), việc có được một phương sai ngẫu nhiên là một vấn đề:kM>1

  1. Vẽ một giá trị từ phân phối chuẩn g ( u ) .bạng(bạn)

  2. Nếu hoặc nếu đồng phục mới thay đổi X vượt quá f ( u ) / ( M g ( u ) ) , quay lại bước 1.bạn<1Xf(bạn)/(Mg(bạn))

  3. Đặt .x= =bạn3/2

Số lượng đánh giá dự kiến ​​của do sự khác biệt giữa gf chỉ lớn hơn một chút (Một số đánh giá bổ sung sẽ xảy ra do sự từ chối của các biến thiên nhỏ hơn 1 , nhưng ngay cả khi k thấp đến 2 tần số như vậy xảy ra là nhỏ.)fgf1k2

Âm mưu của f và g với k = 5

Biểu đồ này cho thấy các logarit của gf là hàm của u với . Vì các biểu đồ rất gần nhau, chúng tôi cần kiểm tra tỷ lệ của chúng để xem điều gì đang xảy ra:k= =điểm kinh nghiệm(5)

biểu đồ tỷ lệ log

Điều này sẽ hiển thị nhật ký tỷ lệ ; hệ số của M = exp ( 0,004 ) đã được đưa vào để đảm bảo logarit là dương trong suốt phần chính của phân phối; có nghĩa là, để đảm bảo M g ( u ) f ( u ) ngoại trừ có thể là ở các vùng xác suất không đáng kể. Bằng cách làm cho M đủ lớn, bạn có thể đảm bảo rằng M gđăng nhập(điểm kinh nghiệm(0,004)g(bạn)/f(bạn))M= =điểm kinh nghiệm(0,004)Mg(bạn)f(bạn)MMgthống trị trong tất cả nhưng những cái đuôi cực đoan nhất (thực tế không có cơ hội được chọn trong một mô phỏng nào). Tuy nhiên, M càng lớn thì sự từ chối sẽ xảy ra thường xuyên hơn. Khi k phát triển lớn, M có thể được chọn rất gần với 1 , thực tế không có hình phạt nào.fMkM1

Một cách tiếp cận tương tự hoạt động ngay cả đối với , nhưng giá trị M khá lớn có thể cần thiết khi exp ( 2 ) < k < exp ( 5 ) , vì f ( u ) không đối xứng rõ rệt. Chẳng hạn, với k = exp ( 2 ) , để có được g chính xác hợp lý, chúng ta cần đặt M = 1 :k>điểm kinh nghiệm(2)Mđiểm kinh nghiệm(2)<k<điểm kinh nghiệm(5)f(bạn)k= =điểm kinh nghiệm(2)gM= =1

Âm mưu cho k = 2

Đường cong màu đỏ phía trên là biểu đồ của trong khi đường cong màu xanh dưới là biểu đồ của log ( f ( u ) ) . Lấy mẫu từ chối của f liên quan đến exp ( 1 ) g sẽ khiến khoảng 2/3 tất cả các lần rút thử nghiệm bị từ chối, tăng gấp ba nỗ lực: vẫn không tệ. Đuôi bên phải ( u > 10 hoặc x > 10 3 / 2 ~ 30đăng nhập(điểm kinh nghiệm(1)g(bạn))đăng nhập(f(bạn))fđiểm kinh nghiệm(1)gbạn>10x>103/2~30) Sẽ được đại diện trong việc lấy mẫu từ chối (vì chiếm ưu thế không còn e ở đó), nhưng điều đó đuôi bao gồm ít hơn exp ( - 20 ) ~ 10 - 9 của tổng xác suất.điểm kinh nghiệm(1)gfđiểm kinh nghiệm(-20)~10-9

Tóm lại, sau một nỗ lực ban đầu để tính toán chế độ và đánh giá số hạng bậc hai của chuỗi xung quanh chế độ - một nỗ lực đòi hỏi nhiều nhất vài chục đánh giá chức năng - bạn có thể sử dụng lấy mẫu từ chối tại chi phí dự kiến ​​từ 1 đến 3 (hoặc hơn) đánh giá cho mỗi phương sai. Hệ số nhân chi phí nhanh chóng giảm xuống 1 khi k = c d tăng quá 5.f(bạn)k= =cd

Ngay cả khi chỉ cần một lần rút từ là cần thiết, phương pháp này là hợp lý. Nó đi vào chính nó khi cần nhiều lần rút tiền độc lập cho cùng một giá trị k , sau đó tổng chi phí tính toán ban đầu được khấu hao theo nhiều lần rút.fk


Phụ lục

@Cardinal đã yêu cầu, khá hợp lý, để hỗ trợ một số phân tích vẫy tay trong việc gửi đi. Đặc biệt, tại sao nên việc chuyển đổi làm cho sự phân bố xấp xỉ bình thường?x= =bạn3/2

Theo lý thuyết về các phép biến đổi Box-Cox , việc tìm kiếm một số phép biến đổi sức mạnh có dạng (đối với hằng số α , hy vọng không quá khác biệt) sẽ làm cho phân phối "bình thường" hơn. Hãy nhớ lại rằng tất cả các bản phân phối Bình thường được đặc trưng đơn giản: logarit của pdf của chúng hoàn toàn là bậc hai, với số hạng tuyến tính bằng 0 và không có thuật ngữ bậc cao hơn. Do đó, chúng ta có thể lấy bất kỳ pdf nào và so sánh nó với phân phối Bình thường bằng cách mở rộng logarit của nó dưới dạng chuỗi lũy thừa xung quanh đỉnh (cao nhất) của nó. Chúng tôi tìm kiếm một giá trị của α làm cho (ít nhất) thứ bax=uαααsức mạnh biến mất, ít nhất là xấp xỉ: đó là điều chúng ta có thể hy vọng một cách hợp lý rằng một hệ số tự do duy nhất sẽ hoàn thành. Thường thì điều này hoạt động tốt.

Nhưng làm thế nào để có được một xử lý về phân phối cụ thể này? Khi thực hiện chuyển đổi năng lượng, pdf của nó là

f(u)=kuαΓ(uα)uα1.

Lấy logarit của nó và sử dụng bản ghi mở rộng không triệu chứng của Stirling ( Γ ) :log(Γ)

log(f(u))log(k)uα+(α1)log(u)αuαlog(u)+uαlog(2πuα)/2+cuα

(đối với các giá trị nhỏ của , không phải là hằng số). Công trình này cung cấp α là dương, mà chúng tôi sẽ giả sử là trường hợp (vì nếu không chúng tôi không thể bỏ qua phần còn lại của việc mở rộng).cα

Tính đạo hàm thứ ba của nó (khi chia cho , Sẽ là hệ số công suất thứ ba của u trong chuỗi lũy thừa) và khai thác thực tế là ở cực đại, đạo hàm thứ nhất phải bằng không. Điều này đơn giản hóa đạo hàm thứ ba rất nhiều, cho (khoảng, bởi vì chúng ta đang bỏ qua đạo hàm của c )3!uc

12u(3+α)α(2α(2α3)u2α+(α25α+6)uα+12cα).

Khi không quá nhỏ, bạn thực sự sẽ lớn ở đỉnh. Vì α dương, nên thuật ngữ chi phối trong biểu thức này là công suất 2 α , chúng ta có thể đặt thành 0 bằng cách làm cho hệ số của nó biến mất:kuα2α

2α3=0.

Đó là lý do công trình rất tốt: với lựa chọn này, hệ số thuật ngữ khối xung quanh còn lại hoạt động đỉnh cao như u - 3 , đó là gần exp ( - 2 k ) . Khi k vượt quá 10 hoặc hơn, bạn thực tế có thể quên nó và nó nhỏ một cách hợp lý ngay cả khi k xuống còn 2. Các quyền lực cao hơn, từ thứ tư trở đi, đóng vai trò ngày càng ít đi vì k hệ số của chúng tăng lên, vì hệ số của chúng tăng lên tỷ lệ nhỏ hơn, quá. Ngẫu nhiên, các tính toán tương tự (dựa trên đạo hàm thứ hai của l o g ( fα=3/2u3exp(2k)kkk ở mức cực đại) cho thấy độ lệch chuẩn của xấp xỉ Bình thường này nhỏ hơn 2log(f(u)), với sai số tỷ lệ vớiexp(-k/2).23exp(k/6)exp(k/2)


(+1) Câu trả lời tuyệt vời. Có lẽ bạn có thể mở rộng ngắn gọn về động lực cho sự lựa chọn của bạn về biến chuyển đổi.
Đức hồng y

Bổ sung tốt đẹp. Điều này làm cho một câu trả lời rất, rất đầy đủ!
Đức hồng y

11

Tôi thích câu trả lời của @ whuber rất nhiều; nó có thể rất hiệu quả và có một phân tích đẹp. Nhưng nó đòi hỏi một số hiểu biết sâu sắc đối với phân phối cụ thể này. Đối với các tình huống mà bạn không có cái nhìn sâu sắc đó (vì vậy đối với các bản phân phối khác nhau), tôi cũng thích cách tiếp cận sau đây phù hợp với tất cả các bản phân phối trong đó PDF có thể phân biệt hai lần và đạo hàm thứ hai có nhiều gốc. Nó đòi hỏi khá nhiều công việc để thiết lập, nhưng sau đó bạn có một công cụ hoạt động cho hầu hết các bản phân phối mà bạn có thể ném vào nó.

Về cơ bản, ý tưởng là sử dụng một tuyến tính trên piecewise giới hạn trên PDF mà bạn thích nghi khi bạn đang thực hiện lấy mẫu từ chối. Đồng thời bạn có một tuyến tính thấp hơn piecewisebị ràng buộc với PDF khiến bạn không phải đánh giá PDF quá thường xuyên. Các giới hạn trên và dưới được đưa ra bởi các hợp âm và tiếp tuyến cho biểu đồ PDF. Sự phân chia ban đầu thành các khoảng là như vậy trên mỗi khoảng, PDF là tất cả lõm hoặc tất cả lồi; Bất cứ khi nào bạn phải từ chối một điểm (x, y), bạn chia nhỏ khoảng đó tại x. (Bạn cũng có thể thực hiện một phân mục bổ sung tại x nếu bạn phải tính toán PDF vì giới hạn dưới thực sự rất tệ.) Điều này làm cho các phân mục xảy ra đặc biệt thường xuyên khi giới hạn trên (và dưới) xấu, do đó bạn có được mức rất tốt xấp xỉ PDF của bạn về cơ bản là miễn phí. Các chi tiết có một chút khó khăn để có được quyền, nhưng tôi đã cố gắng giải thích hầu hết trong số họ trong này hàng loạt các blog của bài viết - đặc biệtngười cuối cùng .

Những bài đăng đó không thảo luận phải làm gì nếu PDF không bị ràng buộc trong miền hoặc trong các giá trị; Tôi muốn đề xuất một giải pháp rõ ràng là thực hiện một phép biến đổi làm cho chúng hữu hạn (sẽ khó tự động hóa) hoặc sử dụng một điểm cắt. Tôi sẽ chọn điểm cắt tùy thuộc vào tổng số điểm bạn muốn tạo, giả sử N và chọn điểm cắt để phần bị loại bỏ có xác suất nhỏ hơn . (Điều này là đủ dễ dàng nếu bạn có một hình thức đóng cho CDF; nếu không nó cũng có thể khó khăn.)1/(10N)

Phương thức này được triển khai trong Maple như là phương thức mặc định cho các phân phối liên tục do người dùng định nghĩa. (Tiết lộ đầy đủ - Tôi làm việc cho Maplesoft.)


Tôi đã thực hiện một ví dụ chạy, tạo 10 ^ 4 điểm cho c = 2, d = 3, chỉ định [1, 100] làm phạm vi ban đầu cho các giá trị:

đồ thị

Có 23 lần từ chối (màu đỏ), 51 điểm "đang bị quản chế" vào thời điểm giữa giới hạn dưới và PDF thực tế và 9949 điểm được chấp nhận sau khi chỉ kiểm tra các bất đẳng thức tuyến tính. Đó là tổng số 74 đánh giá của PDF, hoặc khoảng một đánh giá PDF trên 135 điểm. Tỷ lệ sẽ trở nên tốt hơn khi bạn tạo được nhiều điểm hơn, vì phép tính gần đúng sẽ ngày càng tốt hơn (và ngược lại, nếu bạn chỉ tạo ra một vài điểm, tỷ lệ này sẽ tệ hơn).


Và nhân tiện - nếu bạn chỉ cần đánh giá PDF rất ít vì bạn có giới hạn thấp hơn cho nó, bạn có thể đủ khả năng để mất nhiều thời gian hơn cho nó, vì vậy bạn chỉ cần sử dụng thư viện bignum (thậm chí có thể là MPFR?) Và đánh giá Chức năng Gamma trong đó không có quá nhiều nỗi sợ tràn.
Erik P.

(+1) Đây là một cách tiếp cận tốt đẹp. Cảm ơn đã chia sẻ nó.
whuber

1Γ(điểm kinh nghiệm(cd))/Γ(x)xđiểm kinh nghiệm(k)Γ12
whuber

@whuber re: Gammas: À đúng - Tôi thấy rằng bạn cũng đã gợi ý điều này ở trên. Cảm ơn!
Erik P.

3

Bạn có thể làm điều đó bằng cách thực hiện số lượng phương thức đảo ngược, điều này nói rằng nếu bạn cắm các biến ngẫu nhiên (0,1) thống nhất vào CDF nghịch đảo, bạn sẽ có được một kết quả rút ra từ phân phối. Tôi đã bao gồm một số mã R bên dưới thực hiện điều này và từ một vài kiểm tra tôi đã thực hiện, nó đang hoạt động tốt, nhưng nó hơi cẩu thả và tôi chắc chắn rằng bạn có thể tối ưu hóa nó.

Nếu bạn không quen thuộc với R, lgamma () là nhật ký của hàm gamma; tích phân () tính tích phân 1-D xác định; uniroot () tính toán một gốc của hàm bằng cách sử dụng phép chia 1-D.

# density. using the log-gamma gives a more numerically stable return for 
# the subsequent numerical integration (will not work without this trick)
f = function(x,c,d) exp( x*log(c) + (x-1)*log(d) - lgamma(x) )

# brute force calculation of the CDF, calculating the normalizing constant numerically
F = function(x,c,d) 
{
   g = function(x) f(x,c,d)
   return( integrate(g,1,x)$val/integrate(g,1,Inf)$val )
}

# Using bisection to find where the CDF equals p, to give the inverse CDF. This works 
# since the density given in the problem corresponds to a continuous CDF. 
F_1 = function(p,c,d) 
{
   Q = function(x) F(x,c,d)-p
   return( uniroot(Q, c(1+1e-10, 1e4))$root )
}

# plug uniform(0,1)'s into the inverse CDF. Testing for c=3, d=4. 
G = function(x) F_1(x,3,4)
z = sapply(runif(1000),G)

# simulated mean
mean(z)
[1] 13.10915

# exact mean
g = function(x) f(x,3,4)
nc = integrate(g,1,Inf)$val
h = function(x) f(x,3,4)*x/nc
integrate(h,1,Inf)$val
[1] 13.00002 

# simulated second moment
mean(z^2)
[1] 183.0266

# exact second moment
g = function(x) f(x,3,4)
nc = integrate(g,1,Inf)$val
h = function(x) f(x,3,4)*(x^2)/nc
integrate(h,1,Inf)$val
[1] 181.0003

# estimated density from the sample
plot(density(z))

# true density 
s = seq(1,25,length=1000)
plot(s, f(s,3,4), type="l", lwd=3)

(1,10000)>100000c,d

cd


1
Phương pháp này là chính xác, nhưng vô cùng đau đớn! Có bao nhiêu đánh giá chức năng mà bạn cho là cần thiết cho một phương sai ngẫu nhiên duy nhất? Hàng ngàn? Mười nghìn đồng?
whuber

cd(cd)xx

1
fmộtđăng nhập(cd)-đăng nhập(Γ(một))

Đó là những gì tôi làm cho tính toán - nó vẫn không tránh được tràn. Bạn không thể cấp số nhân lớn hơn khoảng 500 trên máy tính. Số lượng đó lớn hơn nhiều. Tôi có nghĩa là "khá tốt" so sánh nó với mẫu từ chối mà OP đã đề cập.
Macro

1
cd
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.