做 MCMC:使用 jags/stan 或自己實現
我是貝葉斯統計研究的新手。我從研究人員那裡聽說,貝葉斯研究人員最好自己實施 MCMC,而不是使用像 JAGS/Stan 這樣的工具。請問除了學習目的之外,自己實現 MCMC 算法有什麼好處(用像 R 這樣的“不太快”的語言)?
一般來說,我強烈建議不要為真正的應用貝葉斯分析編寫自己的 MCMC。這既需要大量的工作和時間,也很可能會在代碼中引入錯誤。黑盒採樣器,例如 Stan,已經使用了非常複雜的採樣器。相信我,您不會只為一次分析編寫這種口徑的採樣器!
在某些特殊情況下,這還不夠。例如,如果您需要實時進行分析(即基於傳入數據的計算機決策),這些程序將不是一個好主意。這是因為 Stan 需要編譯 C++ 代碼,這可能比僅僅為相對簡單的模型運行已經準備好的採樣器花費更多的時間。在這種情況下,您可能想要編寫自己的代碼。此外,我相信在某些特殊情況下,像 Stan 這樣的包做得很差,例如非高斯狀態空間模型(完全披露:我相信Stan 在這種情況下做得很差,但不知道)。在這種情況下,實現自定義 MCMC 可能是值得的。但這是例外,不是規則!
老實說,我認為大多數為單一分析編寫採樣器的研究人員(這確實發生了,我已經看到了)這樣做是因為他們喜歡編寫自己的採樣器。至少,我可以說我屬於那個類別(即我很失望,編寫自己的採樣器不是做事的最佳方式)。
此外,雖然為單個分析編寫自己的採樣器沒有意義,但為一類分析編寫自己的代碼可能很有意義. 由於 JAG、Stan 等是黑盒採樣器,因此您始終可以通過專門針對給定模型來使事情變得更快,儘管改進的數量取決於模型。但是從頭開始編寫一個極其高效的採樣器可能需要 10-1,000 小時的工作,具體取決於經驗、模型複雜性等。如果您正在研究貝葉斯方法或編寫統計軟件,那很好;這是你的工作。但是如果你的老闆說“嘿,你能分析這個重複測量數據集嗎?” 而你花了 250 小時編寫一個高效的採樣器,你的老闆很可能會不高興。相比之下,您可以用 Stan 編寫此模型,例如 2 小時,並且運行時間為 2 分鐘,而不是高效採樣器所達到的 1 分鐘運行時間。