MCMCの実行:jags / stanを使用するか、自分で実装する


13

ベイジアン統計の研究は初めてです。ベイジアンの研究者はJAGS / Stanのようなツールを使用するよりも、MCMCを自分で実装する方がよいと研究者から聞いた。学習目的を除いて、MCMCアルゴリズムを(Rのような「高速ではない」言語で)自分で実装することの利点は何ですか?


独自の提案分布を自分で選択できるため、それから生じるマルコフ連鎖ができるだけ速く後部に収束するように選択する必要があります。

ありがとう!それが唯一の理由ですか?
user112758

4
あなたが応用のためにそれを使用してより多くのベイズを学びたい応用研究者であるなら、私はJAGSまたはStanから始めて、そしてあなたが「必要」であると思うならばあなた自身のMCMCを書くことに移ることを勧めます。JAGSとStanには、長所と制限がわずかに異なることに注意してください。
共役前

ありがとう!はい、応用研究を行っています。JAGSとStanの制限について詳しく教えてください。私は最初にStanを試しましたが、「オンラインモニタリング」または「収束するまでサンプル」機能やアドオンがないことを発見しました。
user112758

回答:


26

一般に、実際のベイジアン解析のために独自のMCMCをコーディングしないことを強くお勧めします。これは多くの作業と時間の両方であり、コードにバグを導入する可能性が非常に高いです。StanなどのBlackboxサンプラーは、すでに非常に高度なサンプラーを使用しています。私を信じてください、あなたはたった1つの分析のためにこの口径のサンプラーをコーディングしません!

これでは十分ではない特別なケースがあります。たとえば、リアルタイムで分析を行う必要がある場合(受信データに基づくコンピューターの決定など)、これらのプログラムはお勧めできません。これは、StanがC ++コードのコンパイルを必要とするためです。これは、比較的単純なモデル用に既に準備されたサンプラーを実行するよりもかなり時間がかかる場合があります。その場合、独自のコードを作成することができます。さらに、非ガウス状態空間モデルなど、スタンのようなパッケージのパフォーマンスが非常に低い特殊なケースがあると思います(完全開示:このケースでスタンのパフォーマンスは低いと思いますが、わかりません)。その場合、カスタムMCMCを実装する価値があります。しかし、これは例外であり、規則ではありません!

正直に言うと、単一の分析用にサンプラーを作成するほとんどの研究者は、独自のサンプラーを作成するのが好きだからそうしていると思います(これは実際に発生しています。少なくとも、私はそのカテゴリーに該当すると言うことができます(つまり、自分のサンプラーを書くことが物事を行うための最良の方法ではないことに失望しています)。

また、単一の分析用に独自のサンプラーを記述することは意味がありませんが、分析のクラス用に独自のコードを記述することは非常に意味があります。。JAG、Stanなどはブラックボックスサンプラーであるため、特定のモデルに特化することで常に改善できますが、改善量はモデルに依存します。しかし、非常に効率的なサンプラーを一から作成するのは、経験やモデルの複雑さなどに応じて、おそらく10〜1,000時間の作業です。それはあなたの仕事です。しかし、上司が「ねえ、この繰り返し測定データセットを分析できますか?」効率的なサンプラーの作成に250時間を費やすと、上司は動揺する可能性があります。対照的に、このモデルをスタンで、たとえば2時間で記述し、効率的なサンプラーで1分間の実行時間を達成する代わりに、2分間の実行時間を作成することもできます。


3
+1。また、Stanは離散分布に関連するいくつかの問題を直接処理しません。したがって、それ自体は単純ではないこれらを統合するのに十分な知識が必要です。JAGSはそのようなケースを直接処理しますが、BUGS / JAGSとStanの異なる哲学を頭の中で分けておくことができる場合は、それらを単に切り替えることをお勧めします。
ウェイン

さらに、Stanには、対角線のユークリッドメトリックが後部のジオメトリにあまり適していないという問題があります。これは、とりわけ、後方の狭い、奇妙な形の領域のみが存在する確率が高い場合です。その結果、後方をサンプリングすることは、崖の端に沿って自転車に乗ろうとするようなものです。間違った方向に進むと、「落ちる」かもしれません。
Sycoraxは、Reinstate Monica

2
+1。学生への私の一般的な推奨事項は、JAGSでコーディングすることです。それがうまくいかない場合は、Stanでコーディングします。それでもうまくいかない場合は、独自のサンプラーの作成を開始してください。また、BUGSを使用したい空間モデルなどの特定のモデルもあります。また、NIMBLEを使用する特定のモデル(非ガウス状態空間モデルなど)。独自のサンプラーを作成して開始する機会費用は高すぎます。
ジャラドニエミ

私は「リアルタイム」のケースを理解していません-「すでに準備された」独自のサンプラーを使用できる場合、コンパイル済みのStanモデルを使用するのはなぜ簡単ではないのですか?また、MCMCがリアルタイムアプリケーションに十分高速であるかどうかも疑問に思います。
ジュホコッカラ

1
また、新しいモデルのコンパイルが正確に必要なものを知るほどスタンに精通していませんが、制限が何であれ、新しいデータが入ってくるとモデルがより複雑になるような動的モデルが存在することを想像するのはそれほど難しくありませんそのため、再コンパイルが必要になります。ノンパラメトリック法(パラメーターサイズがサンプルサイズと共に増加する)はその基準に適合すると思いますか?しかし、それを回避する賢い方法があるかもしれません。
クリフAB

6

この質問は主に意見に基づいていますが、ここに答えを書き留めるのに十分だと思います。研究問題のために自分のサンプラーをコーディングする理由はたくさんあります。ここにそれらのいくつかがあります

  1. 提案: fcopがコメントで示唆したように、サンプルがMHの場合、独自のサンプラーをコーディングすると、提案分布をいじって最適なミキシングサンプラーを取得できます。

  2. 柔軟性:ビルドされたプログラムでは、必要な柔軟性が得られない場合があります。特定のランダム値から開始するか、特定のシード構造を使用することができます。

  3. 理解:独自のサンプラーをコーディングすると、サンプラーの動作を理解するのに役立ち、マルコフ連鎖プロセスの洞察が得られます。これは、問題に取り組んでいる研究者にとって有用です。

  4. 責任:私がすべてのベイジアン推論を行っているデータが、私がコーディングしなかったプログラムから来た場合、推論の責任はもはや私にはありません。研究者として、提示した方法/結果について全責任を負いたいと思います。組み込みのメソッドを使用することはできません。

おそらくもっと多くの理由がありますが、これらは私が自分のサンプラーをコーディングする4つの理由です。


6
「信頼」の理由は議論の余地があると思います。スタンはオープンソースであり、多くの貢献者がいるため、複数の人がそのソースコードを見て、深刻なバグがある可能性は低いです。他の一方で、あなたは自分でそれを行う場合、あなたは常にあなたが作ったバグを見落とすことができます-そして誰もが、それは...あなたが書くコードの行数だけの問題であるバグを作る
ティム

@ティム私は同意します。私が言おうとしていたことを反映するために、私はその点を変えました。ありがとう。
グリーンパーカー

5
理解の議論のために+1。ただし、Onusの議論は少し誇張されているようです。自分でコーディングするほとんどすべてのものは、他の誰かの統計言語、線形代数ライブラリ、乱数ジェネレータなどに依存するため、「責任を負う」ことは程度の問題です。
共役前

@conjugateprior絶対に同意しました。それが私の答えが一人称であった理由です。これは純粋に私の意見でした。
グリーンパーカー

4

Cliff ABの回答に+1を付けました。1つの小さなヒントを追加するには、低レベルで作業し、コードのすべてを自分で作成するレベルまで下げたい場合は、LaplacesDemonパッケージを探します。元の作者は素晴らしかったが、グリッドから脱落したようで、パッケージは他の誰かに引き継がれた。(Githubにあります。)

これは、実装し、印象的な MCMCに使用されるアルゴリズムの数を、付属のビネットは、パッケージを使用していない場合でも、読んで価値があります。あなたが読んだほとんどすべての種類のサンプラーです。BUGS / JAGSやStanとは異なる方法でコーディングし、すべてRで行いますが、多くの場合、非常に効率的であるため競争力があります。


1
恥知らずなプラグイン:[nimble](r-nimble.org)を使用して、MCMCをカスタマイズすることもできます(つまり、このノードにスライスサンプラーを使用したり、そのノードグループにブロックアップデーターを使用するなど)。このサンプラーは毎回。また、直接実装する独自のサンプラーを作成することもできます!開示:私はこのプロジェクトで働いていました。
クリフAB

@CliffAB:LaplacesDemonあなたがそれに精通している場合、に似た音。nimble同様に聞いてうれしい。少なくともダウンロードします。(複数のLaplacesDemonビネットは、軽快に使用してもダウンロードする価値があるかもしれません。)...ああ、ページに行きました。そのSMCが使いやすいなら、私は大ファンになります。私が目にした唯一のRパッケージは、SMCが恐ろしく複雑です。
ウェイン

@CliffAB:うわー、nimbleウェブサイトを読んだ後、それはかなり印象的です。聞いたことがないのはなぜですか?BUGS / JAGSモデリング言語に慣れている人にとっては素晴らしい選択肢のようです。もちろん、彼らはウェブサイトで可能な限り最高の比較を行いますが、それでも私はこれまでのところそれが好きです。(フードの下でスタンを使用するrstanarmandを除き、brmsRの使いやすさのチャンピオンはスタンになります。)
ウェイン

まだ非常に新しいものです。v0.1がリリースされたのは2年以上前だと思いますか?また、SMCはこのプロジェクトの大きな動機でした。PIはパーティクルフィルターに関するかなりの公開を行っており、毎回ゼロから作成することに悩まされていました。しかし、SMCサンプラーの現在の状態を把握するために、現在の作業に少し取り組んできました。私が去ったとき(ほぼ2年前)、私たちは非常に原始的なものをまとめました。
クリフAB

1
ただ、この言うarXivの論文あなたが興味があるかもしれませんが。
クリフAB
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.