ベイジアン統計の研究は初めてです。ベイジアンの研究者はJAGS / Stanのようなツールを使用するよりも、MCMCを自分で実装する方がよいと研究者から聞いた。学習目的を除いて、MCMCアルゴリズムを(Rのような「高速ではない」言語で)自分で実装することの利点は何ですか?
ベイジアン統計の研究は初めてです。ベイジアンの研究者はJAGS / Stanのようなツールを使用するよりも、MCMCを自分で実装する方がよいと研究者から聞いた。学習目的を除いて、MCMCアルゴリズムを(Rのような「高速ではない」言語で)自分で実装することの利点は何ですか?
回答:
一般に、実際のベイジアン解析のために独自のMCMCをコーディングしないことを強くお勧めします。これは多くの作業と時間の両方であり、コードにバグを導入する可能性が非常に高いです。StanなどのBlackboxサンプラーは、すでに非常に高度なサンプラーを使用しています。私を信じてください、あなたはたった1つの分析のためにこの口径のサンプラーをコーディングしません!
これでは十分ではない特別なケースがあります。たとえば、リアルタイムで分析を行う必要がある場合(受信データに基づくコンピューターの決定など)、これらのプログラムはお勧めできません。これは、StanがC ++コードのコンパイルを必要とするためです。これは、比較的単純なモデル用に既に準備されたサンプラーを実行するよりもかなり時間がかかる場合があります。その場合、独自のコードを作成することができます。さらに、非ガウス状態空間モデルなど、スタンのようなパッケージのパフォーマンスが非常に低い特殊なケースがあると思います(完全開示:このケースではスタンのパフォーマンスは低いと思いますが、わかりません)。その場合、カスタムMCMCを実装する価値があります。しかし、これは例外であり、規則ではありません!
正直に言うと、単一の分析用にサンプラーを作成するほとんどの研究者は、独自のサンプラーを作成するのが好きだからそうしていると思います(これは実際に発生しています。少なくとも、私はそのカテゴリーに該当すると言うことができます(つまり、自分のサンプラーを書くことが物事を行うための最良の方法ではないことに失望しています)。
また、単一の分析用に独自のサンプラーを記述することは意味がありませんが、分析のクラス用に独自のコードを記述することは非常に意味があります。。JAG、Stanなどはブラックボックスサンプラーであるため、特定のモデルに特化することで常に改善できますが、改善量はモデルに依存します。しかし、非常に効率的なサンプラーを一から作成するのは、経験やモデルの複雑さなどに応じて、おそらく10〜1,000時間の作業です。それはあなたの仕事です。しかし、上司が「ねえ、この繰り返し測定データセットを分析できますか?」効率的なサンプラーの作成に250時間を費やすと、上司は動揺する可能性があります。対照的に、このモデルをスタンで、たとえば2時間で記述し、効率的なサンプラーで1分間の実行時間を達成する代わりに、2分間の実行時間を作成することもできます。
この質問は主に意見に基づいていますが、ここに答えを書き留めるのに十分だと思います。研究問題のために自分のサンプラーをコーディングする理由はたくさんあります。ここにそれらのいくつかがあります
提案: fcopがコメントで示唆したように、サンプルがMHの場合、独自のサンプラーをコーディングすると、提案分布をいじって最適なミキシングサンプラーを取得できます。
柔軟性:ビルドされたプログラムでは、必要な柔軟性が得られない場合があります。特定のランダム値から開始するか、特定のシード構造を使用することができます。
理解:独自のサンプラーをコーディングすると、サンプラーの動作を理解するのに役立ち、マルコフ連鎖プロセスの洞察が得られます。これは、問題に取り組んでいる研究者にとって有用です。
責任:私がすべてのベイジアン推論を行っているデータが、私がコーディングしなかったプログラムから来た場合、推論の責任はもはや私にはありません。研究者として、提示した方法/結果について全責任を負いたいと思います。組み込みのメソッドを使用することはできません。
おそらくもっと多くの理由がありますが、これらは私が自分のサンプラーをコーディングする4つの理由です。
Cliff ABの回答に+1を付けました。1つの小さなヒントを追加するには、低レベルで作業し、コードのすべてを自分で作成するレベルまで下げたい場合は、LaplacesDemonパッケージを探します。元の作者は素晴らしかったが、グリッドから脱落したようで、パッケージは他の誰かに引き継がれた。(Githubにあります。)
これは、実装し、印象的な MCMCに使用されるアルゴリズムの数を、付属のビネットは、パッケージを使用していない場合でも、読んで価値があります。あなたが読んだほとんどすべての種類のサンプラーです。BUGS / JAGSやStanとは異なる方法でコーディングし、すべてRで行いますが、多くの場合、非常に効率的であるため競争力があります。
LaplacesDemon
あなたがそれに精通している場合、に似た音。nimble
同様に聞いてうれしい。少なくともダウンロードします。(複数のLaplacesDemonビネットは、軽快に使用してもダウンロードする価値があるかもしれません。)...ああ、ページに行きました。そのSMCが使いやすいなら、私は大ファンになります。私が目にした唯一のRパッケージは、SMCが恐ろしく複雑です。
nimble
ウェブサイトを読んだ後、それはかなり印象的です。聞いたことがないのはなぜですか?BUGS / JAGSモデリング言語に慣れている人にとっては素晴らしい選択肢のようです。もちろん、彼らはウェブサイトで可能な限り最高の比較を行いますが、それでも私はこれまでのところそれが好きです。(フードの下でスタンを使用するrstanarm
andを除き、brms
Rの使いやすさのチャンピオンはスタンになります。)