Làm MCMC: sử dụng jags / stan hoặc tự thực hiện


13

Tôi mới tham gia nghiên cứu Thống kê Bayes. Tôi đã nghe từ các nhà nghiên cứu rằng các nhà nghiên cứu Bayes tự thực hiện MCMC tốt hơn thay vì sử dụng các công cụ như JAGS / Stan. Tôi có thể tự hỏi lợi ích của việc thực hiện thuật toán MCMC là gì (trong một ngôn ngữ "không hoàn toàn nhanh" như R), ngoại trừ mục đích học tập?


Bởi vì sau đó bạn có thể tự chọn phân phối đề xuất của riêng mình, bạn nên chọn nó sao cho Chuỗi Markov kết quả từ nó hội tụ nhanh nhất có thể đến hậu thế.

cảm ơn! Có phải đó là lý do duy nhất?
user112758

4
Nếu bạn là nhà nghiên cứu ứng dụng muốn tìm hiểu thêm Bayes bằng cách sử dụng nó cho các ứng dụng, tôi khuyên bạn nên bắt đầu với JAGS hoặc Stan và sau đó chuyển sang viết MCMC của riêng bạn nếu bạn thấy bạn cần. Hãy nhớ rằng JAGS và Stan có những điểm mạnh và hạn chế hơi khác nhau.
liên hợp chiến

cảm ơn! Vâng, tôi đang làm nghiên cứu ứng dụng. Bạn có thể cho tôi biết thêm về những hạn chế của JAGS và Stan. Lần đầu tiên tôi đã thử Stan, nhưng tôi chỉ thấy nó không có tính năng "giám sát trực tuyến" hoặc "mẫu cho đến khi hội tụ" các tính năng hoặc tiện ích bổ sung --- điều này thật khó chịu, tôi có thể thử JAGS ngay bây giờ.
user112758

Câu trả lời:


26

Nói chung, tôi thực sự khuyên bạn không nên mã hóa MCMC của riêng bạn để phân tích Bayes áp dụng thực sự. Đây là cả một công việc và thời gian tốt và rất có khả năng giới thiệu các lỗi trong mã. Bộ lấy mẫu hộp đen, chẳng hạn như Stan, đã sử dụng bộ lấy mẫu rất tinh vi. Tin tôi đi, bạn sẽ không viết mã cho một mẫu của tầm cỡ này chỉ cho một phân tích!

Có những trường hợp đặc biệt trong đó sẽ không đủ. Ví dụ: nếu bạn cần thực hiện phân tích trong thời gian thực (nghĩa là quyết định của máy tính dựa trên dữ liệu đến), các chương trình này sẽ không phải là một ý tưởng hay. Điều này là do Stan yêu cầu biên dịch mã C ++, có thể mất nhiều thời gian hơn so với việc chỉ chạy một bộ lấy mẫu đã được chuẩn bị cho các mô hình tương đối đơn giản. Trong trường hợp đó, bạn có thể muốn viết mã của riêng bạn. Ngoài ra, tôi tin rằng có những trường hợp đặc biệt mà các gói như Stan làm rất kém, chẳng hạn như các mô hình không gian nhà nước không phải Gaussian (tiết lộ đầy đủ: Tôi tin rằng Stan làm rất kém trong trường hợp này, nhưng không biết). Trong trường hợp đó, có thể đáng để thực hiện MCMC tùy chỉnh. Nhưng đây là ngoại lệ, không phải là quy tắc!

Thành thật mà nói, tôi nghĩ rằng hầu hết các nhà nghiên cứu viết mẫu cho một phân tích duy nhất (và điều này xảy ra, tôi đã thấy nó) làm như vậy bởi vì họ thích viết các mẫu lấy mẫu của riêng họ. Ít nhất, tôi có thể nói rằng tôi thuộc thể loại đó (tức là tôi thất vọng vì viết bộ lấy mẫu của riêng tôi không phải là cách tốt nhất để làm mọi việc).

Ngoài ra, mặc dù việc viết mẫu của riêng bạn cho một phân tích không có ý nghĩa gì, nhưng việc viết mã của riêng bạn cho một lớp phân tích sẽ không có ý nghĩa gì. Là các JAG, Stan, v.v. là những người lấy mẫu hộp đen, bạn luôn có thể làm mọi thứ nhanh hơn bằng cách chuyên dùng cho một mô hình nhất định, mặc dù số lượng cải tiến phụ thuộc vào mô hình. Nhưng viết một bộ lấy mẫu cực kỳ hiệu quả có thể là 10-1.000 giờ làm việc, tùy thuộc vào kinh nghiệm, độ phức tạp của mô hình, v.v ... Nếu bạn đang nghiên cứu về phương pháp Bayes hoặc viết phần mềm thống kê, điều đó tốt; đó là việc của bạn. Nhưng nếu sếp của bạn nói "Này, bạn có thể phân tích tập dữ liệu đo lặp đi lặp lại này không?" và bạn dành 250 giờ để viết một bộ lấy mẫu hiệu quả, sếp của bạn có thể sẽ buồn. Ngược lại, bạn có thể đã viết mô hình này bằng Stan trong 2 giờ và có 2 phút thời gian chạy thay vì thời gian chạy 1 phút mà bộ lấy mẫu hiệu quả đạt được.


3
+1. Ngoài ra, Stan không trực tiếp xử lý một số vấn đề liên quan đến các bản phân phối rời rạc, vì vậy bạn phải biết đủ để tích hợp những thứ không đơn giản này, vì vậy đó có thể là một trường hợp mà chính bạn có thể giúp đỡ. Tuy nhiên, tôi tin rằng JAGS xử lý trực tiếp các trường hợp như vậy, vì vậy nếu bạn có thể giữ các triết lý khác nhau của BUGS / JAGS và Stan tách biệt trong tâm trí của bạn, tốt nhất chỉ nên chuyển đổi giữa chúng.
Wayne

Hơn nữa, Stan có thể gặp vấn đề trong đó một số liệu Euclide chéo không phù hợp với hình học của hậu thế; đây là trường hợp liên alia khi chỉ có một vùng hẹp, có hình dạng kỳ lạ của hậu thế có nhiều khả năng. Kết quả là việc lấy mẫu sau sẽ giống như cố gắng đạp xe dọc theo mép của một vách đá: bạn có thể "ngã" nếu bạn rẽ nhầm!
Sycorax nói phục hồi Monica

2
+1. Đề nghị chung của tôi cho sinh viên là viết mã trong JAGS. Nếu nó không hoạt động tốt, thì hãy viết mã trong Stan. Nếu điều đó không hoạt động tốt, thì hãy bắt đầu viết bộ lấy mẫu của riêng bạn. Ngoài ra còn có một số mô hình nhất định, ví dụ như mô hình không gian, nơi bạn có thể muốn sử dụng BUGS. Và một số mô hình nhất định, ví dụ như các mô hình không gian trạng thái không phải Gaussian, nơi bạn muốn sử dụng NIMBLE. Chi phí cơ hội của việc bắt đầu bằng cách viết bộ lấy mẫu của riêng bạn là quá cao.
jaradniemi

Tôi không hiểu trường hợp "thời gian thực" - nếu có thể có một bộ lấy mẫu riêng "đã được chuẩn bị" thì tại sao việc sử dụng mô hình Stan đã được biên dịch lại dễ dàng như vậy? Tôi cũng tự hỏi liệu có MCMC nào đủ nhanh cho các ứng dụng thời gian thực không.
Juho Kokkala

1
Và tôi không đủ quen thuộc với Stan để biết chính xác những gì cần phải biên dịch các mô hình mới, nhưng không quá khó để tưởng tượng rằng bất kể hạn chế là gì, vẫn tồn tại một mô hình động như khi có dữ liệu mới, mô hình sẽ trở nên phức tạp hơn và vì vậy việc biên dịch lại sẽ là cần thiết. Tôi nghĩ rằng các phương pháp không tham số (trong đó không gian tham số tăng theo kích thước mẫu) sẽ phù hợp với tiêu chí đó? Nhưng có thể có những cách thông minh để có được xung quanh đó.
Vách đá AB

6

Câu hỏi này chủ yếu dựa trên ý kiến, nhưng tôi nghĩ có đủ ở đây để viết một câu trả lời. Có thể có nhiều lý do để mã hóa bộ lấy mẫu của một người cho một vấn đề nghiên cứu. Dưới đây là một số trong số họ

  1. Đề xuất: Như fcop đã đề xuất trong nhận xét của họ, nếu mẫu là MH, thì mã hóa bộ lấy mẫu của riêng bạn cho phép bạn chơi xung quanh với các bản phân phối đề xuất để có được bộ lấy mẫu trộn tốt nhất.

  2. Tính linh hoạt: Trong các chương trình được xây dựng có thể không cung cấp cho bạn sự linh hoạt mà bạn muốn. Bạn có thể muốn bắt đầu ở một giá trị ngẫu nhiên cụ thể hoặc sử dụng cấu trúc hạt giống cụ thể.

  3. Hiểu: Mã hóa bộ lấy mẫu của riêng bạn giúp bạn hiểu hành vi của bộ lấy mẫu, đưa ra những hiểu biết sâu sắc về quy trình chuỗi Markov. Điều này rất hữu ích cho một nhà nghiên cứu làm việc về vấn đề này.

  4. Onus: Nếu dữ liệu mà tôi đang thực hiện tất cả suy luận Bayes của tôi đến từ một chương trình mà tôi không mã hóa, thì trách nhiệm về suy luận không còn thuộc về tôi nữa. Là một nhà nghiên cứu, tôi muốn chịu trách nhiệm hoàn toàn về các phương pháp / kết quả mà tôi trình bày. Sử dụng các phương thức xây dựng không cho phép bạn làm điều đó.

Có thể có nhiều lý do hơn, nhưng đây là bốn lý do khiến tôi viết mã lấy mẫu của riêng mình.


6
Tôi muốn nói rằng lý do "tin cậy" là không thể tranh cãi: Stan là nguồn mở và có rất nhiều người đóng góp, vì vậy nhiều người đã xem mã nguồn của nó và vì vậy không chắc là nó có lỗi nghiêm trọng. Mặt khác, nếu bạn tự làm điều đó, bạn luôn có thể bỏ qua lỗi mà bạn đã tạo ra - và mọi người đều mắc lỗi, đó chỉ là vấn đề về số dòng mã bạn viết ...
Tim

@Tim tôi đồng ý. Tôi đã thay đổi điểm đó để phản ánh những gì tôi đang cố gắng nói. Cảm ơn.
Greenparker

5
+1 cho đối số Hiểu. Tuy nhiên, đối số Onus có vẻ hơi cường điệu. Hầu như bất cứ điều gì bạn tự viết mã sẽ dựa vào ngôn ngữ thống kê của người khác, thư viện đại số tuyến tính, trình tạo số ngẫu nhiên, v.v. vì vậy 'chịu trách nhiệm' là vấn đề mức độ.
liên hợp chiến

@conjugatep Warrior Hoàn toàn đồng ý. Đó là lý do tại sao câu trả lời của tôi về điều đó là ở người đầu tiên. Đây hoàn toàn là ý kiến ​​của tôi.
Greenparker

4

Tôi đã trả lời +1 cho câu trả lời của Cliff AB. Để thêm một mẩu tin nhỏ, nếu bạn muốn làm việc ở mức thấp hơn nhưng không giảm xuống mức mã-mọi thứ, bạn nên tìm kiếm gói Lap thayDemon . Các tác giả ban đầu là tuyệt vời, nhưng dường như đã rơi ra khỏi lưới điện, và gói đã được người khác tiếp quản. (Đó là trên Github, tôi tin.)

Nó thực hiện một số thuật toán ấn tượng được sử dụng trong MCMC và các họa tiết đi kèm đáng để đọc ngay cả khi bạn không sử dụng gói. Khá nhiều loại mẫu bạn đọc, nó có. Bạn viết mã theo một cách khác so với BUGS / JAGS hoặc Stan, và tất cả đều bằng R, nhưng thường thì nó hiệu quả đến mức cạnh tranh.


1
Trình cắm không biết xấu hổ: bạn cũng có thể sử dụng [nimble] (r-nimble.org) cho phép bạn tùy chỉnh MCMC của mình (tức là sử dụng bộ lấy mẫu lát cho nút này, chặn trình cập nhật cho nhóm nút đó, v.v.) mà không cần phải viết lại người lấy mẫu này mỗi lần Và bạn cũng có thể viết các mẫu lấy mẫu của riêng bạn để được thực hiện trực tiếp! Tiết lộ: Tôi đã từng làm việc trong dự án này.
Vách đá AB

@CliffAB: Âm thanh tương tự LaplacesDemon, nếu bạn quen với điều đó. Vui mừng khi nghe về nimblelà tốt. Ít nhất tôi sẽ tải nó. (Mặc dù nhiều họa tiết Lap thay thế có thể đáng để tải xuống ngay cả khi bạn sử dụng nhanh nhẹn.) ... Ohhh, chỉ cần đi đến trang. Nếu SMC của nó dễ sử dụng, tôi sẽ trở thành một fan hâm mộ lớn. Gói R duy nhất tôi từng thấy đó là SMC phức tạp khủng khiếp.
Wayne

@CliffAB: Wow, sau khi đọc nimbletrang web, nó khá ấn tượng. Tại sao tôi chưa bao giờ nghe nói về nó? Nó trông giống như một lựa chọn tuyệt vời cho những người đã sử dụng ngôn ngữ mô hình BUGS / JAGS. Tất nhiên, họ sẽ đưa ra những so sánh tốt nhất có thể có trên trang web, nhưng tôi vẫn thích nó cho đến nay. (Ngoại trừ việc có rstanarmbrmssử dụng Stan dưới mui xe, nhà vô địch dễ sử dụng sẽ là Stan.)
Wayne

Nó vẫn còn rất mới: v0.1 đã được phát hành Tôi nghĩ chỉ hơn 2 năm trước? Và SMC là một động lực rất lớn cho dự án: PI đã xuất bản đáng kể trên các bộ lọc hạt và cảm thấy khó chịu với việc viết chúng từ đầu mỗi lần. Nhưng tôi đã có một chút với công việc hiện tại để theo kịp trạng thái hiện tại của các bộ lấy mẫu SMC là gì; Khi tôi rời đi (gần hai năm trước), chúng tôi mới kết hợp một thứ rất nguyên thủy.
Vách đá AB

1
Chỉ cần nói giấy arXiv này bạn có thể quan tâm.
Cliff AB
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.